如何建立你自己的Docker映象
Alpine Linux的什麼是Docker社群所鍾愛?輕量級容器意味著更多的計算資源。Alpine Linux的確是輕型的,也就是說Alpine Linux是面向安全應用的輕量級 Linux 發行版。
你喜歡存錢嗎?我喜歡存錢。更好地資源利用就像擁有幸福的銀行賬戶。
讓我們對Docker上的Alpine Linux一探究竟。在Alpine Linux上可以建立屬於我們自己的映象。
建立你自己的容器
建立一個映象的第一步是建立一個新的目錄,並開啟Dockerfile。接來下,用你最喜愛的文字編輯器取代“atom”行。
cd ~
mkdir buildingDockers
cd buildingDockers
atom Dockerfile
在atom中,新增以下程式碼到檔案中並儲存。
FROM iron/base
這是Iron.io容器的基礎映象,但你實際上可以命名任意Docker repo裡你想要的的映象。
我喜歡iron/base映象,因為這是一個Iron.io部落格。但也因為它增加了必要的庫,當我們開始新增和構建其他包的時候可以派上用場。
我們首先需要FROM命令。讓我們建立容器!在命令列中鍵入:
docker build -t namehere .
身披Shell的勇士
好了,我們已經有一個容器。現在,我們用它做什麼?
訪問shell是一個很棒的方法,並且很有成就感。它也很方便進行故障排除。開啟映象並釋放shell,試試:
docker build -t namehere .
注意,這不是Bash。
有許多有用的命令來建立Docker映象。為了簡化,本文只介紹FROM和RUN命令。這絕對是值得檢視整個列表選項的官方文件。
生而為RUN
RUN如何執行一個命令。例如,Alpine Linux 有一個很棒的儲存類包,類似apt-get之類。為了看已安裝的東西,嘗試新增以下程式碼到你的Dockerfile:
RUN apk info
我們的安裝包是如此有用。讓我們新增一些東西。為此,從Alpine Linux packages repo中選擇一個包。現在,將它新增至Dockerfile:
RUN apk add packageNameHere
最佳的實踐和警告
Docker本身就有一個偉大的最佳實踐指南。在這篇文章中,他們指出保持映象小的重要性。避免膨脹很簡單和直觀。沒問題,對吧?只是安裝你需要的軟體。
你也在Dockerfile中限制RUN命令的數量?Dockerfile 建立在層中。每個命令新增一個新的層。更多的層意味著更多的工作要做,你要將它們乾淨利落的合併在一起。
層可多可少
減少分層,我建議對命令分組。我們希望新增一個單獨的層解決儘可能多的工作。以下是分組命令:
RUN command1 && command2
通過使用“ ”和回車使它更具可讀性:
RUN command1
&& command2
&& command3
直到變成腦力負擔之前,分組命令都是偉大的。當那種情況發生,優先考慮維護性。如果它減少了認知負荷,使用一個額外的RUN命令。Kelsey Hightower在《12 Fractured Apps》中指出,扭轉一個RUN命令到shell指令碼中是一個稍顯遜色的方法來保證映象的可維護性。
刪除快取,沒人會因此受傷
沒必要在Docker-land中安裝快取包。所以,讓我們刪除快取。在你的Dockerfile結尾處新增以下語句:
RUN rm -rf /var/cache/apk/*
Musl Milk
如果你敢於用官方之外的Alpine Linux apk生態系統,你就有很大的機會選擇從原始碼進行編譯。請注意,Alpine Linux依賴於Musl而不是GCC。
照著這麼編譯。
Busy Beat Boxin’
Alpine Linux在發行版大小上作出一些犧牲。他們選擇BusyBox,而不是安裝*Nix實用工具的標準套件。BusyBox是常用的實用工具中不錯的精簡型。
那就意味著一些實用工具可能不接受一般的GNU標記。這也意味著有些實用工具可能會完全消失。想要curl在你的映象中?那你必須安裝它。
保持學習
維基百科上有Alpine Linux的資料,你可以自己尋找更方便的技巧。
最後,有我們便利的IronWorker指南,很容易檢視Docker映象。如果你想看看我們如何寫Dockerfiles,訪問github.com/iron-io/dockers.