思考: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
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