第 3 章 镜像 - 013 - Dockerfile 构建镜像

第一个 Dockerfile

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

运行 docker build 命令构建镜像并详细分析每个细节

  1 [email protected]:~# pwd
  2 /root
  3 [email protected]:~#
  4 [email protected]:~# cat Dockerfile
  5 FROM ubuntu
  6 RUN apt-get update && apt-get install -y vim
  7 [email protected]:~#
  8 [email protected]:~# docker build -t ubuntu-with-vi-dockerfile .
  9 Sending build context to Docker daemon  24.06kB
 10 Step 1/2 : FROM ubuntu
 11  ---> 1d9c17228a9e
 12 Step 2/2 : RUN apt-get update && apt-get install -y vim
 13  ---> Running in 1ffb347c507f
 14 Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
 15 Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
 16 Get:3 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [1367 B]
 17 Get:4 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [135 kB]
 18 Get:5 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
 19 Get:6 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [300 kB]
 20 Get:7 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
 21 Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
 22 Get:9 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
 23 Get:10 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
 24 Get:11 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
 25 Get:12 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [10.7 kB]
 26 Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [6931 B]
 27 Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [900 kB]
 28 Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [618 kB]
 29 Get:16 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [3655 B]
 30 Fetched 15.3 MB in 48s (321 kB/s)
 31 Reading package lists...
 32 Reading package lists...
 33 Building dependency tree...
 34 Reading state information...
 35 The following additional packages will be installed:
 36   file libexpat1 libgpm2 libmagic-mgc libmagic1 libmpdec2 libpython3.6
 37   libpython3.6-minimal libpython3.6-stdlib libreadline7 libsqlite3-0 libssl1.1
 38   mime-support readline-common vim-common vim-runtime xxd xz-utils
 39 Suggested packages:
 40   gpm readline-doc ctags vim-doc vim-scripts
 41 The following NEW packages will be installed:
 42   file libexpat1 libgpm2 libmagic-mgc libmagic1 libmpdec2 libpython3.6
 43   libpython3.6-minimal libpython3.6-stdlib libreadline7 libsqlite3-0 libssl1.1
 44   mime-support readline-common vim vim-common vim-runtime xxd xz-utils
 45 0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
 46 Need to get 12.7 MB of archives.
 47 After this operation, 61.0 MB of additional disk space will be used.
 48 Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmagic-mgc amd64 1:5.32-2ubuntu0.1 [184 kB]
 49 Get:2 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmagic1 amd64 1:5.32-2ubuntu0.1 [68.4 kB]
 50 Get:3 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 file amd64 1:5.32-2ubuntu0.1 [22.1 kB]
 51 Get:4 http://archive.ubuntu.com/ubuntu bionic/main amd64 libexpat1 amd64 2.2.5-3 [80.2 kB]
 52 Get:5 http://archive.ubuntu.com/ubuntu bionic/main amd64 libmpdec2 amd64 2.4.2-1ubuntu1 [84.1 kB]
 53 Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libssl1.1 amd64 1.1.0g-2ubuntu4.3 [1130 kB]
 54 Get:7 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython3.6-minimal amd64 3.6.7-1~18.04 [531 kB]
 55 Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 mime-support all 3.60ubuntu1 [30.1 kB]
 56 Get:9 http://archive.ubuntu.com/ubuntu bionic/main amd64 readline-common all 7.0-3 [52.9 kB]
 57 Get:10 http://archive.ubuntu.com/ubuntu bionic/main amd64 libreadline7 amd64 7.0-3 [124 kB]
 58 Get:11 http://archive.ubuntu.com/ubuntu bionic/main amd64 libsqlite3-0 amd64 3.22.0-1 [496 kB]
 59 Get:12 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython3.6-stdlib amd64 3.6.7-1~18.04 [1711 kB]
 60 Get:13 http://archive.ubuntu.com/ubuntu bionic/main amd64 xxd amd64 2:8.0.1453-1ubuntu1 [49.2 kB]
 61 Get:14 http://archive.ubuntu.com/ubuntu bionic/main amd64 vim-common all 2:8.0.1453-1ubuntu1 [70.4 kB]
 62 Get:15 http://archive.ubuntu.com/ubuntu bionic/main amd64 xz-utils amd64 5.2.2-1.3 [83.8 kB]
 63 Get:16 http://archive.ubuntu.com/ubuntu bionic/main amd64 libgpm2 amd64 1.20.7-5 [15.1 kB]
 64 Get:17 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython3.6 amd64 3.6.7-1~18.04 [1415 kB]
 65 Get:18 http://archive.ubuntu.com/ubuntu bionic/main amd64 vim-runtime all 2:8.0.1453-1ubuntu1 [5437 kB]
 66 Get:19 http://archive.ubuntu.com/ubuntu bionic/main amd64 vim amd64 2:8.0.1453-1ubuntu1 [1152 kB]
 67 debconf: delaying package configuration, since apt-utils is not installed
 68 Fetched 12.7 MB in 38s (332 kB/s)
 69 Selecting previously unselected package libmagic-mgc.
 70 (Reading database ... 4039 files and directories currently installed.)
 71 Preparing to unpack .../00-libmagic-mgc_1%3a5.32-2ubuntu0.1_amd64.deb ...
 72 Unpacking libmagic-mgc (1:5.32-2ubuntu0.1) ...
 73 Selecting previously unselected package libmagic1:amd64.
 74 Preparing to unpack .../01-libmagic1_1%3a5.32-2ubuntu0.1_amd64.deb ...
 75 Unpacking libmagic1:amd64 (1:5.32-2ubuntu0.1) ...
 76 Selecting previously unselected package file.
 77 Preparing to unpack .../02-file_1%3a5.32-2ubuntu0.1_amd64.deb ...
 78 Unpacking file (1:5.32-2ubuntu0.1) ...
 79 Selecting previously unselected package libexpat1:amd64.
 80 Preparing to unpack .../03-libexpat1_2.2.5-3_amd64.deb ...
 81 Unpacking libexpat1:amd64 (2.2.5-3) ...
 82 Selecting previously unselected package libmpdec2:amd64.
 83 Preparing to unpack .../04-libmpdec2_2.4.2-1ubuntu1_amd64.deb ...
 84 Unpacking libmpdec2:amd64 (2.4.2-1ubuntu1) ...
 85 Selecting previously unselected package libssl1.1:amd64.
 86 Preparing to unpack .../05-libssl1.1_1.1.0g-2ubuntu4.3_amd64.deb ...
 87 Unpacking libssl1.1:amd64 (1.1.0g-2ubuntu4.3) ...
 88 Selecting previously unselected package libpython3.6-minimal:amd64.
 89 Preparing to unpack .../06-libpython3.6-minimal_3.6.7-1~18.04_amd64.deb ...
 90 Unpacking libpython3.6-minimal:amd64 (3.6.7-1~18.04) ...
 91 Selecting previously unselected package mime-support.
 92 Preparing to unpack .../07-mime-support_3.60ubuntu1_all.deb ...
 93 Unpacking mime-support (3.60ubuntu1) ...
 94 Selecting previously unselected package readline-common.
 95 Preparing to unpack .../08-readline-common_7.0-3_all.deb ...
 96 Unpacking readline-common (7.0-3) ...
 97 Selecting previously unselected package libreadline7:amd64.
 98 Preparing to unpack .../09-libreadline7_7.0-3_amd64.deb ...
 99 Unpacking libreadline7:amd64 (7.0-3) ...
