9.3 将容器转化为镜像

在上一节中,已经在容器里安装好了nginx,接下来希望将这个容器内容保存下来,这样下次就无需再次安装了。这就是Docker中将容器转换为镜像的技术。

如果还在刚刚的安装了nginx的终端里,执行exit退出此终端,回到系统本身的终端:

root@43981d58800d:/# exit
exit
root@liu-ubuntu:~#

ps命令可以查看当前都运行了哪些容器,加上-a参数后就表示运行过哪些容器,因为刚刚已经退出了安装nginx的容器,因此现在想查看它的话,需要使用-a参数,执行如下命令,就会显示出刚刚运行的容器,并且Docker会随机给每个容器都起个Names方便标示。效果如下:

root@liu-ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
43981d58800d        ubuntu:14.04        "/bin/bash"         15 minutes ago      Exited (0) 51 seconds ago                       silly_raman

commit命令用来将容器转化为镜像,运行下面的命令,可以将刚刚的容器转换为镜像,其中,-m参数用来来指定提交的说明信息;-a可以指定用户信息的;43981d58800d代表的是容器的id;gogogo/ubuntu-nginx:v1指定目标镜像的用户名、仓库名和tag 信息。创建成功后会返回这个镜像的ID信息。注意,gogogo可以改为自己的用户名。

root@liu-ubuntu:~# docker commit -m "ubuntu14.04 with nginx" -a "gogogo" 43981d58800d gogogo/ubuntu-nginx:v1
sha256:3179e620c6f5446cbff9cd96c7a445a76b52a6adb40243973b4b942e41b4cbeb

这是我们再次使用docker images命令就会发现此时多出了一个我们刚刚创建的镜像:

root@liu-ubuntu:~# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
gogogo/ubuntu-nginx   v1                  3179e620c6f5        8 minutes ago       266 MB
ubuntu                14.04               578c3e61a98c        2 weeks ago         223 MB

此时,如果运行 docker run -it gogogo/ubuntu-nginx:v1就会是一个已经安装了nginx的容器:

root@liu-ubuntu:~# docker run -it gogogo/ubuntu-nginx:v1
root@4aa7777f3294:/# nginx -v
nginx version: nginx/1.4.6 (Ubuntu)