自己学Docker:8.容器的持久化

来源:互联网 发布:承蒙厚爱 却知不恭 编辑:程序博客网 时间:2024/06/01 07:21

今天继续看Docker相关的东西. 
之前,去了解数据卷和数据卷容器是因为在刚开始了解Docker的工作模式时遇到了两个疑问:关于Docker数据持久化的,和Docker如何共享数据.通过对于数据卷和数据卷容器的了解,目前从整体上可以知道Docker如何共享数据和持久化数据.在不断学习的过程中,了解到Docker通过镜像创建容器时,实际上实在镜像上面加了一层读写层,我们对于Docker数据的修改都是在这个读写层发生的. 
那么问题来了,如果我要创建一个web或者数据库容器,在里面安装好配置好相关软件,如tomcat或者MySQL之类的.这些更改我如何保存下来,从而可以在以后创建容器时使用? 
之前的数据卷和数据卷容器都是保存了我们对于文件的更改,现在这个实际上是需要对创建的容器进行持久化,使他变成一个镜像.我们之前在使用Docker命令创建容器的时候,很多新创建的容器里都有一些安装好的软件,就是用的这个.这个实现起来也很简单,Docker给我们涉及了一个命令–commit.通过这个命令就可以实现上面的需求. 
首先,先创建一个容器,

 sudo docker run -i -t --name mungo  docker/whalesay /bin/bash
  • 1
  • 1

这里写图片描述
这里写图片描述
这里我就在,/use/local目录下创建一个test.txt的文件. 
这里写图片描述 
下面就是主角了,使用commit命令来提交容器.提交之前可以先看下本机目前有那些镜像.

sudo docker images
  • 1
  • 1

这里写图片描述

sudo docker commit mungo mungo:v2sudo docker images
  • 1
  • 2
  • 1
  • 2

这里写图片描述

通过对比可以看到,本机的镜像中多了一个REPOSITORY为mungo,TAG为v2的镜像.下面使用这个镜像来创建一个容器,看看之前/use/local目录下创建的test.txt的文件还在不.

sudo docker run -i -t --name mungo_V2  mungo:v2
  • 1
  • 1

这里要注意一下,我在使用名为mungo的镜像创建容器时后面加了一个v2,这个就是创建镜像指定的TAG,默认的TAG是latest可以不指定,如果不是就要通过:来指定. 
这里写图片描述
这里可以看到,之前创建的文件还在.通过ps命令查看容器也会发现,我使用了不同的镜像来创建容器,但创建完成的容器内容是一样的. 
这里写图片描述

通过上面的操作可以得知,commit命令可以将已存在容器和修改内容提交为一个新的镜像,通过这个方式同样能保存读写层内容.但是由于每次使用新的镜像创建容器时,之前的修改都在,所以commit命令虽然能实现保存读写层数据,但不适于做数据持久化.

0 0