Docker自学纪实(三)Docker容器数据持久化
谈起数据卷
我一直觉得是个枯燥无聊的话题
但是通过今天的实操和阅读
我发现其实并不是
其实就像走夜路
没有光明,第一次都是恐惧
但是如果走的次数多了
或者静下心来去克制恐惧
也许就会驾轻就熟或者等到黎明
拼一下,开始吧!!!
我就举两个例子,如果实操一遍,立马就明白了。
- 数据卷
原理:将宿主机目录挂载到容器目录,原理和普通的挂载差不多。
数据卷的特点:
- 在容器启动初始化时,同步容器在宿主机的挂载点中的数据。
- 数据卷可以在容器内直接共享和重用。
- 可以直接修改容器在宿主机挂载点里面的数据内容。
- 数据卷的变化不会影响镜像的更新。
- 即使删除容器,该数据卷不受影响。
- 容器数据卷
原理:将一个运行的容器作为数据卷,其他容器可以通过挂载这个容器实现数据共享。
容器数据卷的特点:具备容器的便捷性,可移动性。
- 查看容器挂载点目录:
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挺有意思,只要认真看文章,动手操作一下,好多云里雾里的问题都烟消云散了。希望对你们的学习有帮助,加油!!!