跳到主要內容

[Docker] 客製化Docker Image

客製化屬於自己的Docker Image

前言

前一篇分享如何下載雲端的Image檔案,並且將它注入到Container執行。但有些特殊的情境,雲端上的模板沒辦法百分之百符合需求,就必須要客製化屬於自己的Image檔案,本篇要點如下
  • 使用Pull 的方式建立Image
  • 使用Dockerfile方式建立Image
  • Image的基本相關操作

 

站在前人的肩膀上向前邁進 (Pull)

利用Pull指令建立Image,這觀念跟Git有異曲同工之妙。透過Git開發新功能時,第一個動作就是先Pull新版的檔案,然後做一些更改之後,Commit變更,並加入註解和作者資訊。如果對Git操作已經很熟悉的話,以Pull的方式建立Image將會感到異常地親切。
那就來實作看看吧,打開PowerShell 輸入以下指令
docker run -t -i training/sinatra /bin/bash
畫面會停留在等待輸入指令列的狀態,此時我們試著更新Ruby。
apt-get install -y ruby2.0-dev
這裡會出現詳細的執行情形,要稍微等一下,等到它跳到等待命令的狀態時,再輸入exit跳出,就完成了更新Container的動作。接下來要把變更後的Container內容封裝成Image,這裡需要Container ID,可透過docker ps指令取得
將Container ID複製起來,等會會用到,接著透過commit指令建立Image,指令可參考下方
docker commit -m "Update Ruby" -a "Hank Chen" eadc80cf90f1 hank\sinatra:v2
上面指令在commit之後可分為四個區塊
  • -m "Update Ruby" =>代表是註解資訊
  •  -a "Hank Chen" =>代表是作者資訊
  • eadc80cf90f1 => Container ID 透過docker ps 取得
  • hank/sinatra : v2  冒號前半段是Repository名稱,後半段是tag
Image建立完成之後,可透過docker images指令檢查
如果有出現剛剛建立的Image,就大功告成嚕。

Dockerfile客製化Image

第二種要介紹透過Dockerfile來客製化Image,透過Pull的確可以很快速建立起自己的Image,但因為有很多設定都是繼承而來的,所以多少還是會有無法掌控所有細節的感覺,而且繼承來的東西都是黑箱,難免會藏污納垢,唯有將所有內容都攤在陽光下,才能確保沒有魔鬼藏在細節裡。
使用Dockerfile,因為所有設定都是來自設定檔,因此彈性是最大的。那接下來就來實作一個簡單的dockerfile範例。
首先,先建立一個新資料夾,在資料夾內新增一個名為Dockerfile的檔案,並且把命令列目錄移到該資料夾。
Dockerfile檔案不可有任何附檔名。
檔案新增完成後如下圖所示。
命令列目錄移到該資料夾
接著打開Dockerfile檔案,可以直接用筆記本打開,貼上下列指令,按存檔。
FROM ubuntu:14.04
MAINTAINER Hank Chen 
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
Dockerfile的內容格式 : 指示詞( FROM 、MAINTAINER、RUN etc....)必須要大寫  +  陳述式 
上方範例,Image來自(FROM) ubuntu ,維護人(MAINTAINER)是Hank Chen,並執行(RUN)兩個指令碼。
接著輸入指令
 docker build -t hank/sinatra:v3 .

此段指令分為兩個區塊,第一個參數"-t " 代表識別這個Image檔案是屬於hank/sinatra:v3,第二個" . "是代表在當前資料夾搜尋Dockerfile,所以前面才需要將命令列目錄移到Dockerfile所在的資料夾,當然也可以自行指定路徑。
執行完畢後,透過docker images指令確認是否成功建立Image,如出現下圖內容,代表已建立完成。

同場加映

為Image新增tag

docker tag 5db5f8471261 hank/sinatra:v5

移除建立的Image

docker tag 5db5f8471261 hank/sinatra:v3

由上圖可發現本來有v3和v5版本,現在只剩下v5。

 

將建立好的Image 推送到雲端

docker push hank/sinatra
這個跟git指令幾乎一樣,就不贅述。

結論

本篇談到如何建立起屬於自己的Image檔案,以及一些常用的Image操作。而Pull和Dockerfile產生Image的選擇,主要還是看需求而定,如果只是要簡單擴充既有的Image,利用Pull的方式可以很輕易達到;反過來說,假設要完全客製化的Image檔案,建議還是使用Dockfiler,可以完全掌控所有細節,且彈性也是最高的。
下一篇將談論Network container的設定。

留言

這個網誌中的熱門文章

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示

