在上篇docker基础命令中写到过docker挂载,本篇详情的讲一下docker挂载,因为博主认为docker挂载方面的东西是非常重要的。
下面先以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 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
上图看可以看到容器内的目录挂载在。
"/var/lib/docker/volumes/67d275efb1329ecdb26bffda75cf4608b435a7296d20d3e97324f1914f150468/_data"
- 具名挂载
只写出挂载卷的名字,不指定挂载路径。说的有点抽象,实际看命令实现吧。
docker run -d -P --name nginx2 -v juning:/etc/nginx nginx:latest
查看具体的挂载实现。 我们还可以对挂载出来的目录权限进行控制,根据自生需求就设置。
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方面的东西。
|