通过上几章的学习,我们已经掌握了镜像与容器的创建方法,这一节我们来学习如何构建自己的镜像,只要是以下两个命令
NO.1
-bash-4.2$ docker container commit
"docker container commit" requires at least 1 and at most 2 arguments.
See 'docker container commit --help'.
Usage: docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] [flags]
Create a new image from a container's changes
NO.2
-bash-4.2$ docker image build
"docker image build" requires exactly 1 argument.
See 'docker image build --help'.
Usage: docker image build [OPTIONS] PATH | URL | - [flags]
Build an image from a Dockerfile
NO.1的意思是我们基于一个image生成一个container,之后我们在container里面做了一些变化,比如说我们安装了一个软件,我们可以通过commit命令把安装的软件单独做成一个镜像,这个命令的简写是Docker Commit
NO.2的意思是通过一个Dockerfile创建一个镜像,可以简写为Docker Build.
OK,我们先来具体操作Commit命令
-bash-4.2$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
apple/hello-world latest 69a935434293 5 hours ago 2.02MB
ubuntu 14.04 8cef1fa16c77 8 days ago 223MB
centos latest e934aafc2206 4 weeks ago 199MB
然后我们交互的运行centos
-bash-4.2$ docker run -it centos
[root@1d2512dc4222 /]#
然后我们在这个容器安装一个vim
[root@1d2512dc4222 /]# yum install -y vim
然后我们退出再次查看,当前的容器
-bash-4.2$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d2512dc4222 centos "/bin/bash" 2 minutes ago Exited (0) 8 seconds ago jovial_payne
我们现在想的是把这个容器变成一个镜像,我们是把centos作为BaseImage的。
-bash-4.2$ docker commit jovial_payne apple/centos-vim
sha256:bd3879d45f3910f2261b8bae11725e97099340e69bd114290c59ddea070dcf51
-bash-4.2$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
apple/centos-vim latest bd3879d45f39 18 seconds ago 357MB
apple/hello-world latest 69a935434293 5 hours ago 2.02MB
ubuntu 14.04 8cef1fa16c77 8 days ago 223MB
centos latest e934aafc2206 4 weeks ago 199MB
小伙伴们应该可以看到,这里多个centos-vim的image,我们发现它比之前的centos大一些,centos-vim其实就是在centos基础之上建立的,不行你看
-bash-4.2$ docker history e934aafc2206
IMAGE CREATED CREATED BY SIZE COMMENT
e934aafc2206 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:f755805244a649ecc… 199MB
-bash-4.2$ docker history bd3879d45f39
IMAGE CREATED CREATED BY SIZE COMMENT
bd3879d45f39 3 minutes ago /bin/bash 158MB
e934aafc2206 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:f755805244a649ecc… 199MB
看到了嘛,它俩共享了e934aafc2206,关系是何等的亲密呀,但是这种方式我们不是很提倡,我们很有可能会有一些不安全的东西,在Image发布出去。这种方式不是很提倡,接下来我们就来看NO.2,通过build的方式。
-bash-4.2$ docker image rm bd3879d45f39
Untagged: apple/centos-vim:latest
Deleted: sha256:bd3879d45f3910f2261b8bae11725e97099340e69bd114290c59ddea070dcf51
Deleted: sha256:0f74e6d7f2a19c8acf25661b97d5750adbff4e43c4046d8fdbfb127cf470c1d5
我们首先删掉之前的vim Image,然后继续执行
-bash-4.2$ pwd
/home/vagrant/docker-centos-vim
-bash-4.2$ vim dockerfile
-bash-4.2$ ls
dockerfile
dockerfile的内容是:
FROM centos
RUN yum install -y vim
我们之前使用的scratch,现在我们要在centos之上安装image 了,所以要使用FROM centos,这里给大家抛出一个问题,既然我们的image只是可读的,那么我们如何通过yum安装vim呢?大家可以先思考一下,我会在后面告诉大家怎么做。
我们首先使用,docker build 配合dockerfile创建一个镜像
docker build -t apple/centos-vim-new .
.的意思是根据当前目录的dockerfile创建
Step 2/2 : RUN yum install -y vim
---> Running in dbcc5e78b3be
Removing intermediate container dbcc5e78b3be
大家在安装的过程中应该看到了这两行,它其实在安装的时候,先把它转成一个container,安装成功以后在删掉,在把这个container删掉,image就被保留下来了。
最后我们来看一下,创建的成果
-bash-4.2$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
apple/centos-vim-new latest 8f1ba4b3b3bd 5 minutes ago 357MB
apple/hello-world latest 69a935434293 5 hours ago 2.02MB
ubuntu 14.04 8cef1fa16c77 8 days ago 223MB
centos latest e934aafc2206 4 weeks ago 199MB