100 Selecting previously unselected package libsqlite3-0:amd64.
101 Preparing to unpack .../10-libsqlite3-0_3.22.0-1_amd64.deb ...
102 Unpacking libsqlite3-0:amd64 (3.22.0-1) ...
103 Selecting previously unselected package libpython3.6-stdlib:amd64.
104 Preparing to unpack .../11-libpython3.6-stdlib_3.6.7-1~18.04_amd64.deb ...
105 Unpacking libpython3.6-stdlib:amd64 (3.6.7-1~18.04) ...
106 Selecting previously unselected package xxd.
107 Preparing to unpack .../12-xxd_2%3a8.0.1453-1ubuntu1_amd64.deb ...
108 Unpacking xxd (2:8.0.1453-1ubuntu1) ...
109 Selecting previously unselected package vim-common.
110 Preparing to unpack .../13-vim-common_2%3a8.0.1453-1ubuntu1_all.deb ...
111 Unpacking vim-common (2:8.0.1453-1ubuntu1) ...
112 Selecting previously unselected package xz-utils.
113 Preparing to unpack .../14-xz-utils_5.2.2-1.3_amd64.deb ...
114 Unpacking xz-utils (5.2.2-1.3) ...
115 Selecting previously unselected package libgpm2:amd64.
116 Preparing to unpack .../15-libgpm2_1.20.7-5_amd64.deb ...
117 Unpacking libgpm2:amd64 (1.20.7-5) ...
118 Selecting previously unselected package libpython3.6:amd64.
119 Preparing to unpack .../16-libpython3.6_3.6.7-1~18.04_amd64.deb ...
120 Unpacking libpython3.6:amd64 (3.6.7-1~18.04) ...
121 Selecting previously unselected package vim-runtime.
122 Preparing to unpack .../17-vim-runtime_2%3a8.0.1453-1ubuntu1_all.deb ...
123 Adding ‘diversion of /usr/share/vim/vim80/doc/help.txt to /usr/share/vim/vim80/doc/help.txt.vim-tiny by vim-runtime‘
124 Adding ‘diversion of /usr/share/vim/vim80/doc/tags to /usr/share/vim/vim80/doc/tags.vim-tiny by vim-runtime‘
125 Unpacking vim-runtime (2:8.0.1453-1ubuntu1) ...
126 Selecting previously unselected package vim.
127 Preparing to unpack .../18-vim_2%3a8.0.1453-1ubuntu1_amd64.deb ...
128 Unpacking vim (2:8.0.1453-1ubuntu1) ...
129 Setting up readline-common (7.0-3) ...
130 Setting up libexpat1:amd64 (2.2.5-3) ...
131 Setting up mime-support (3.60ubuntu1) ...
132 Setting up xxd (2:8.0.1453-1ubuntu1) ...
133 Setting up libgpm2:amd64 (1.20.7-5) ...
134 Setting up libreadline7:amd64 (7.0-3) ...
135 Setting up libmagic-mgc (1:5.32-2ubuntu0.1) ...
136 Setting up libmagic1:amd64 (1:5.32-2ubuntu0.1) ...
137 Processing triggers for libc-bin (2.27-3ubuntu1) ...
138 Setting up libssl1.1:amd64 (1.1.0g-2ubuntu4.3) ...
139 debconf: unable to initialize frontend: Dialog
140 debconf: (TERM is not set, so the dialog frontend is not usable.)
141 debconf: falling back to frontend: Readline
142 debconf: unable to initialize frontend: Readline
143 debconf: (Can‘t locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
144 debconf: falling back to frontend: Teletype
145 Setting up xz-utils (5.2.2-1.3) ...
146 update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode
147 update-alternatives: warning: skip creation of /usr/share/man/man1/lzma.1.gz because associated file /usr/share/man/man1/xz.1.gz (of link group lzma) doesn‘t exist
148 update-alternatives: warning: skip creation of /usr/share/man/man1/unlzma.1.gz because associated file /usr/share/man/man1/unxz.1.gz (of link group lzma) doesn‘t exist
149 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcat.1.gz because associated file /usr/share/man/man1/xzcat.1.gz (of link group lzma) doesn‘t exist
150 update-alternatives: warning: skip creation of /usr/share/man/man1/lzmore.1.gz because associated file /usr/share/man/man1/xzmore.1.gz (of link group lzma) doesn‘t exist
151 update-alternatives: warning: skip creation of /usr/share/man/man1/lzless.1.gz because associated file /usr/share/man/man1/xzless.1.gz (of link group lzma) doesn‘t exist
152 update-alternatives: warning: skip creation of /usr/share/man/man1/lzdiff.1.gz because associated file /usr/share/man/man1/xzdiff.1.gz (of link group lzma) doesn‘t exist
153 update-alternatives: warning: skip creation of /usr/share/man/man1/lzcmp.1.gz because associated file /usr/share/man/man1/xzcmp.1.gz (of link group lzma) doesn‘t exist
154 update-alternatives: warning: skip creation of /usr/share/man/man1/lzgrep.1.gz because associated file /usr/share/man/man1/xzgrep.1.gz (of link group lzma) doesn‘t exist
155 update-alternatives: warning: skip creation of /usr/share/man/man1/lzegrep.1.gz because associated file /usr/share/man/man1/xzegrep.1.gz (of link group lzma) doesn‘t exist
156 update-alternatives: warning: skip creation of /usr/share/man/man1/lzfgrep.1.gz because associated file /usr/share/man/man1/xzfgrep.1.gz (of link group lzma) doesn‘t exist
157 Setting up vim-common (2:8.0.1453-1ubuntu1) ...
158 Setting up libsqlite3-0:amd64 (3.22.0-1) ...
159 Setting up vim-runtime (2:8.0.1453-1ubuntu1) ...
160 Setting up libmpdec2:amd64 (2.4.2-1ubuntu1) ...
161 Setting up file (1:5.32-2ubuntu0.1) ...
162 Setting up libpython3.6-minimal:amd64 (3.6.7-1~18.04) ...
163 Setting up libpython3.6-stdlib:amd64 (3.6.7-1~18.04) ...
164 Setting up libpython3.6:amd64 (3.6.7-1~18.04) ...
165 Setting up vim (2:8.0.1453-1ubuntu1) ...
166 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
167 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
168 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
169 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
170 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
171 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/vi.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group vi) doesn‘t exist
172 update-alternatives: warning: skip creation of /usr/share/man/it/man1/vi.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group vi) doesn‘t exist
173 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/vi.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group vi) doesn‘t exist
174 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/vi.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group vi) doesn‘t exist
175 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/vi.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group vi) doesn‘t exist
176 update-alternatives: warning: skip creation of /usr/share/man/man1/vi.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group vi) doesn‘t exist
177 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
178 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/view.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group view) doesn‘t exist
179 update-alternatives: warning: skip creation of /usr/share/man/it/man1/view.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group view) doesn‘t exist
180 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/view.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group view) doesn‘t exist
181 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/view.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group view) doesn‘t exist
182 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/view.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group view) doesn‘t exist
183 update-alternatives: warning: skip creation of /usr/share/man/man1/view.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group view) doesn‘t exist
184 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
185 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/ex.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group ex) doesn‘t exist
186 update-alternatives: warning: skip creation of /usr/share/man/it/man1/ex.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group ex) doesn‘t exist
187 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/ex.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group ex) doesn‘t exist
188 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/ex.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group ex) doesn‘t exist
189 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/ex.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group ex) doesn‘t exist
190 update-alternatives: warning: skip creation of /usr/share/man/man1/ex.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group ex) doesn‘t exist
191 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
192 update-alternatives: warning: skip creation of /usr/share/man/fr/man1/editor.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group editor) doesn‘t exist
193 update-alternatives: warning: skip creation of /usr/share/man/it/man1/editor.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group editor) doesn‘t exist
194 update-alternatives: warning: skip creation of /usr/share/man/pl/man1/editor.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group editor) doesn‘t exist
195 update-alternatives: warning: skip creation of /usr/share/man/ru/man1/editor.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group editor) doesn‘t exist
196 update-alternatives: warning: skip creation of /usr/share/man/ja/man1/editor.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group editor) doesn‘t exist
197 update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn‘t exist
198 Processing triggers for libc-bin (2.27-3ubuntu1) ...
199 Removing intermediate container 1ffb347c507f
200  ---> 1e996ab06bb9
201 Successfully built 1e996ab06bb9
202 Successfully tagged ubuntu-with-vi-dockerfile:latest
203 [email protected]:~#
204 [email protected]:~# docker images
205 REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
206 ubuntu-with-vi-dockerfile   latest              1e996ab06bb9        5 minutes ago       170MB
207 ubuntu-with-vi              latest              b5410dfa9a42        5 days ago          170MB
208 ubuntu                      latest              1d9c17228a9e        5 days ago          86.7MB
209 [email protected]:~#
  1. 当前目录为 /root
  2. 准备Dockerfile
  3. 运行 docker build 命令,-t 指定新镜像名ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。
  4. 镜像真正的构建过程,Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。 Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。注:build context 为当前目录 /root,该目录下的所有文件和子目录都会被发送给 Docker daemon。所以不要将多余文件放到 build context,特别不要把 //usr 作为 build context,否则构建过程会相当缓慢甚至失败。
  5. Step 1:执行 FROM,将 ubuntu 作为 base 镜像。
  6. Step 2:执行 RUN,安装 vim。
  7. 启动临时容器(1ffb347c507f),在容器中通过 apt-get 安装 vim。
  8. 安装成功后,将容器保存为镜像。这一步底层使用的是类似 docker commit 的命令。
  9. 删除临时容器 9f4d4166f7e3。
  10. 镜像构建成功。 通过 docker images 查看镜像信息

