Administrator
发布于 2021-07-22 / 2 阅读
0
0

6、数据卷在mysql的应用

思考:MySQL的数据持久化问题

    		端口映射		数据库配置挂载			数据库数据挂载				mysql安装需要设置密码
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

 -d 后台运行
 -p 端口映射
 -v 卷挂载
 -e 环境配置
 --name 容器名字

  • 具名和匿名挂载

# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有的 volume 的情况
[root@iZbp10lcromzmqh9gml6idZ home]# docker volume ls

local     fc50a75f72a4cb31a66c4f668433fb7b1b5efda0b88b5c5e0eb28b0010d9ff5a

# 这里发现 -v 后面只写了容器内的路径,没有写容器外的路径

# 具名挂载
[root@iZbp10lcromzmqh9gml6idZ home]# docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx

 # -v 卷名:容器内的路径
 # 查看一下这个卷

所有docker容器内的卷,在没有指定路径的情况下都是在 /var/lib/docker/volume目录下;我们通过具名卷可以找到我们的数据卷,不建议使用匿名挂载

# 如何确认是具名挂载还是匿名挂载,还是指定路径挂载?
-v 容器内路径		# 匿名挂载
-v 卷名:容器内路径		# 具名挂载
-v /宿主机路径::容器内路径	#指定路径挂载

拓展:

# 通过 -v 容器内路径,ro rw改变读写权限
ro		readonly	# 只读
rw		readwrite	# 可读可写

# 一旦设置了容器权限,容器对我们挂出来的内容就有限定
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作

初识Dockerfile

6.5、Docker File 快速入门案例

Dockerfile 就是用来构建 docker 镜像的构建文件

通过脚本生成一个镜像,镜像是一层一层的,脚本是一个一个的,每个命令都是一层

# 创建一个dockerfile文件,名字随机 建议 Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos


CMD echo "---end---"

CMD /bin/bash

# 每个命令就是镜像的一层
  • 执行生成镜像

 # 	构建		dockerfile所在位置	生成的镜像名字
 docker build -f /home/docker-test-volume/Dockerfile -t test01/centos:1.0 .
  • 运行镜像

# 创建三个容器 docker01,docker02,docker03

docker run -it --name docker01 -v /home/docker-test-volume/volume01:/home/volume01 -v /home/docker-test-volume/volume02:/home/volume01 centos:latest
docker run -it --name docker02 -v /home/docker-test-volume/volume01:/home/volume01 -v /home/docker-test-volume/volume02:/home/volume01 centos:latest
docker run -it --name docker03 -v /home/docker-test-volume/volume01:/home/volume01 -v /home/docker-test-volume/volume02:/home/volume01 centos:latest

当在docker01创建文件,本地、docker02、docker03相应路径下的数据全部同步;当删除docker01后,本地、docker02、docker03中文件并没有被删除;当全部docker删除/停止,数据停止更新,但是本地的数据仍然存在,这意味着再次启动同类型的docker挂载相同位置的数据卷会将本地的数据卷同步到docker。

  • 多个MySQL实现数据共享

docker run -it --name mysql01 -v  -v  mysql:latest


评论