docker - 構建一個簡單的docker鏡像

    docker構建鏡像的方式有兩種,一種是通過 docker commit 命令構建,另一種是通過 Dockerfile 構建文件構建。下面分別通過兩種方式介紹這兩種構建方式。

    接下來,我們會分別採用上述的兩種方式構建帶有vim命令的centos鏡像。

1、環境準備

    我們先查看下當前的環境。在本地docker倉庫中現在有一個centos 7.4.1708 的鏡像,如果沒有請先拉取。

    現在以交互的方式運行該centos7鏡像

docker run -it centos:7.4.1708

     -it 參數

    這個參數是以交互方式運行centos鏡像的意思,也就是我們進入到該centos7的容器中(也就是該用戶空間中),這裏需要注意一點的是,我們的容器是運行在宿主主機上的,也就是說容器的運行內核是宿主主機的內核(bootfs)。這裏,如果我們在centos鏡像中運行 uname 命令,這裏顯示的是docker宿主主機的內核版本號。

    接下來,我們以交互方式運行下centos容器的vim命令,結果base image是沒有預裝vim命令的。

    

    我們看到,在命令行的左邊,出現了一個 74c83be9fd78 ,這個是在docker engine運行的容器ID,我們在宿主主機上可以通過命令,查看當前在docker引擎中運行的所有容器。

docker ps

下方的就是我們運行中的centos容器了。

2、docker commit方式構建鏡像

這種方式構建裝有vim命令的新的centos鏡像需要完成以下三個步驟:

(1)運行容器。前面已經啓動了centos容器

(2)修改容器,需要在運行的容器中安裝vim命令

(3)將修改後的容器保存爲新的鏡像

2.1 修改容器

    通過交互模式進入需要新修改的centos7容器,運行yum命令安裝vim命令

yum install -y vim

    安裝後,重新運行vim檢查是否安裝成功。

2.2 保存修改後的容器爲新的鏡像

在新窗口中查看當前運行的容器

執行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命令是可以運行的。

3. 通過 Dockerfile 構建鏡像

除了可以用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
  • 第一行的意思是用centos的7.4.1708版本作爲我們構建鏡像的base image
  • 第二行在上面的base image的基礎上,安裝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
  • Step1。獲取centos鏡像,由於本地已經存在該鏡像,所有base image來源於ID爲295a0b2bd8ea的鏡像
  • Step2。運行 yum install -y vim 命令。首先,啓動臨時容器,ID爲121ba3c1492c,在該容器中安裝VIM,接下來打包新的鏡像,鏡像ID爲6148376c2a1f,然後刪除臨時容器。新的鏡像tag爲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命令會顯示鏡像的構建歷史。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章