11-Dockerfile構建鏡像

用 Dockerfile 建立上節的 ubuntu-with-vi,其內容則爲:nginx

FROM ubuntu
RUN apt-get update && apt-get install vim -y

下面咱們運行 docker build 命令構建鏡像並詳細分析每一個細節。docker

root@ubuntu:~# pwd         ①  ubuntu

/root  vim

root@ubuntu:~# ls          ②   centos

Dockerfile   ui

root@ubuntu:~# docker build -t ubuntu-with-vi-dockerfile .        ③   spa

Sending build context to Docker daemon 32.26 kB           ④   code

Step 1 : FROM ubuntu           ⑤   blog

 ---> f753707788c5   get

Step 2 : RUN apt-get update && apt-get install -y vim           ⑥   

 ---> Running in 9f4d4166f7e3             ⑦   

 

......   

 

Setting up vim (2:7.4.1689-3ubuntu1.1) ...   

 ---> 35ca89798937           ⑧    

Removing intermediate container 9f4d4166f7e3          ⑨   

Successfully built 35ca89798937           ⑩   

root@ubuntu:~#   


① 當前目錄爲 /root。

② Dockerfile 準備就緒。

③ 運行 docker build 命令,-t 將新鏡像命名爲 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 爲當前目錄。Docker 默認會從 build context 中查找 Dockerfile 文件,咱們也能夠經過 -f 參數指定 Dockerfile 的位置。

④ 從這步開始就是鏡像真正的構建過程。 首先 Docker 將 build context 中的全部文件發送給 Docker daemon。build context 爲鏡像構建提供所須要的文件或目錄。
Dockerfile 中的 ADD、COPY 等命令能夠將 build context 中的文件添加到鏡像。此例中,build context 爲當前目錄 /root,該目錄下的全部文件和子目錄都會被髮送給 Docker daemon。

因此,使用 build context 就得當心了,不要將多餘文件放到 build context,特別不要把 //usr 做爲 build context,不然構建過程會至關緩慢甚至失敗。

⑤ Step 1:執行 FROM,將 ubuntu 做爲 base 鏡像。
ubuntu 鏡像 ID 爲 f753707788c5。

⑥ Step 2:執行 RUN,安裝 vim,具體步驟爲 ⑦、⑧、⑨。

⑦ 啓動 ID 爲 9f4d4166f7e3 的臨時容器,在容器中經過 apt-get 安裝 vim。

⑧ 安裝成功後,將容器保存爲鏡像,其 ID 爲 35ca89798937。
這一步底層使用的是相似 docker commit 的命令

⑨ 刪除臨時容器 9f4d4166f7e3。

⑩ 鏡像構建成功。 
經過 docker images 查看鏡像信息。 

鏡像 ID 爲 35ca89798937,與構建時的輸出一致。

在上面的構建過程當中,咱們要特別注意指令 RUN 的執行過程 ⑦、⑧、⑨。Docker 會在啓動的臨時容器中執行操做,並經過 commit 保存爲新的鏡像。

查看鏡像分層結構

ubuntu-with-vi-dockerfile 是經過在 base 鏡像的頂部添加一個新的鏡像層而獲得的。

 

這個新鏡像層的內容由 RUN apt-get update && apt-get install -y vim 生成。這一點咱們能夠經過 docker history 命令驗證。

docker history 會顯示鏡像的構建歷史,也就是 Dockerfile 的執行過程。

ubuntu-with-vi-dockerfile 與 ubuntu 鏡像相比,確實只是多了頂部的一層 35ca89798937,由 apt-get 命令建立,大小爲 97.07MB。docker history 也向咱們展現了鏡像的分層結構,每一層由上至下排列。

用Dockerfile構建nginx

#zbw dockerfile
FROM centos
MAINTAINER zbw@163.com
WORKDIR /opt/mytest
COPY testfile .
ADD etc-docker.tar.gz .
RUN set -x && yum install epel-release -y && yum install nginx -y
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
相關文章
相關標籤/搜索