Docker自学纪实(三)Docker容器数据持久化

谈起数据卷

我一直觉得是个枯燥无聊的话题

但是通过今天的实操和阅读

我发现其实并不是

其实就像走夜路

没有光明,第一次都是恐惧

但是如果走的次数多了

或者静下心来去克制恐惧

也许就会驾轻就熟或者等到黎明

拼一下,开始吧!!!

我就举两个例子,如果实操一遍,立马就明白了。

  • 数据卷

原理:将宿主机目录挂载到容器目录,原理和普通的挂载差不多。

数据卷的特点:

  1. 在容器启动初始化时,同步容器在宿主机的挂载点中的数据。
  2. 数据卷可以在容器内直接共享和重用。
  3. 可以直接修改容器在宿主机挂载点里面的数据内容。
  4. 数据卷的变化不会影响镜像的更新。
  5. 即使删除容器,该数据卷不受影响。
  • 容器数据卷

原理:将一个运行的容器作为数据卷,其他容器可以通过挂载这个容器实现数据共享。

容器数据卷的特点:具备容器的便捷性,可移动性。

  • 查看容器挂载点目录:

 1 docker inspect 容器ID/容器名 

找到mounts段:

注:Source:是宿主机目录、Destination:是容器目录

下面两个例子,跟着做一遍呗。

数据卷

:使用httpd镜像创建一个容器名为WEB1,将宿主机的/www目录挂载到WEB01中的/blog目录,然后在宿主机的/www目录下创建一个index.php,查看容器中的/blog目录中是否存在index.php文件。

1 [root ~]# docker run -itd --name WEB01 -v /www:/blog httpd # -v 将宿主机的/www目录挂载到WEB01中的/blog目录
2 [root ~]# docker ps
3 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4 f8911ae76a6e httpd "httpd-foreground" 5 seconds ago Up 4 seconds 80/tcp WEB01
5 [root ~]# cd /www
6 [root www~]# ls
7 [root www~]# touch index.php
8 [root www~]# docker exec WEB01 ls /blog
9 index.php

容器数据卷

例:使用httpd镜像创建一个容器数据卷,容器名为dvdata。使用centos镜像创建一个容器并挂载dvdata,在dvdata容器里面创建一个a.txt文件,查看容器centos的/home目录下是否有a.txt文件。

 1 [root ~]# docekr run -itd -v /home --name dvdata httpd #创建容器数据卷,名为dvdata,容器数据卷共享目录为/home。也就是说,其他容器挂载dvdata容器时其实挂载的是dvdata容器里的/home文件夹。
 2 [root ~]# docker run -itd --name centos --volumes-from dvdata centos #创建centos容器,--volumes-from参数为指定容器数据卷。
 3 [root ~]# docker ps
 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 5 65d032a73313 centos "/bin/bash" 3 seconds ago Up 1 second centos
 6 fe3dd37b258d httpd "httpd-foreground" 2 minutes ago Up 2 minutes 80/tcp dvdata
 7 [root ~]# docker exec centos ls /home
 8 [root ~]#
 9 [root ~]# docker exec dvdata touch /home/a.txt #在容器数据卷中的/data目录下创建a.txt文件
10 [root ~]# docker exec centos ls /home
11 [root ~]# a.txt

现在觉得docker挺有意思,只要认真看文章,动手操作一下,好多云里雾里的问题都烟消云散了。希望对你们的学习有帮助,加油!!!

原文地址:https://www.cnblogs.com/Smbands/p/10150387.html