Docker-6-构建自己的镜像

上文中,介绍了对于镜像的一些常用的操作,还有镜像和容器的关系等,本文来看一下如何构建一个自己的镜像

创建容器

这里我们创建两个nginx的容器,首先就需要有nginx的镜像,如果没有的话可以用以下命令下载一个下来:

1
docker pull nginx

image

首先启动一个nginx容器,然后复制一个本地的html进去做首页,如下:
image

可以看到这里容nginx的首页已经换成是我们自定义的了

然后再启动一个nginx,这次不替换首页, 用的镜像还是和上面的一样,命令如下:
image

这里可以发现我们第二次创建的这个容器的首页还是默认页面没有发生改变的,所以容器的修改并不能影响镜像

创建本地镜像

具体操作如下:
image

这里主要命令是这个:

1
docker commit -m "update index.html" --author='zz' 415fe3874fb7 zhou/nginx:v1

  • -m: 提交的备注
  • --author: 表示镜像的作者
  • 415fe3874fb7: 创建镜像所依据的容器id
  • zhou/nginx: 表示仓库名,zhou是名称空间,nginx是镜像名
  • v1: 表示仓库的tag

如图中,镜像创建完成之后,就可以通过docker images查看到刚刚创建的镜像了.

测试

我们用刚刚创建的镜像建一个容器来看一下
image

如图,可以看到,这里的首页已经是改变过的了

在实际的使用过程中,并不会通过docker commit的方式创建镜像

使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。