镜像的构建历史

docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程。

 1 [email protected]:~# docker history ubuntu
 2 IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
 3 1d9c17228a9e        5 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
 4 <missing>           5 days ago          /bin/sh -c mkdir -p /run/systemd && echo ‘do…   7B
 5 <missing>           5 days ago          /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
 6 <missing>           5 days ago          /bin/sh -c set -xe   && echo ‘#!/bin/sh‘ > /…   745B
 7 <missing>           5 days ago          /bin/sh -c #(nop) ADD file:c0f17c7189fc11b6a…   86.7MB
 8 [email protected]:~# docker history ubuntu-with-vi-dockerfile:latest
 9 IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
10 1e996ab06bb9        25 minutes ago      /bin/sh -c apt-get update && apt-get install…   83.8MB
11 1d9c17228a9e        5 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
12 <missing>           5 days ago          /bin/sh -c mkdir -p /run/systemd && echo ‘do…   7B
13 <missing>           5 days ago          /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
14 <missing>           5 days ago          /bin/sh -c set -xe   && echo ‘#!/bin/sh‘ > /…   745B
15 <missing>           5 days ago          /bin/sh -c #(nop) ADD file:c0f17c7189fc11b6a…   86.7MB
16 [email protected]:~# 

这个新镜像层的内容由 RUN apt-get update && apt-get install -y vim 生成。

