docker構建鏡像的方式有兩種,一種是經過 docker commit 命令構建,另外一種是經過 Dockerfile 構建文件構建。下面分別經過兩種方式介紹這兩種構建方式。docker
接下來,咱們會分別採用上述的兩種方式構建帶有vim命令的centos鏡像。vim
咱們先查看下當前的環境。在本地docker倉庫中如今有一個centos 7.4.1708 的鏡像,若是沒有請先拉取。centos
如今以交互的方式運行該centos7鏡像bash
docker run -it centos:7.4.1708
-it 參數ui
這個參數是以交互方式運行centos鏡像的意思,也就是咱們進入到該centos7的容器中(也就是該用戶空間中),這裏須要注意一點的是,咱們的容器是運行在宿主主機上的,也就是說容器的運行內核是宿主主機的內核(bootfs)。這裏,若是咱們在centos鏡像中運行 uname 命令,這裏顯示的是docker宿主主機的內核版本號。centos7
接下來,咱們以交互方式運行下centos容器的vim命令,結果base image是沒有預裝vim命令的。spa
咱們看到,在命令行的左邊,出現了一個 74c83be9fd78 ,這個是在docker engine運行的容器ID,咱們在宿主主機上能夠經過命令,查看當前在docker引擎中運行的全部容器。命令行
docker ps
下方的就是咱們運行中的centos容器了。3d
這種方式構建裝有vim命令的新的centos鏡像須要完成如下三個步驟:code
(1)運行容器。前面已經啓動了centos容器
(2)修改容器,須要在運行的容器中安裝vim命令
(3)將修改後的容器保存爲新的鏡像
經過交互模式進入須要新修改的centos7容器,運行yum命令安裝vim命令
yum install -y vim
安裝後,從新運行vim檢查是否安裝成功。
在新窗口中查看當前運行的容器
執行commit命令將容器保存爲新的鏡像,050704f7c569 是運行的容器的ID,centos7-vim-by-commit是新鏡像的名字,1.0.0是版本號
docker commit 050704f7c569 centos7-vim-by-commit:1.0.0
commit成功 後,查看下當前倉庫中的docker鏡像,多了一個centos7-vim-by-commit,tag是1.0.0的鏡像
咱們運行該鏡像
docker run -it centos7-vim-by-commit:1.0.0
發現vim命令是能夠運行的。
除了能夠用commit方式構建鏡像,咱們還能夠用 Dockerfile(推薦方法)構建鏡像。
首先,咱們在/root中建立一個目錄 first-dockerfile , 該目錄做爲咱們構建鏡像的build context
[root@localhost first-dockerfile]# pwd /root/first-dockerfile
咱們在該目錄下建立一個名字爲Dockerfile的文件,該文件是docker構建鏡像的腳本
FROM centos:7.4.1708 RUN yum install -y vim
準備就緒後,在first-dockerfile目錄下運行,開始構建新的鏡像
docker build -t centos7-vim-by-dockerfile:1.0.0 .
build命令,-t參數將新鏡像命名爲centos7-vim-by-dockerfile,tag是1.0.0。命令最後的 . ,指明當前目錄爲build context,默認狀況下從build context中查找Dockerfile文件
執行build命令後,開始執行構建過程
[root@localhost first-dockerfile]# docker build -t centos7-vim-by-dockerfile:1.0.0 . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM centos:7.4.1708 ---> 295a0b2bd8ea Step 2/2 : RUN yum install -y vim ---> Running in 121ba3c1492c ............ 省略安裝過程 Complete! Removing intermediate container 121ba3c1492c ---> 6148376c2a1f Successfully built 6148376c2a1f Successfully tagged centos7-vim-by-dockerfile:1.0.0
咱們能夠經過查看本地鏡像和鏡像分層的方式驗證。
查看本地鏡像
[root@localhost first-dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos7-vim-by-dockerfile 1.0.0 6148376c2a1f 24 minutes ago 350MB centos7-vim-by-commit 1.0.0 bda9b5d82a72 2 days ago 350MB centos 7.4.1708 295a0b2bd8ea 4 weeks ago 197MB hello-world latest 4ab4c602aa5e 2 months ago 1.84kB
查看鏡像分層
[root@localhost first-dockerfile]# docker history 6148376c2a1f IMAGE CREATED CREATED BY SIZE COMMENT 6148376c2a1f 36 minutes ago /bin/sh -c yum install -y vim 153MB 295a0b2bd8ea 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 4 weeks ago /bin/sh -c #(nop) LABEL name=CentOS Base Im… 0B <missing> 4 weeks ago /bin/sh -c #(nop) ADD file:d6a1da927f0b7a710… 197MB
docker history命令會顯示鏡像的構建歷史。