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

目录

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 服务:

  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 其他容器名共享其他容器的卷,使两个容器的数据目录一致。
  • 小结:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot相关的一些知识

SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat&#xff0c;所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个&#xff1a; server.tomcat.thread.min-spare&#xff1a;最少的工作线程数&#xff0c;默认大小…

8小时出500杯,投诉三次辞退?Manner逼疯员工…?

一边歇斯底里的咆哮&#xff1a;「你投诉啊」&#xff01;一边将咖啡粉泼向顾客……一场大战要不是隔着岛台&#xff0c;就真的燃起来了……‍ 好巧不巧&#xff0c;同一天&#xff0c;另一段视频中的顾客就没那么好运了&#xff0c;男店员冲上去就给女顾客一个耳光……‍‍ 想…

HUSKY:一个优化大语言模型多步推理的新代理框架

推理被高度认可为生成人工智能的下一个前沿领域。通过推理&#xff0c;我们可以将任务分解为更小的子集并单独解决这些子集。例如以前的论文&#xff1a;思维链、思维树、思维骨架和反射&#xff0c;都是最近解决LLM推理能力的一些技术。此外推理还涉及一些外围功能&#xff0c…

GPT-4o目前暂无音频输出的能力

OpenAI的发布会惊艳的操作&#xff0c;近乎实时的语音对话&#xff0c;让很多人向往。 但实际上Chat对话时&#xff0c;尚无输出音频的能力&#xff0c;可能还未开放。 这是国外的一个开发小哥的交流帖子&#xff0c;可能还需要些时日才能用的上实时的音频输出。 不过当前Op…

OpenGL Super Bible 7th-Primitives, Pipelines, and Pixels图元、渲染管线与像素

简介 本文的原版为《OpenGL Super Bible 7th》,是同事给我的,翻译是原文+译文的形势。文章不属于机器直译,原因在于语言不存在一一对应的关系,我将尽可能的按照中国人看起来舒服的方式来翻译这些段子,如果段子让你感到身心愉悦,那还劳烦点个关注,追个更。如果我没有及时…

如何解决压缩软件无法打开文件的常见问题

压缩软件是我们日常生活和工作中常用的工具&#xff0c;无论是传输文件、节省存储空间还是组织数据&#xff0c;它们都能发挥重要作用。然而&#xff0c;偶尔也会遇到压缩软件无法打开文件的情况&#xff0c;这可能令人困惑和沮丧。本文将探讨几种常见原因&#xff0c;并提供解…

模板类与继承

1模板类继承普通类&#xff08;常见&#xff09; #include<iostream> using namespace std; class AA { public:int m_a;AA(int a) :m_a(a) { cout << "调用了AA的构造函数\n"; }void func1() { cout << "调用func1&#xff08;&#xff09;…

Zookeeper 集群如何实现数据一致性和顺序性原理?

Zookeeper 集群如何实现数据一致性和顺序性原理? 在 Zookeeper 集群中,确保数据的完整性和一致性是其核心功能之一。Zookeeper 通过一套分布式 协调机制来保证在多节点环境下,所有节点的数据是一致的,即使在网络分区或节点故障的情况下,依 然能够提供一致性服务。以下是实…

Ubuntu 20.04安装显卡驱动、CUDA和cuDNN(2024.06最新)

一、安装显卡驱动 1.1 查看显卡型号 lspci | grep -i nvidia我们发现输出的信息中有Device 2230&#xff0c;可以根据这个信息查询显卡型号 查询网址&#xff1a;https://admin.pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci 输入后点击Jump查询 我们发现显卡型号为RTX …

双阶段目标检测算法

双阶段目标检测算法 本文将系统的过一遍双阶段目标检测的经典算法&#xff0c;文献阅读顺序如下&#xff1a; R-CNN → \rightarrow → SPPnet → \rightarrow → Fast R-CNN → \rightarrow → Faster R-CNN → \rightarrow → Mask R-CNN R-CNN 一、研究背景 R-CNN可…

PHP转Go系列 | 条件循环的使用姿势

大家好&#xff0c;我是码农先森。 条件 在 PHP 语言中条件控制语句&#xff0c;主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…

java程序乱码的问题

【问题点】 我的需求是对接别的系统的接口&#xff0c;然后别的系统传过来的数据是utf8,然后我自己的系统是gbk字符集&#xff0c;同理其他的字符集也可以这么处理 多种方法&#xff1a; 如果你的系统字符集是 GBK&#xff0c;而需要处理来自其他系统接口的 UTF-8 编码数据&…

手机怎么恢复回收站清空的照片?这里有找回相册的3个重要指南

生活里&#xff0c;从家庭聚会的美好瞬间到重要的工作文件&#xff0c;都在我们的手机相册中留下了痕迹。然而意外常常降临&#xff0c;这些数据也有可能突然消失不见&#xff0c;并且恢复回收站清空的照片失败的情况也不少见。请别着急&#xff0c;在这篇文章中&#xff0c;我…

第三十一篇-Ollama+OneAPI基本集成配置

本文介绍使用oneapiollama实现openai接口实现 环境要求 Docker version 26.1.3 具体安装熟悉的&#xff0c;百度安装oneapi mkdir /home/oneapi/data docker run --name one-api -d --restart always -p 3000:3000 -e TZAsia/Shanghai -v /home/oneapi/data:/data justsong/…

教师工资管理系统(python,save保存文件)

我大学上课的时候老师还让写python程序代码&#xff0c;我选了个教师工资管理系统的课题&#xff0c;因为这个选的人少。虽然有一周的准备时间&#xff0c;我还是选择了在提交的前一天的下午开始做&#xff0c;做到了第二天的三点才写完。 这是条件 选题八&#xff1a;教师工资…

微信小程序修改标题

要修改微信小程序页面的标题和调整字体大小&#xff0c;你需要对 app.json 和页面对应的 json 文件进行配置。 修改页面标题 打开 app.json 文件&#xff0c;找到 pages 字段&#xff0c;确认需要修改的页面路径。打开对应页面的 .json 文件&#xff08;例如&#xff0c;pages/…

CentOS7设置自动定时重启

1.编辑启用配置文件 vi /etc/crontab 2.设置定时任务 SHELL/bin/bash PATH/sbin:/bin:/usr/sbin:/usr/bin MAILTOroot # 详细使用方法# 工作定义示例:# .---------------- 分钟 (0 - 59)# | .------------- 小时 (0 - 23)# | | .---------- 一个月中的第几天 (1 - 31)# …

React/Vue项目-请求文件封装(Axios,WebSocket)

一、Axios 1、Axios封装&#xff08;request.js&#xff09; import axios from "axios";// 开发环境配置 const baseURL "/api";// 生产环境配置 // const baseURL http://192.168.0.1:9000// 创建axios实例 const http axios.create({baseURL: base…

【Android】代码中将 SVG 图像转换颜色

要在代码中将 SVG 图像转换为黑色&#xff0c;你可以使用一个库&#xff0c;例如 AndroidSVG 或 SVG-Android。以下是一个简单的示例代码&#xff0c;展示了如何通过代码方式将 SVG 图像改为黑色&#xff1a; // 导入 AndroidSVG 库 import com.caverock.androidsvg.SVG; impo…

【docker】常用指令-表格整理

以下列出的指令是Docker中常用的命令&#xff0c;但并不是全部。Docker的指令非常丰富&#xff0c;可以根据具体的需求和场景选择合适的指令。同时&#xff0c;每个指令都有很多选项和参数可以使用&#xff0c;可以通过 docker COMMAND --help 来获取更详细的信息。 一、容器命…