------------引用来自------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587598&idx=1&sn=d0952497b3a2272eee05cfb1e4e05e62&chksm=8d308097ba47098189b45ba63c4040cf94d687fb19c54b9cab593df9995612ce0b0632e9a54e&scene=21#wechat_redirect

原文地址:https://www.cnblogs.com/gsophy/p/10195843.html

时间: 2024-10-10 00:16:25

第 3 章 镜像 - 013 - Dockerfile 构建镜像的相关文章

Dockerfile构建镜像

构建镜像 构建镜像指令:docker  build或docker  image  build   Dockerfile初识: cat >>Dockerfile<<end FROM  python:2.7-slim WORKDIR  /app ADD  .  /app RUN  pip  install  -r  requirements.txt EXPOSE  80 ENV  NAME  World CMD  ["python", "app.py&qu

Docker学习笔记(3)-- 如何使用Dockerfile构建镜像

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

使用 Dockerfile 构建镜像

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

使用Dockerfile构建镜像并push到私有仓库

环境:OS X 10.10.5 maven 3.3.9 Docker version 1.12.2 docker-machine version 0.8.2 程序示例为http://www.cnblogs.com/modprobe/p/6001333.html 中提到的服务发现程序 相关代码:https://github.com/li-hong/spring-cloud-demo 一.准备工作,安装docker-toolbox 方法:http://www.docker.com/products/

如何使用Dockerfile构建镜像

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)

Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 docker build 命令构建镜像并详细分析每个细节. [email protected]:~# pwd         ① /root [email protected]:~# ls          ② Dockerfile [email protected]:~# docker build -t

Docker学习笔记-- 如何使用Dockerfile构建镜像

Dockerfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明imag

Docker容器学习梳理-Dockerfile构建镜像

在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile就此诞生了.Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉.Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传

根据Dockerfile构建镜像

根据Dockerfile构建出一个镜像Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易