“Docker之道:优雅管理容器数据的艺术“

目录

[1. 容器数据卷](#1. 容器数据卷)

[1.1 容器卷的概念](#1.1 容器卷的概念)

[1.2 容器卷的使用](#1.2 容器卷的使用)

[1.3 个人案例实现容器卷挂载](#1.3 个人案例实现容器卷挂载)

[1.4 MySQL同步数据案例(容器数据卷操作)](#1.4 MySQL同步数据案例(容器数据卷操作))

[1.4.1 获取 MySQL 镜像](#1.4.1 获取 MySQL 镜像)

[1.4.2 运行 MySQL 容器并配置数据持久化](#1.4.2 运行 MySQL 容器并配置数据持久化)

参数说明:

[1.4.3 测试 MySQL 连接](#1.4.3 测试 MySQL 连接)

[1.4.4 数据持久化验证](#1.4.4 数据持久化验证)

[1.4.5 持续管理与使用](#1.4.5 持续管理与使用)

[1.5 具名挂载和匿名挂载](#1.5 具名挂载和匿名挂载)

[2. 数据卷容器](#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 服务:

  1. 打开 SQLyog
  2. 在连接设置中,设置主机为 localhost,端口为 3310,用户名为 root,密码为 123456
  3. 测试连接,如果成功,表示 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-frommysq101 容器共享卷 - 设置 root 密码 123456 - 容器命名 mysq102

参数说明

参数 含义
-d 后台运行容器。
-p 宿主机端口:容器端口 端口映射。
-v 宿主机目录:容器目录 卷挂载,将宿主机的目录挂载到容器中。
-e 环境变量=值 设置环境变量,配置容器启动时的参数。
--name 容器名字 容器命名,便于管理。
--volumes-from 其他容器名 共享其他容器的卷,使两个容器的数据目录一致。
  • 小结:

    容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。但是一旦持久化到了本地,这个时候本地的数据是不会删除的。

相关推荐
飞翔的佩奇19 分钟前
Java项目:基于SSM框架实现的游戏攻略网站系统分前后台【ssm+B/S架构+源码+数据库+毕业论文+任务书】
java·数据库·spring·游戏·架构·maven·ssm框架
u01040583622 分钟前
构建可扩展的Java Web应用架构
java·前端·架构
长亭外的少年36 分钟前
ClickHouse 介绍:深度解析高性能列式数据库的核心优势
java·数据库·clickhouse
tokengo38 分钟前
从Java开发者到.NET Core初级工程师学习路线:C#语言基础
java·csharp·新人入门
java66666888838 分钟前
深入理解Spring Boot中的配置加载顺序
java·spring boot·后端
人生匆匆1 小时前
docker安装elasticesarch-head
运维·docker·jenkins
空青7261 小时前
ChatGPT在Java后端开发中的应用与影响
java·开发语言·人工智能·后端·神经网络·机器学习·chatgpt
莫得等待1 小时前
MySQL的慢sql
java
洛阳泰山1 小时前
Docker 镜像国内加速下载教程
docker·容器
威哥爱编程1 小时前
Nginx性能调优5招35式不可不知的策略实战
java·nginx·性能调优