构建镜像
Docker提供了两种构建镜像的方法:
- docker commit命令
- Dockerfile 构建文件
docker commit
docker commit包含三个步骤:
- 运行容器
- 修改容器
- 将容器保存为新的镜像
# 1. 运行docker容器
root@fbo-virtual-machine:~# docker run -it ubuntu /bin/bash
# 2. 安装vim
root@533618aeb4a4:/# apt install vim -y
# 3. 保存为新镜像
root@fbo-virtual-machine:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
533618aeb4a4 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes pensive_curran
root@fbo-virtual-machine:~# docker commit pensive_curran ubuntu-with-vim
sha256:63cdf5e493abb21ee80fe1b2509b89d1d9b27cd3d3774eaf793cfbbe6e69f998
root@fbo-virtual-machine:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-with-vim latest 63cdf5e493ab 10 seconds ago 217MB
ubuntu latest 8b72bba4485f 5 days ago 120MB
httpd latest 6b4e03d65aa3 5 days ago 177MB
centos latest 328edcd84f1b 6 weeks ago 193MB
# 4. 用新的镜像启动容器
root@fbo-virtual-machine:~# docker run -it ubuntu-with-vim /bin/bash
root@da4b749d2e60:/# which vim
/usr/bin/vim
虽然docker commit可以创建新的镜像,但是docker并不建议用户通过这种方式构建镜。
原因如下:
- 这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。
- 使用者并不知道镜像是如何创建的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。
Dockerfile构造镜像
# 1. 查看Dockerfile内容及位置
root@fbo-virtual-machine:~/docker-files# cat Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y vim
root@fbo-virtual-machine:~/docker-files# pwd
/root/docker-files
root@fbo-virtual-machine:~/docker-files# ls
Dockerfile
# 2. 运行docker build命令, -t 指定新的镜像的名称 .指当前目录 -f 可以指定Dockerfile文件位置
root@fbo-virtual-machine:~/docker-files# docker build -t ubuntu-with-vim .
# 3. docker将build context发送给Docker daemon。build context为镜像构建提供所需要的文件和目录。此例子中
# /root/docker-files/下的所有文件和子目录都会发送Docker Daemon。
Sending build context to Docker daemon 2.048kB
# 4. 执行from 将ubuntu做为base镜像,ubuntu镜像id为8b72bba4485f
Step 1/2 : FROM ubuntu
---> 8b72bba4485f
# 5. 执行RUN 安装vim
Step 2/2 : RUN apt-get update && apt-get install -y vim
# 6. 启动id为5e3a66a39881的临时容器
---> Running in 5e3a66a39881
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [48.9 kB]
Get:4 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [445 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.8 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [208 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [2930 B]
Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [218 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [811 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.6 kB]
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [683 kB]
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [17.5 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5177 B]
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6236 B]
Fetched 24.4 MB in 39s (611 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal
libpython3.5-stdlib libsqlite3-0 libssl1.0.0 mime-support vim-common
vim-runtime
Suggested packages:
gpm ctags vim-doc vim-scripts vim-gnome-py2 | vim-gtk-py2 | vim-gtk3-py2
| vim-athena-py2 | vim-nox-py2
The following NEW packages will be installed:
file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal
libpython3.5-stdlib libsqlite3-0 libssl1.0.0 mime-support vim vim-common
vim-runtime
0 upgraded, 14 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.2 MB of archives.
After this operation, 58.3 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgpm2 amd64 1.20.4-6.1 [16.5 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmagic1 amd64 1:5.25-2ubuntu1 [216 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 file amd64 1:5.25-2ubuntu1 [21.2 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libexpat1 amd64 2.1.0-7ubuntu0.16.04.3 [71.2 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmpdec2 amd64 2.4.2-1 [82.6 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.8 [1081 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-minimal amd64 3.5.2-2ubuntu0~16.04.1 [526 kB]
Get:8 http://archive.ubuntu.com/ubuntu xenial/main amd64 mime-support all 3.59ubuntu1 [31.0 kB]
Get:9 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsqlite3-0 amd64 3.11.0-1ubuntu1 [396 kB]
Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5-stdlib amd64 3.5.2-2ubuntu0~16.04.1 [2130 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim-common amd64 2:7.4.1689-3ubuntu1.2 [103 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython3.5 amd64 3.5.2-2ubuntu0~16.04.1 [1360 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim-runtime all 2:7.4.1689-3ubuntu1.2 [5164 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 vim amd64 2:7.4.1689-3ubuntu1.2 [1036 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 12.2 MB in 19s (643 kB/s)
Selecting previously unselected package libgpm2:amd64.
(Reading database ... 4768 files and directories currently installed.)
Preparing to unpack .../libgpm2_1.20.4-6.1_amd64.deb ...
Unpacking libgpm2:amd64 (1.20.4-6.1) ...
Selecting previously unselected package libmagic1:amd64.
Preparing to unpack .../libmagic1_1%3a5.25-2ubuntu1_amd64.deb ...
Unpacking libmagic1:amd64 (1:5.25-2ubuntu1) ...
Selecting previously unselected package file.
Preparing to unpack .../file_1%3a5.25-2ubuntu1_amd64.deb ...
Unpacking file (1:5.25-2ubuntu1) ...
Selecting previously unselected package libexpat1:amd64.
Preparing to unpack .../libexpat1_2.1.0-7ubuntu0.16.04.3_amd64.deb ...
Unpacking libexpat1:amd64 (2.1.0-7ubuntu0.16.04.3) ...
Selecting previously unselected package libmpdec2:amd64.
Preparing to unpack .../libmpdec2_2.4.2-1_amd64.deb ...
Unpacking libmpdec2:amd64 (2.4.2-1) ...
Selecting previously unselected package libssl1.0.0:amd64.
Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.8_amd64.deb ...
Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.8) ...
Selecting previously unselected package libpython3.5-minimal:amd64.
Preparing to unpack .../libpython3.5-minimal_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
Unpacking libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Selecting previously unselected package mime-support.
Preparing to unpack .../mime-support_3.59ubuntu1_all.deb ...
Unpacking mime-support (3.59ubuntu1) ...
Selecting previously unselected package libsqlite3-0:amd64.
Preparing to unpack .../libsqlite3-0_3.11.0-1ubuntu1_amd64.deb ...
Unpacking libsqlite3-0:amd64 (3.11.0-1ubuntu1) ...
Selecting previously unselected package libpython3.5-stdlib:amd64.
Preparing to unpack .../libpython3.5-stdlib_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
Unpacking libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Selecting previously unselected package vim-common.
Preparing to unpack .../vim-common_2%3a7.4.1689-3ubuntu1.2_amd64.deb ...
Unpacking vim-common (2:7.4.1689-3ubuntu1.2) ...
Selecting previously unselected package libpython3.5:amd64.
Preparing to unpack .../libpython3.5_3.5.2-2ubuntu0~16.04.1_amd64.deb ...
Unpacking libpython3.5:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Selecting previously unselected package vim-runtime.
Preparing to unpack .../vim-runtime_2%3a7.4.1689-3ubuntu1.2_all.deb ...
Adding 'diversion of /usr/share/vim/vim74/doc/help.txt to /usr/share/vim/vim74/doc/help.txt.vim-tiny by vim-runtime'
Adding 'diversion of /usr/share/vim/vim74/doc/tags to /usr/share/vim/vim74/doc/tags.vim-tiny by vim-runtime'
Unpacking vim-runtime (2:7.4.1689-3ubuntu1.2) ...
Selecting previously unselected package vim.
Preparing to unpack .../vim_2%3a7.4.1689-3ubuntu1.2_amd64.deb ...
Unpacking vim (2:7.4.1689-3ubuntu1.2) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Setting up libgpm2:amd64 (1.20.4-6.1) ...
Setting up libmagic1:amd64 (1:5.25-2ubuntu1) ...
Setting up file (1:5.25-2ubuntu1) ...
Setting up libexpat1:amd64 (2.1.0-7ubuntu0.16.04.3) ...
Setting up libmpdec2:amd64 (2.4.2-1) ...
Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.8) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
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.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up libpython3.5-minimal:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Setting up mime-support (3.59ubuntu1) ...
Setting up libsqlite3-0:amd64 (3.11.0-1ubuntu1) ...
Setting up libpython3.5-stdlib:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Setting up vim-common (2:7.4.1689-3ubuntu1.2) ...
Setting up libpython3.5:amd64 (3.5.2-2ubuntu0~16.04.1) ...
Setting up vim-runtime (2:7.4.1689-3ubuntu1.2) ...
Setting up vim (2:7.4.1689-3ubuntu1.2) ...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
Processing triggers for libc-bin (2.23-0ubuntu9) ...
# 7. 安装成功后,将容器保存为id 4b11a920d1d1的镜像
---> 4b11a920d1d1
# 8. 删除临时容器
Removing intermediate container 5e3a66a39881
# 9. 构建成功
Successfully built 4b11a920d1d1
Successfully tagged ubuntu-with-vim:latest
docker history
会显示镜像的构建历史,也就是Dockerfile的执行过程。
root@fbo-virtual-machine:~/docker-files# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-with-vim latest 4b11a920d1d1 22 minutes ago 217MB
ubuntu latest 8b72bba4485f 5 days ago 120MB
httpd latest 6b4e03d65aa3 5 days ago 177MB
centos latest 328edcd84f1b 6 weeks ago 193MB
root@fbo-virtual-machine:~/docker-files# docker history ubuntu-with-vim
IMAGE CREATED CREATED BY SIZE COMMENT
4b11a920d1d1 22 minutes ago /bin/sh -c apt-get update && apt-get insta... 96.5MB
8b72bba4485f 5 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 5 days ago /bin/sh -c mkdir -p /run/systemd && echo '... 7B
<missing> 5 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\... 2.76kB
<missing> 5 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0B
<missing> 5 days ago /bin/sh -c set -xe && echo '#!/bin/sh' >... 745B
<missing> 5 days ago /bin/sh -c #(nop) ADD file:39d3593ea220e68... 120MB
镜像的缓存特性
Docker 会缓存已有的镜像层,构建新的镜像时,如果某层镜像已经存在,就直接使用,无需创建。
example:
# 1. 修改Dockerfile,添加一行
root@fbo-virtual-machine:~/docker-files# cat Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y vim
COPY testfile /
# 2. 运行docker build,没有全部从新构建镜像,直接调用缓存镜像4b11a920d1d1
root@fbo-virtual-machine:~/docker-files# docker build -t ubuntu-with-vi-2 .
Sending build context to Docker daemon 2.56kB
Step 1/3 : FROM ubuntu
---> 8b72bba4485f
Step 2/3 : RUN apt-get update && apt-get install -y vim
---> Using cache
---> 4b11a920d1d1
Step 3/3 : COPY testfile /
---> af5a360ab7a9
Removing intermediate container 4079ecd04817
Successfully built af5a360ab7a9
Successfully tagged ubuntu-with-vi-2:latest
如果我们希望在构建镜像时不使用缓存,可以在docker build 命令中加上--no-cache参数。
Dockerfile 中每一个指令都会创建一个镜像层,上层是依赖于下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效。
也就是说,如果我们改变 Dockerfile 指令的执行顺序,或者修改或添加指令,都会使缓存失效。如上例子,修改COPY和RUN的语句位置,会全新构建镜像。
除了在构建镜像时使用缓存,Docker在下载镜像时也会使用。example:
root@fbo-virtual-machine:~/docker-files# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
# 这里会提示base镜像已经存在,跳过下载
aa18ad1a0d33: Already exists
2b28e4afdec2: Pull complete
802b6cd5ed3b: Pull complete
6f2336b7c318: Pull complete
d7c441746c9e: Pull complete
ba7f19f905f9: Pull complete
5c7522be7faf: Pull complete
Digest: sha256:a46bd62f5286321ed19875778246f3afe97df5f9e91f0dd369a6ecfa529dbe81
Status: Downloaded newer image for httpd:latest
调试Dockerfile
包括 Dockerfile 在内的任何脚本和程序都会出错。有错并不可怕,但必须有办法排查
# 1. 编写Dockerfile
root@fbo-virtual-machine:~/docker-files# cat Dockerfile
FROM busybox
RUN touch tmpfile
run /bin/bash -c echo "continue to build..."
copy testfile /
# 2. 执行dokcer build报错
root@fbo-virtual-machine:~/docker-files# docker build -t image-debug .
Sending build context to Docker daemon 2.56kB
Step 1/4 : FROM busybox
latest: Pulling from library/busybox
03b1be98f3f9: Pull complete
Digest: sha256:99ccecf3da28a93c063d5dddcdf69aeed44826d0db219aabc3d5178d47649dfa
Status: Downloaded newer image for busybox:latest
---> 54511612f1c4
Step 2/4 : RUN touch tmpfile
---> Running in 07f7a9e8f1ea
---> 749cc37a2111
Removing intermediate container 07f7a9e8f1ea
Step 3/4 : RUN /bin/bash -c echo "continue to build..."
---> Running in 5b7d576cc8f6
/bin/sh: /bin/bash: not found
The command '/bin/sh -c /bin/bash -c echo "continue to build..."' returned a non-zero code: 127
# 3. 进入缓存镜像调试
root@fbo-virtual-machine:~/docker-files# docker run -it 749cc37a2111
/ # /bin/bash -c echo "continue to build..."
sh: /bin/bash: not found
/ # exit
Dockerfile常用指令
Dockerfile常用指令
- FROM - 指定base镜像
- MAINTAINER - 镜像作者
- COPY - 将文件从build context复制到镜像。
COPY src dest
COPY ["src","dest"]
- ADD - 与COPY类似,不同的是如果src是归档文件(tar、zip、tgz、xz等),文件会自动解压到dest。
- ENV - 设置环境变量
- EXPOSE - 指定容器中的进程会监听某个端口
- VOLUME - 将文件或目录声明为volume
- WORKDIR - 为后面RUN,CDM,ENTRYPOINT,ADD或COPY是指镜像中的当前工作目录。
- RUN - 在容器中运行指定命令
- CMD - 容器启动时运行指定命令,当有多个CMD指令时,只有最有一个生效。CMD可以被docker run之后的参数替换
- ENTRYPOINT - 设置启动时运行的命令,当有多个ENTRYPOINT指令是,只有最后一个生效。CMD或docker run 之后的参数会被当做参数传递给ENTRYPOINT。
## 1. 创建Dockerfile
root@fbo-virtual-machine:~/docker-files# cat Dockerfile
# my dockerfile
FROM busybox
MAINTAINER recoba01@163.com
WORKDIR /testdir
RUN touch tmpfile1
COPY ["testfile","."]
ADD ["fbo.tar.gz", "."]
ENV WELCOME "You are in my container, welcome!"
## 2. 确认工作环境
root@fbo-virtual-machine:~/docker-files# ls
Dockerfile fbo.tar.gz testfile
## 3. 构建my-image镜像
root@fbo-virtual-machine:~/docker-files# docker build -t my-image .
Sending build context to Docker daemon 3.584kB
Step 1/7 : FROM busybox
---> 54511612f1c4
Step 2/7 : MAINTAINER recoba01@163.com
---> Running in 345098f14ab3
---> 2bf416443eed
Removing intermediate container 345098f14ab3
Step 3/7 : WORKDIR /testdir
---> eca59be9c015
Removing intermediate container 3a343c30b0ff
Step 4/7 : RUN touch tmpfile1
---> Running in f9c7f78f2586
---> c3ebd76a7ba4
Removing intermediate container f9c7f78f2586
Step 5/7 : COPY testfile .
---> 8eb505c80d42
Removing intermediate container 4d22491de73a
Step 6/7 : ADD fbo.tar.gz .
---> 5a5e8200f7a4
Removing intermediate container bfe0b9e0d6c4
Step 7/7 : ENV WELCOME "You are in my container, welcome!"
---> Running in 83e9ef179ea6
---> 809d654b00fc
Removing intermediate container 83e9ef179ea6
Successfully built 809d654b00fc
Successfully tagged my-image:latest
## 检查镜像内容
root@fbo-virtual-machine:~/docker-files# docker run -it my-image
/testdir # pwd
/testdir
/testdir # ls
fbo testfile tmpfile1
/testdir # echo $WELCOME
You are in my container, welcome!
RUN & CMD & ENTRYPOINT
RUN、CMD和ENTRYPOINT功能有些相似,它们有以下区别:
- RUN执行命令并创建新的镜像层,RUN常用于安装软件包。
- CMD是指容器启动后默认执行的命令及参数,但是CMD能够被docker run后面跟的命令行参数替换。
- ENTRYPOINT配置容器启动时运行的命令。
使用公共镜像
## 1. 登录到docker hub
root@fbo-virtual-machine:~# docker login -u drfung
Password:
Login Succeeded
## 2. 为镜像打上tag
root@fbo-virtual-machine:~# docker tag ubuntu drfung/ubuntu:v1
root@fbo-virtual-machine:~# docker images drfung/ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
drfung/ubuntu v1 8b72bba4485f 6 days ago 120MB
## 3. 上传镜像到docker hub
root@fbo-virtual-machine:~# docker push drfung/ubuntu
The push refers to a repository [docker.io/drfung/ubuntu]
3996d0debc49: Mounted from library/ubuntu
cd1d6655b4e4: Mounted from library/ubuntu
a76db6d8fac4: Mounted from library/ubuntu
ebf3d6975c70: Mounted from library/ubuntu
8aa4fcad5eeb: Mounted from library/ubuntu
v1: digest: sha256:bb5815009271d6f80a64677b4bb60b799c483e839b4d03c2f7723baabaca03df size: 1357
登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像,这个镜像可被其他Docker host下载使用。
搭建本地 Registry
-d 后台启动容器
-p 将容器的5000端口映射到host的5000端口
-v 将容器/var/lib/registry目录映射到host的/myregistry,用于存放镜像数据
## 1. 安装本地registry
root@fbo-virtual-machine:~# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
90f4dba627d6: Pull complete
b3e11d7b4f5e: Pull complete
1f032f3c8932: Pull complete
425585e7aedb: Pull complete
f45f535a83d2: Pull complete
Digest: sha256:0f8fe61fa337b8ef02217702ba979b47a7d68717d4628f31592ebff85915f3ba
Status: Downloaded newer image for registry:2
43a490f2c2ba503f02daade785772334ad9e7df6d405681af7a6844b1a74307d
## 2. 打tag
root@fbo-virtual-machine:~# docker tag drfung/ubuntu:v1 fbo-virtual-machine:5000/drfung/ubuntu:v1
## 3. 上传本地镜像
root@fbo-virtual-machine:~# docker push fbo-virtual-machine:5000/drfung/ubuntu:v1
The push refers to a repository [fbo-virtual-machine:5000/drfung/ubuntu]
3996d0debc49: Pushed
cd1d6655b4e4: Pushed
a76db6d8fac4: Pushed
ebf3d6975c70: Pushed
8aa4fcad5eeb: Pushed
v1: digest: sha256:c166b406b66c122236d1e0e7f1afb50611cec281827c525f9bf9a67d5c8b003f size: 1357
## 4. 下载本地镜像
root@fbo-virtual-machine:~# docker pull fbo-virtual-machine:5000/drfung/ubuntu:v1
v1: Pulling from drfung/ubuntu
Digest: sha256:c166b406b66c122236d1e0e7f1afb50611cec281827c525f9bf9a67d5c8b003f
Status: Downloaded newer image for fbo-virtual-machine:5000/drfung/ubuntu:v1
镜像小结
- images 显示镜像列表
- history 显示镜像构造历史
- commit 从容器创建新镜像
- build 从Dockerfile创建镜像
- tag 给镜像打tag
- pull 从registry下载镜像
- push 将镜像上传到registry
- rmi 删除docker host上的镜像,如果一个镜像有多个tag,只有当所有tag被删除时,镜像才会删除。
- search 搜索docker hub中的镜像