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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

表面声波滤波器——叉指换能器(3)

叉指换能器(interdigital transducers&#xff0c;IDT) 是在压电基片表面激励和检测声表面波&#xff0c;从而实现电信号和声信号间的相互转换。 叉指换能器由在压电基片表面上沉积两组互相交错&#xff0c;周期分布的状金属条带(叉指电极)组成&#xff0c;每组电极和一个汇流…

Python Pyperclip:获取剪贴板中的值

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在日常生活和工作中&#xff0c;经常需要将一些信息从一个地方复制到另一个地方。这时&#xff0c;剪贴板就显得尤为重要了。Python作为一门强大的编程语言&#xff0c;也提供了许多方便的工具来帮助处理剪贴板中的数…

【数据结构与算法(C语言)】离散事件模拟- 单链表和队列的混合实际应用

目录 1. 前言2. 流程图3. 数据结构3.1 单链表3.2 链式队列 4. 核心函数4.1 银行业务模拟 void BankSimulation()4.2 初始化 void OpenForDay()4.3 客户到达 void CustomerArrived(Event en)4.4 客户离开 void CustomerArrived(Event en) 5. 非核心函数5.1 新建客户 NewCustomer…

eNSP学习——配置基于全局地址池的DHCP

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、配置基于全局地址池的 DHCP Server 3、配置DHCP Client 主要命令 [R1]dhcp enable //开启 DHCP功能//创建一个全局地址池&#xff0c;地址池名称为huawei1 [R1]ip pool h…

.net8 blazor auto模式很爽(三)用.net8的Blazor自动模式测试,到底在运行server还是WebAssembly

Blazor自动模式到底什么时侯在运行server&#xff0c;什么时侯在运行WebAssembly。这个对我们来说非常重要&#xff0c;官方并没有很清楚地告诉我们。并且存在一些误导&#xff0c;让我们觉得自动模式就是不管我怎么弄&#xff0c;blazor都会自动识别该使用server还是WebAssemb…

计算机网络:3数据链路层

数据链路层 概述封装成帧和透明传输帧透明传输&#xff08;填充字节或比特&#xff09;差错检测奇偶校验循环冗余校验CRC Cyclic Redundancy Check 可靠传输停止-等待协议回退n帧协议&#xff08;滑动窗口协议&#xff09;选择重传协议 点对点协议PPP共享式以太网网络适配器&am…

哪些因素驱动新零售发展?新零售与传统零售、电子商务区别在哪?

零售业正经历着一场前所未有的变革&#xff0c;这场变革由多种因素驱动&#xff0c;涉及技术、消费习惯以及商业模式的全面升级。我们称之为”新零售”&#xff0c;它不仅仅是一个概念&#xff0c;更是零售业未来发展的方向。新零售的兴起&#xff0c;标志着零售行业正在迈向一…

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:

Ubuntu22.04之比较工具:Bcompare与Meld显示空格与tab(二百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Java基础学习-方法

目录 方法基础概念 方法的格式&#xff1a; 案例&#xff1a;最简单方法的定义 案例&#xff1a;带参数的方法调用 案例&#xff1a;求圆的面积 带有返回值的方法&#xff1a; 方法注意点 方法的重载&#xff1a; ​编辑 案例&#xff1a;数组的遍历&#xff1a; 案例…

Apache Doris 之 Docker 部署篇

前言 在现代数据驱动的商业环境中&#xff0c;实时数据分析和高并发查询能力是企业成功的关键因素之一。传统的数据仓库和分析工具在面对大规模数据处理和实时分析需求时&#xff0c;往往力不从心。Apache Doris 作为一个现代的 MPP 数据库管理系统&#xff0c;凭借其强大的查…

MySQL 数据库 Navicat Premium 16.01 安装教程

MySQL 数据库 Navicat Premium 16.01 安装教程 目录 MySQL 数据库 Navicat Premium 16.01 安装教程前言安装步骤同意协议选择安装目录桌面快捷方式安装正在安装安装完成 步骤获取 前言 MySQL数据库管理用Navicat更加方便&#xff0c;可视化效果更好&#xff0c;今天给大家带来…

Thermo Fisher赛默飞TSQ单杆电源维修1R120380-0001

美国热电质朴分析仪电路板维修&#xff0c;液相色谱质谱联用仪维修&#xff0c;Thermo Fisher赛默飞世尔光谱仪IS10 IS5赛默飞主板维修。 公司仪器维修设备备有三相交流电源,变频电源&#xff0c;无油空压气源&#xff0c;标准化的维修平台、电子负载&#xff0c;耐压测试仪、老…

Python实现管线建模 - 3.同心变径管

往期回顾 Python实现管线建模 || 1.圆直管、方管https://blog.csdn.net/Xxy9426/article/details/138836778?spm1001.2014.3001.5501 对依赖库的补充 随着后续内容的深入&#xff0c;我发现单纯靠trimesh库已经无法完成后续的建模&#xff08;涉及到多个几何体拼接或者是创建…

采购芯片时细心,再细心!

检查原理图&#xff0c;采购时候的细心对照所费的时远远少于焊完找BUG的时间&#xff01;&#xff01;&#xff01; 购买芯片的时候不光看芯片名称&#xff0c;封装&#xff0c;丝印也要看&#xff0c;如果不一样必须对照两者的引脚图仔细观察是否一样&#xff01;&#xff01…

边缘检测(一)-灰度图像边缘检测方法

灰度图像边缘检测是数字图像处理与机器视觉中经常遇到的一个问题&#xff0c;边缘检测是否连续、光滑是判断检测方法优劣的一个重要标准&#xff0c;下面通过一个实例提供灰度图像边缘检测方法&#xff0c;该方法对其他图像检测也具有一定的参考价值。 首先&#xff0c;读入一幅…

国际期货常见技术面分析

技术分析方法&#xff1a;通过对市场行为本身的分析来预测价格的变动方向&#xff0c;及主要是对期货市场的日常交易状况&#xff0c;包括价格、交易量与持仓量等数据&#xff0c;按照时间顺序绘制成图形、图表/形成一定的指标系统。然而针对这些图形、图表/指标系统进行分析研…

【C++】类和对象的引入

文章目录 前言一、类的定义二、类的访问控制与封装三、类的作用域四、类的实例化五、类的存储方式及大小计算六、隐藏的this指针 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&…

一五三、MAC 安装MongoDB可视化工具连接

若没有安装brew包管理工具&#xff0c;在命令行输入安装命令 /bin/bash -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”上面步骤安装完成后&#xff0c;开始安装MongoDB&#xff0c;输入安装命令&#xff1a; brew tap mongodb/brewbrew u…

安装VS Code 提示This User Installer is not meant to be run as an Administrator问题

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 在vs code官网&#xff08;https://code.visualstudio.com/&#xff09;下载安装包&#xff0c;显示如下提示信息&#xff1a; This User Installer is not meant to be run as an Administrator.…