跳到主要內容

[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 ...

HTTP headers設置,讓網站更安全避免淪為挖礦機

https://meet.bnext.com.tw/articles/view/42595?utm_campaign=5741400&utm_source=SendPulse&utm_medium=push HTTP headers設置,讓網站更安全避免淪為挖礦機 梅干 2018/04/17 最近一位工程師好友,突然丟一個檢測平台的分數,起初梅干以為是SSL檢測,就進入測試一下,卻發現到,怎分數相當的低,最後研究了一下,原來網站不是有加入SSL憑證就代表安全無誤,就在今年的六月KeyCDN在官方部落格,發表了一篇關於站點HTTP headers配置,分別為X-XSS-Protection、X-Frame-Options、X-Content-Type-Options Content-Security-Policy、Strict-Transport-Security、Public-Key-Pins這六項進行安全的設定,讓網站更加的安全,不會淪為挖礦主機。 而要修正這個HTTP headers的配置,一點也不難,只需將設定參數加入.htaccess文件後,立即就可讓網站更加的安全,並且也可遠離挖礦惡意程式入侵主機,因此身為網站管理員,這個絕不容輕乎,因此也趕快來檢測看看,你的網站是否安全,以及要如何將網站進行修正。 HTTP headers檢測網站 網站名稱: securityheaders.io  網站連結: https://securityheaders.io Step1 首先,開啟.htaccess檔案後,並加入下方的參數設定。 # HTTP security settings start Header set Strict-Transport-Security: max-age=2592000; Header set X-Frame-Options: SAMEORIGIN Header set Referrer-Policy: no-referrer Header set X-XSS-Protection: "1; mode=block" Header set X-Content-Type-Options: nosniff # HTTP security settings end ...