docker容器数据卷

在上篇docker基础命令中写到过docker挂载,本篇详情的讲一下docker挂载,因为博主认为docker挂载方面的东西是非常重要的。

  • 容器为什么要挂载
    在创建容器时,数据一般不会保存在容器中,若是保存在容器中,删除容器时数据也会跟着被删除。所以需要将容器中的存储目录挂载到linux机器上面。实现容器中的数据与linux下的数据同步更新,容器与容器之间的的数据也是可以互相挂载存储的。

  • 如何实现挂载

下面先以centos镜像为例

docker run -it -v /home/test:/home centos /bin/bash
-v 主机目录:容器内目录

测试是否挂载成功:
先在容器中的/home目录下新建test.txt文件,文件内容为test
ctrl +p +q 退出容器但不停止运行
在宿主机中的查看是否存在/home/test目录,查看该目录下是否存在test.txt
文件文件内容是否一致。
再次验证这里使用 inspect命令:

docker inspect 容器id     inspect命令什么含义上篇已经讲过这里不再赘述
输入docker ps 查看容器id 

docker容器数据卷_第1张图片现在再简单的测试一下删除该容器后挂载出来的目录是否还会存在。

docker rm -f 16bbdf6581a8

在这里插入图片描述
很显然是不会受影响的。
在实际的使用过程中可能会出现目录容器内的目录不仅没有被挂载出来,反而会被清空的问题,为什么会导致这个原因博主也没有找出实际的原因。但是想到了一个解决的方法。

docker run -d -p 3308:3308 -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7   启动容器
docker cp 容器id 容器内路径 目的主机路径
将容器中路径复制到宿主机路径后,将该容器杀掉。
然后再使用docker run -v 重新挂载即可
  • 匿名挂载
    其实可以理解为就是在挂载过程中只指定容器中的路径,不指定宿主机的路径。
docker run -d -P --name nginx01 -v /etc/nginx nginx:latest

docker容器数据卷_第2张图片上图看可以看到容器内的目录挂载在。

"/var/lib/docker/volumes/67d275efb1329ecdb26bffda75cf4608b435a7296d20d3e97324f1914f150468/_data"
  • 具名挂载
    只写出挂载卷的名字,不指定挂载路径。说的有点抽象,实际看命令实现吧。
docker run -d -P --name nginx2 -v juning:/etc/nginx nginx:latest

查看具体的挂载实现。
docker容器数据卷_第3张图片我们还可以对挂载出来的目录权限进行控制,根据自生需求就设置。

docker run d P name nginx2 v juning:/etc/nginx:ro nginx    只读
docker run d P name nginx2 v juning:/etc/nginx:rw nginx     可读可写

好了容器数据卷方面已经写的差不多了,后续会更新dockerfile方面的东西。

你可能感兴趣的:(docker,运维,linux)