目录
1. 容器数据卷
1.1 容器卷的概念
1.2 容器卷的使用
1.3 个人案例实现容器卷挂载
1.4 MySQL同步数据案例(容器数据卷操作)
1.4.1 获取 MySQL 镜像
1.4.2 运行 MySQL 容器并配置数据持久化
参数说明:
1.4.3 测试 MySQL 连接
1.4.4 数据持久化验证
1.4.5 持续管理与使用
1.5 具名挂载和匿名挂载
2. 数据卷容器
参数说明
1. 容器数据卷
- 场景:容器之间的共享和持久存在,这里存在挂载操作,本人觉得非常实用;
- 挂载:挂载到本地的容器卷上。
1.1 容器卷的概念
容器之间可以数据共享,不单单只存在于容器当中,删除了容器就好比"删库跑路"了一样,数据无法持久化;
-
实现挂载原理:
但是容器之间可以有一个数据共享的技术,docker容器中产生的数据,同步到本地;
这个就是卷技术,比如说目录挂载:将容器内的目录,挂载到本地上,实现容器间的数据共享;
1.2 容器卷的使用
挂载作用:我在容器中创建的文件,它会被同步到容器外面,同时我在容器外创建的文件或者是修改的文件也会被同步到容器内;
docker挂载常用命令表格:
序号 | 命令类型 | 命令格式 |
---|---|---|
1 | 挂载本地目录 | docker run -it -v 主机目录:容器内目录 |
2 | 挂载本地目录(只读) | docker run -it -v 主机目录:容器内目录:ro |
3 | 使用--mount选项挂载 | docker run -it --mount type=bind,source=主机目录,target=容器内目录 |
4 | 使用--mount选项(只读) | docker run -it --mount type=bind,source=主机目录,target=容器内目录,readonly |
5 | 挂载Docker数据卷 | docker run -it -v 数据卷名:容器内目录 |
6 | 使用--mount挂载数据卷 | docker run -it --mount source=数据卷名,target=容器内目录 |
7 | 查看容器信息 | docker inspect 容器ID |
序号 | 说明 | 示例 |
---|---|---|
1 | 将主机目录挂载到容器内目录 | docker run -it -v /home/ceshi:/home centos /bin/bash |
2 | 以只读方式挂载主机目录到容器内目录 | docker run -it -v /home/ceshi:/home:ro centos /bin/bash |
3 | 使用--mount 选项挂载主机目录到容器内目录 | docker run -it --mount type=bind,source=/home/ceshi,target=/home centos /bin/bash |
4 | 使用--mount 选项以只读方式挂载主机目录 | docker run -it --mount type=bind,source=/home/ceshi,target=/home,readonly centos /bin/bash |
5 | 将数据卷挂载到容器内目录 | docker run -it -v mydata:/home centos /bin/bash |
6 | 使用--mount 选项将数据卷挂载到容器内目录 | docker run -it --mount source=mydata,target=/home centos /bin/bash |
7 | 查看容器详细信息,包括挂载点信息 | docker inspect <container_id> |
- 容器卷的好处:以后要修改容器中的数据,只需要在本地修改即可。
- 容器被删除后,但是被挂载的数据是不会被删除的。
1.3 个人案例实现容器卷挂载
1.4 MySQL同步数据案例(容器数据卷操作)
1.4.1 获取 MySQL 镜像
从 Docker Hub 拉取 MySQL 5.7 的镜像:
[root@kuangshen home]# docker pull mysql:5.7
1.4.2 运行 MySQL 容器并配置数据持久化
启动 MySQL 容器时,需要挂载数据卷来确保数据的持久化。以下命令包括了主要的参数和配置:
[root@kuangshen home]# 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 mysq101 \mysql:5.7
参数说明:
-d
:后台运行容器。-p 3310:3306
:将宿主机的 3310 端口映射到容器的 3306 端口。-v /home/mysql/conf:/etc/mysql/conf.d
:挂载宿主机的配置目录到容器的 MySQL 配置目录。-v /home/mysql/data:/var/lib/mysql
:挂载宿主机的数据目录到容器的 MySQL 数据目录。-e MYSQL_ROOT_PASSWORD=123456
:设置 MySQL root 用户的密码为123456
。--name mysq101
:容器命名为mysq101
。mysql:5.7
:使用 MySQL 5.7 版本镜像。
1.4.3 测试 MySQL 连接
在本地使用 SQLyog
或其他 MySQL 客户端工具连接到 Docker 容器中的 MySQL 服务:
- 打开
SQLyog
。 - 在连接设置中,设置主机为
localhost
,端口为3310
,用户名为root
,密码为123456
。 - 测试连接,如果成功,表示 MySQL 已经正确运行。
1.4.4 数据持久化验证
在本地 MySQL 客户端中执行数据库操作(如创建数据库),并检查挂载的目录是否更新:
CREATE DATABASE testdb;
然后检查 /home/mysql/data
目录中的内容是否包含 testdb
的相关数据文件,确保数据在容器重启后仍然存在。
1.4.5 持续管理与使用
- 启动容器:
docker start mysq101
- 停止容器:
docker stop mysq101
- 查看容器日志:
docker logs mysq101
- 进入容器:
docker exec -it mysq101 bash
作用:是MySQL的数据可以持久化,在容器被删除后,MySQL的数据还依旧存在。
这样MySQL就可以持久化了,就算删除了容器中的MySQL,那么本地目录下的MySQL数据还依旧存在。
1.5 具名挂载和匿名挂载
参考教学视频中的笔记:
Docker视频:尚硅谷2022版Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili
Docker视频:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili
Docker进阶:compose是什么能干嘛_哔哩哔哩_bilibili
2. 数据卷容器
- 场景:使得容器之间的数据共享更加方便和可控。
- 总结一下 [ 容器数据卷 , 数据卷容器 ] 两者的区别: - 数据卷是一个特殊的目录,直接在主机的文件系统上进行管理,可以在容器之间共享和持久存在。 - 数据卷容器是用于创建和管理数据卷的容器,本身不运行应用程序,而是提供一个中心化的位置来管理和维护数据卷,使得容器之间的数据共享更加方便和可控。
- volumes挂载:以下命令是将MySQL02挂载到了MySQL01之下,进行数据同步,当MySQL01被删除时,MySQL02依旧存在,这是一个copy拷贝的概念,每次同步的时候是将MySQL01的配置拷贝到MySQL02中。
- 下表总结了通过 Docker 实现两个 MySQL 容器的数据共享配置步骤及参数。
操作步骤 | 命令示例 | 说明 |
---|---|---|
1. 获取 MySQL 镜像 | docker pull mysql:5.7 | 拉取 MySQL 5.7 镜像。 |
2. 运行第一个 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 mysq101 mysql:5.7 | - 端口映射:宿主机 3310 -> 容器 3306 - 配置挂载:/home/mysql/conf -> /etc/mysql/conf.d - 数据挂载:/home/mysql/data -> /var/lib/mysql - 设置 root 密码 123456 - 容器命名 mysq101 |
3. 运行第二个 MySQL 容器 | docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 --volumes-from mysq101 --name mysq102 mysql:5.7 | - 端口映射:宿主机 3311 -> 容器 3306 - 数据卷共享:使用 --volumes-from 从 mysq101 容器共享卷 - 设置 root 密码 123456 - 容器命名 mysq102 |
参数说明
参数 | 含义 |
---|---|
-d | 后台运行容器。 |
-p 宿主机端口:容器端口 | 端口映射。 |
-v 宿主机目录:容器目录 | 卷挂载,将宿主机的目录挂载到容器中。 |
-e 环境变量=值 | 设置环境变量,配置容器启动时的参数。 |
--name 容器名字 | 容器命名,便于管理。 |
--volumes-from 其他容器名 | 共享其他容器的卷,使两个容器的数据目录一致。 |
-
小结:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。但是一旦持久化到了本地,这个时候本地的数据是不会删除的。