2017通訊大賽「聯發科技物聯網開發競賽」決賽團隊29強出爐!作品都在11月24日頒獎典禮進行展示 LIS   發表於 2017年11月16日 10:31   收藏此文 2017通訊大賽「聯發科技物聯網開發競賽」決賽於11月4日在台北文創大樓舉行,共有29個隊伍進入決賽,角逐最後的大獎,並於11月24日進行頒獎,現場會有全部進入決賽團隊的展示攤位,總計約為100個,各種創意作品琳琅滿目,非常值得一看,這次錯過就要等一年。 「聯發科技物聯網開發競賽」決賽持續一整天,每個團隊都有15分鐘面對評審團做簡報與展示,並接受評審們的詢問。在所有團隊完成簡報與展示後,主辦單位便統計所有評審的分數,並由評審們進行審慎的討論,決定冠亞季軍及其他各獎項得主,結果將於11月24日的「2017通訊大賽頒獎典禮暨成果展」現場公佈並頒獎。 在「2017通訊大賽頒獎典禮暨成果展」現場,所有入圍決賽的團隊會設置攤位,總計約為100個,展示他們辛苦研發並實作的作品,無論是想觀摩別人的成品、了解物聯網應用有那些新的創意、尋找投資標的、尋找人才、尋求合作機會或是單純有興趣,都很適合花點時間到現場看看。 頒獎典禮暨成果展資訊如下: 日期:2017年11月24日(星期五) 地點:中油大樓國光廳(台北市信義區松仁路3號) 我要報名參加「2017通訊大賽頒獎典禮暨成果展」>>> 在參加「2017通訊大賽頒獎典禮暨成果展」之前,可以先在本文觀看各團隊的作品介紹。 決賽29強團隊如下: 長者安全救星 可隨意描繪或書寫之電子筆記系統 微觀天下 體適能訓練管理裝置 肌少症之行走速率檢測系統 Sugar Robot 賽亞人的飛機維修輔助器 iTemp你的溫度個人化管家 語音行動冰箱 MR模擬飛行 智慧防盜自行車 跨平台X-Y視覺馬達控制 Ironmet 菸消雲散 無人小艇 (Mini-USV) 救OK-緊急救援小幫手 穿戴式長照輔助系統 應用於教育之模組機器人教具 這味兒很台味 Aquarium Hub 發展遲緩兒童之擴增實境學習系統 蚊房四寶 車輛相控陣列聲納環境偵測系統 戶外團隊運動管理裝置 懷舊治療數位桌曆 SeeM智能眼罩 觸...
你掛65號,到醫院發現才看到7號怎麼辦?這家公司想出好方法,現值50億美金 創新拿鐵   2018-12-19 17:00 209801   人氣       現正熱映中 熱門文章 你掛65號,到醫院發現才看到7號怎麼辦?這家公司想出好方法,現值50億美金 創新拿鐵 2018-12-19 17:00 防堵非洲豬瘟的大功臣!超萌檢疫犬敬業值班「精彩故事多」,奇葩陸客最令人哭笑不得… 中央社 2018-12-17 11:41 機票錢根本花的冤枉⋯又貴、又擠、又騙!世界「六大最雷景點」,不要再輕信網路「照騙」了! 周佳萱 2018-12-14 13:58 活活燒死193人!列車駕駛叫大家「坐好別動」卻拔鑰匙逃跑…韓「大邱地鐵縱火案」離譜內幕 黃瑜敏 2018-12-18 12:34 火鍋的靈魂:湯底的秘密⋯國宴名廚:只要「這樣做」,清湯白水也能煮出好滋味! 食力foodNEXT 2018-12-16 10:00 駭人實驗!失散19年三胞胎感人重逢,意外揭穿「失散真相」是一樁慘無人道的心理實驗… 黃瑜敏 2018-12-17 15:04 誰理你們!從SARS爆發冷血嗆聲,到非洲豬瘟疫情不通報…看見「兩岸一家親」不過是場笑話 潘渝霈   蔡佳妘 2018-12-18 17:47 向老闆提升遷遭拒!3年後他當上主管才看透真相:太認真、太專業、太忠誠都是升遷阻礙... 洪雪珍 2018-12-19 14:34 醫院藥師月薪5萬起跳、只要包藥發藥很好賺?過來人痛揭醫院「領藥得來速」的黑暗真相 時報出版 2018-12-17 14:19 男孩與美洲豹玩耍照片竄紅網絡引發深思 BBC中文網 2018-12-17 12:24 更多文章   熱門分享 你掛65號,到醫院發現才看到7號怎麼辦?這家公司想出好方法,現值50億美金 創新拿鐵 2018-12-19 17:00 ...
哈密瓜、榴槤、棗子、火龍果的英文怎麼說?40 種常見水果單字大集合 31210 2018-07-20 整理‧撰文 陳婉玲 分享 575 Valeriy n Evlakhov via Shutterstock 在台灣,一年四季都能嘗到美味可口的水果,且因水果種類豐富,享譽國際,因此台灣素有「水果王國」之稱,是另類的「台灣之光」。 水果的種類這麼多,它們的英文你會說嗎?當外國朋友問你「What is your favorite fruit?」時,可別只會回答 apple、banana、orange!以下是分別是在四季中盛產與進口的水果英文,一起來看看! 春天 spring 蓮霧 wax apple / jambu fruit / java apple / bell apple 產期是 11 月 ~ 隔年 7 月。含鈣、鐵、維生素 A、維生素 B1、維生素 B2、維生素 C 等營養成分。 枇杷 loquat 產季在 3、4 月。 李子 plum 產季為 3 ~ 8 月。李子未成熟時,果酸含量極高,若腸胃消化不良者,不建議多吃,否則可能導致腹瀉或胃痛。不過,酒醉不醒者若想解酒,可利用其果酸幫助醒腦。 美濃瓜 / 甜瓜 / 香瓜 muskmelon 產季在 6 ~ 9 月。 楊桃 carambola / star fruit 「楊桃」較口語的說法為 star fruit,以它的形狀而得名,產期是 10 月 ~ 隔年 3 月,含蘋果酸、檸檬酸、草酸、維生素 A、維生素 B1、維生素 B2、維生素 C 等成分。 奇異果 kiwi fruit 產季為 9 月至隔年 4 月。奇異果含有豐富維生素 C、β 胡蘿蔔素、維生素 E 多醣、多酚、膳食纖維等。 番茄 tomato 產季通常為 1 ~ 4 月。 甘蔗 sugar cane 產期是 10 月到隔年 5 月。白甘蔗含糖量較高,但因質地較硬,不適合生吃。 梅子 (Asian) plum 原產於中國,後來傳入韓國、日本等地。一般在春末夏初為果實成熟期,可做成梅干、梅子醬、梅酒、酸梅湯、話梅等加工食品。 夏天 summer 桑葚 mulberry 產季在 4 月。 ...