通过 docker ps -a 查看所有容器:
root@ubuntu:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12847d9f5071 ubuntu:16.04 "sh" 2 minutes ago Exited (0) 43 seconds ago peaceful_edison 3cec6f5e47c0 httpd "httpd-foreground" 5 minutes ago Exited (0) 5 minutes ago vigilant_heisenberg此时ID为12847d9f5071的容器,是按我们的需求更改的容器。我们可以通过命令docker commit来提交容器副本。
root@ubuntu:~# docker commit -m="has update" -a="yeqing112" 12847d9f5071 yeqing112/ubuntu:v2 sha256:5cce1167ee4c083ff9b87e61a58081805e76d015a12a4811bd152263aa013860各个参数说明:
-m: 提交的描述信息。
-a: 指定镜像作者。
12847d9f5071: 容器ID。
yeqing112/ubuntu:v2: 指定要创建的目标镜像名。
我们可以使用 docker images 命令来查看我们的新镜像 yeqing112/ubuntu:v2:
root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yeqing112/ubuntu v2 5cce1167ee4c 2 minutes ago 144MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB从上面的信息中可以看到我们更新过的镜像,文件体积明显比之前大了一些。
构建镜像除了上面更新镜像的方法,我们还可以使用命令 docker build , 从零开始来构建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
root@ubuntu:~# cat Dockerfile FROM ubuntu:16.04 MAINTAINER Fisher "service@urlos.com" RUN apt-get update EXPOSE 22 EXPOSE 80 CMD /bin/bash每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么
这里我们还是一样,执行一个 apt-get update 更新命令
然后,我们使用 Dockerfile 文件,通过 docker build -t yeqing112/ubuntu:v3 . 命令来构建一个新镜像。
root@ubuntu:~# root@ubuntu:/home# docker build -t yeqing112/ubuntu:v3 . Sending build context to Docker daemon 422.4kB Step 1/6 : FROM ubuntu:16.04 ---> 2a697363a870 Step 2/6 : MAINTAINER Fisher "service@urlos.com" ---> Running in 92229e7a091a Removing intermediate container 92229e7a091a ---> 9a89f4debc7d Step 3/6 : RUN apt-get update ---> Running in d709ef335784 Get:1 xenial InRelease [247 kB] Get:2 xenial-security InRelease [109 kB] Get:3 xenial-updates InRelease [109 kB] Get:4 xenial-backports InRelease [107 kB] Get:5 xenial-security/main amd64 Packages [844 kB] Get:6 xenial/main amd64 Packages [1558 kB] Get:7 xenial/restricted amd64 Packages [14.1 kB] Get:8 xenial/universe amd64 Packages [9827 kB] Get:9 xenial-security/restricted amd64 Packages [12.7 kB] Get:10 xenial-security/universe amd64 Packages [556 kB] Get:11 xenial/multiverse amd64 Packages [176 kB] Get:12 xenial-updates/main amd64 Packages [1237 kB] Get:13 xenial-updates/restricted amd64 Packages [13.1 kB] Get:14 xenial-updates/universe amd64 Packages [967 kB] Get:15 xenial-updates/multiverse amd64 Packages [19.1 kB] Get:16 xenial-backports/main amd64 Packages [7942 B] Get:17 xenial-backports/universe amd64 Packages [8532 B] Get:18 xenial-security/multiverse amd64 Packages [6113 B] Fetched 15.8 MB in 5s (3051 kB/s) Reading package lists... Removing intermediate container d709ef335784 ---> 540751496556 Step 4/6 : EXPOSE 22 ---> Running in 9ae528bc083f Removing intermediate container 9ae528bc083f ---> cfccc621a52d Step 5/6 : EXPOSE 80 ---> Running in efd88e9349c1 Removing intermediate container efd88e9349c1 ---> 428cb5221a06 Step 6/6 : CMD /bin/bash ---> Running in 2bc08b664f97 Removing intermediate container 2bc08b664f97 ---> 9c55ea9b9ee8 Successfully built 9c55ea9b9ee8 Successfully tagged yeqing112/ubuntu:v3参数说明:
-t:指定要创建的目标镜像名
.:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
构建成功后,使用 docker images 查看镜像:
root@ubuntu:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE yeqing112/ubuntu v3 9c55ea9b9ee8 9 seconds ago 144MB yeqing112/ubuntu v2 5cce1167ee4c 16 minutes ago 144MB ubuntu 16.04 2a697363a870 2 weeks ago 119MB由上面的信息看出,新的镜像v3与v2文件体积是一样的,两个镜像都只是执行了apt-get update
设置镜像标签我们可以使用 docker tag 命令,为镜像添加一个新的标签。
root@ubuntu:/home# docker tag 9c55ea9b9ee8 yeqing112/ubuntu:v3-1docker tag 镜像ID,这里是 9c55ea9b9ee8,用户名称、镜像源名(repository name)和新的标签名(tag)。