容器数据卷:将应用和环境打包成一个镜像
目的:将容器中的目录,挂在的Linux本地(容器的持久化和同步操作、容器间数据共享)
方式一:直接使用 -v 命令挂载
docker run -it -v 主机目录:容器内目录
# 测试
[root@suaxi ~]# docker run -it -v /home/test:/home centos /bin/bash
从容器同步到主机:
从主机同步到容器:(在容器停止后,主机修改了绑定路径下的文件,容器再次启动后,双向绑定依然生效)
1.安装MySQl
# 拉取镜像
[root@suaxi ~]# docker pull mysql
# 官方文档命令
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 启动(注意:docker启动mysql需使用-e命令配置密码)
-d 后台运行
-p 端口映射
-v 数据卷挂载
-e 环境配置
--name 给容器起个别名
[root@suaxi ~]# docker run -d -p 8088:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
# 后续再使用navicat等工具连接docker中的mysql实际测试一下配置是否生效
删除容器之后,同步到本地的数据依然存在,即实现数据的持久化。
2.具名挂载、匿名挂载
# 匿名挂载
-v 容器内的路径
-P 大写的P,随机映射端口
[root@suaxi ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
# 具名挂载
-v 卷名:容器内路径
[root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
# 查看刚才挂载的卷
[root@suaxi ~]# docker volume inspect juming-nginx
所有docker容器内的卷,在没有指定目录的情况下都在 /var/lib/docker/volumes/xxx/
通过具名挂载,可以方便的找到挂载的卷及相关数据、信息
# 区分匿名/具名挂载、指定路径挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /主机路径:容器内路径 # 指定路径挂载
# 通过 -v 容器内路径:ro/rw 改变读写权限
ro read only # 只读
rw read/write # 可读可写
[root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@suaxi ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
# ro 只能通过主机来操作,容器内只具有读的权限
方式二:Dockerfile
通过脚本生成镜像
# 1.创建dockerfile文件
# 2.编写脚本,命令(都是大写)参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----create complete----"
CMD /bin/bash
启动并进入容器:
脚本命令中挂载的目录是匿名挂载:
测试挂载目录下的双向绑定是否成功:
1.数据卷容器
多个mysql同步数据
图片来源:狂神说Java
# 通过刚才的脚本依次启动3个容器
[root@suaxi docker-test-volume]# docker run -it --name docker01 b0bf8a6507a3
[root@suaxi docker-test-volume]# docker run -it --name docker02 --volumes-from docker01 b0bf8a6507a3
[root@suaxi docker-test-volume]# docker run -it --name docker03 --volumes-from docker01 b0bf8a6507a3
通过volumes实现容器间的数据共享
注:即使删除父容器docker01,其他容器中的数据依然存在
# 实现多个mysql间的数据同步
[root@suaxi ~]# docker run -d -p 8088:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
[root@suaxi ~]# docker run -d -p 8088:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
评论 (0)