玩轉docker-構建映象
構建映象
直接進入主題,docker的構建有兩種方式,一種是通過commit命令的方式,一種是通過 Dockerfile 構建檔案的方式構建,分析一下這兩種方式用法,以拿構建centos為例吧,打算將本地倉庫的centos安裝一些常用工具,然後構建成新的映象檔案,並儲存到本地倉庫中,下面直接上乾貨.
前期準備
執行一下 docker images 看看centos 是否已經拉取到本地倉庫了,如果沒有,那麼需要從 docker hub(https://hub.docker.com/) 官方網站下載一個版本,
拉取centos映象檔案
執行 docker pull centos 命令
執行完上述命令,發現已經將centos拉取到本地倉庫了,接下來就是通過改造centos,重新構建成新的映象檔案
命令構建
這種方式構建裝有常用工具的新的centos映象需要完成以下三個步驟:
(1)執行容器。
(2)修改容器,需要在執行的容器中安裝常用工具命令
(3)將修改後的容器儲存為新的映象
執行容器
首先進入到centos容器,先執行 docker run -it --name centos_old -d docker.io/centos bash
進入到該容器的命令其實有四種,這裡只介紹兩種:
執行 docker ps 拿到正在執行的容器之後,執行如下:
1) docker attach containerid(容器id) 進入到容器,上述是通過該命令執行,這種方式比較古老
2) docker exec -it cenos_old(你起的別名) bash 進入到容器,該命令是新版的docker才具有的,,
進入容器之後,發現命令的最左側有一串大概是雜湊值的東西,那就是容器的id,,
注意:
- -it 引數表示互動執行
- bash引數表示以指令碼方式執行 ,常用命令大家自行腦補.
進入到該容器之後,發現基本的 net-tools vim 等命令無法使用,那麼,我們可以根據情況安裝幾個常用工具,然後重新構建
修改容器
比如我想安裝一個 net-tools的命令,執行 yum install -y net-tools 那麼安裝完畢之後,ifconfig工具就可以用了
儲存映象
重新複製一個ssh視窗介面,找到目前正在執行的centos_old 容器
執行commit命令將容器儲存為新的映象,1362da3ae2a7 是執行的容器的ID,centos_new 是新映象的名字,1.0.0是版本號
如上圖所示,centos_new 是新構建的映象檔案,1.0.0是構建的版本號,上述sha256是通過sha演算法生成的一串雜湊值,這樣commit方式構建映象完畢.
檔案構建
上述,,除了通過commit方式構建映象檔案以外,我們還可以通過Dockerfile的方式來構建映象.因為通過Dockerfile的方式構建映象,需要有上下文的支援,因此,需要在/目錄下,新建一個資料夾,比如叫myDockerfle檔案
然後在該資料夾下再建立一個叫 Dockerfile的檔案,那麼該檔案就是映象檔案的構建指令碼.
在Dockerfile檔案中寫一些需要構建的目標指令碼,比如本例中,我打算在上述通過commit生成的centos_new 版本的基礎上,接著進行構建,並生成新的版本centos映象檔案,輸入如下一些指令碼資訊:
上述構建指令碼的含義是:我打算在centos_new基礎之上,構建一個安裝了httpd服務的新的centos映象檔案,並且需要讓該映象檔案開機的時候httpd服務生效,並暴露80埠,並且作者是yebn(嘻嘻)
說明:在上述執行過程中,大家會看到比較驚喜的一幕,會發現每步執行的時候,都會有step提示
- step1) 執行from操作的時候,會從id為ad9ad47b8ddb的容器中獲取源,如果沒有則將會從官網預設拉取
- step2) 執行第一個命令maintainer yebn ,表示構建作者是yebn,並且臨時生成一個id為2daeeb264489的容器
- step3)執行第三個命令的時候,將會打包生成一個新的映象a7dc5cf6d9a5,並移除step2的臨時映象2daeeb264489,這樣依次迴圈,直到所有的映象全部打包完畢
執行效果如上圖所示,執行 docker images 發現已經生成了最新的centos映象檔案,如下圖所示,centos_new 有兩個版本
執行 docker history 將會呈現該版本的每次構建歷史,如下圖所示:
歡迎各位小夥伴提出建議或者建議!
完