目录什么是容器数据卷数据的覆盖问题使用数据卷方式一:直接使用命令挂载 -v测试挂载卷方式二:Dockerfile文件数据卷命令查看数据卷方式一:docker inspect 容器ID方式二:docker volume inspect juming-nginx挂载三种方式扩展
什么是容器数据卷
从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。
如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化 MySQL容器删了,就相当于删库了。需求:MySQL数据可以本地存储
容器之间可以有一个数据共享的技术,docker容器产生的数据同步到本地或者别的地方。
这就是数据卷技术,就是目录挂载,将容器内的目录,挂载到虚拟机上或者Linux上
目的:实现容器数据的持久化和同步操作。容器间也可以数据共享
数据的覆盖问题
如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
使用数据卷
方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
docker run -it -v /home/test:/home centos /bin/bash
docker inspect 命令查看容器信息
测试挂载卷
1、在容器内部修改文件同步到Linux主机上
进入容器,在/home目录下创建123.sh文件
主机内可以查看在容器内部创建的文件
2、同样地,在Linux上修改挂在卷文件可以同步到容器内部
3、停止容器,修改Linux主机上的文件,同步到容器内
# 1、停止容器
exit
# 2、查看容器是否还在运行
docker ps
# 3、在Linux主机上修改对应目录的文件
# 4、启动容器并查看
# 4.1、 查看历史运行的容器
docker ps -a
# 4.2、 启动容器
docker start CONTAINER ID
# 4.3、 进去容器
docker attach CONTAINER ID
# 4.4、 查看数据卷文件
方式二:Dockerfile文件
请查看下一章节
数据卷命令
docker volume
docker volume –help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run docker volume COMMAND –help for more information on a command.
具名挂载/匿名挂载 匿名挂载
-v 容器内路径
-P 自动分配端口号
docker run -d -P –name nginx02 -v /etc/nginx nginx
具名挂载
-v 卷名:容器内路径
docker run -d -P –name nginx03 -v juming-nginx:/etc/nginx nginx
查看数据卷
方式一:docker inspect 容器ID
方式二:docker volume inspect juming-nginx
查看Linux主机docker工作目录 /var/lib/docker
所有docker容器内的卷,没有指定目录的情况下都是存放在 /var/lib/docker/volumes/xxx/_data 目录下
挂载三种方式
# 1
-v 容器内路径 # 匿名挂载
# 2
-v 卷名:容器内路径 # 具名挂载
# 3
-v 宿主机路径:容器内路径 # 指定路径挂载
扩展
给挂载的数据卷增加读写权限控制
通过 -v 容器内路径, ro rw 改变读写权限
ro readonly 只读
rw readwrite 可读写
# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P –name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P –name nginx03 -v juming-nginx:/etc/nginx:rw nginx
ro : 说明这个路径只能通过宿主机来操作,容器内无法操作
暂无评论内容