码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 6.运行mysql容器-理解容器数据卷


    运行mysql容器-理解容器数据卷

    • 1.什么是容器数据卷
    • 2.如何使用容器数据卷
      • 2.1 数据卷挂载命令
      • 2.2 容器数据卷的继承
      • 2.3 数据卷的读写权限
      • 2.4 容器数据卷的小实验(加深理解)
        • 2.4.1 启动挂载数据卷的centos容器
        • 2.4.2 启动后,在宿主机的data目录下会出现一个test的目录
        • 2.4.3 在宿主机的test目录下,新建一个a.go的文件
        • 2.4.4 在docker容器内部的home目录下,可以看到同步出现了a.go
        • 2.4.5在docker容器内部的home目录下,新建一个b.go文件
        • 2.4.6在宿主机的data/test目录下,可以看到出现一个b.go文件
        • 2.4.7 在容器的home目录下删除b.go,可以看到宿主的test目录下,b.go文件也被同步删除了
        • 2.4.8 使用docker inspect 查询挂载的数据卷
      • 2.5 小结
    • 3. 容器运行MySQL实战
      • 3.1 安装前的思考
      • 3.2 制作MySQL的配置文件
      • 3.3 运行MySQL容器
      • 3.4 验证
        • 3.4.1 创建数据
      • 3.4.2 验证容器重启后,数据不会丢失
      • 3.4.3 验证删除后,重启运行数据不会丢失
        • 3.4.3.1 删除容器
        • 3.4.3.2 重新运行容器
        • 3.4.3.3 验证
      • 4.注意

    1.什么是容器数据卷

    将应用和环境打包成一个镜像,如果数据都在容器,一旦容器删除了,数据就会丢失了。要解决这个问题,就必须要进行数据的持久化。
    容器之间可以有一个数据共享的技术。Docker容器中产生的数据,同步到宿主机,这就是卷技术。目录的挂载,将我们容器内的目录,挂载到Linux上面!
    所谓容器卷,就是容器的持久化和同步操作!容器间也是可以数据共享的!

    2.如何使用容器数据卷

    2.1 数据卷挂载命令

    直接使用命令来挂载 -v

    docker run -it --privileged=true -v 宿主机绝对路目录:/容器内目录 镜像名
    
    • 1

    这里我们看到加了一个privileged=true的参数,这是为了解决Docker挂载主机目录如果出现cannot open directory.:Permission denied
    如果是centos7安全模块会比之前系统版本加强,不安全的会禁止,所以目录挂载的情况被默认为不安全的行为。在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

    2.2 容器数据卷的继承

    这里所谓的继承,其实就是让一个容器使用另外一个容器的数据卷配置

    docker run -it --privileged=true --volumes- from 父类容器 --name 新容器名称 镜像
    
    • 1

    2.3 数据卷的读写权限

    这里所说的读写权限,指的是容器对数据卷的读写权限,千万别以为是宿主机!!!
    默认可读可写rw

    docker run -it --privileged=true -v 宿主机绝对路目录:/容器内目录:rw 镜像名
    
    • 1

    只读权限

    docker run -it --privileged=true -v 宿主机绝对路目录:/容器内目录:ro 镜像名
    
    • 1

    2.4 容器数据卷的小实验(加深理解)

    2.4.1 启动挂载数据卷的centos容器

    docker run --name mycentos  -it -v /data/test:/home centos /bin/bash
    
    • 1

    在这里插入图片描述

    2.4.2 启动后,在宿主机的data目录下会出现一个test的目录

    在这里插入图片描述

    2.4.3 在宿主机的test目录下,新建一个a.go的文件

    在这里插入图片描述

    2.4.4 在docker容器内部的home目录下,可以看到同步出现了a.go

    在这里插入图片描述

    2.4.5在docker容器内部的home目录下,新建一个b.go文件

    在这里插入图片描述

    2.4.6在宿主机的data/test目录下,可以看到出现一个b.go文件

    在这里插入图片描述

    2.4.7 在容器的home目录下删除b.go,可以看到宿主的test目录下,b.go文件也被同步删除了

    rm -rf b.go
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    2.4.8 使用docker inspect 查询挂载的数据卷

    docker inspect --format='{{.Mounts}}' mycentos
    
    • 1

    在这里插入图片描述

    2.5 小结

    通过上面的小实验我们看到,使用容器数据卷,我们只需要在本地修改即可,容器内会自动同步。

    3. 容器运行MySQL实战

    3.1 安装前的思考

    • 我们知道,容器如果不对数据做持久化(挂载数据卷),那么容器一旦重启或者删除,数据也就消失。所以我们要对MySQ数据做持久化,也就是挂载数据卷
    • 之前在物理机上安装过MySQL的小伙伴都知道,安装完成后,我们要修改基本的配置,主要是编码。而如果要在容器内修改,那么容器删除后,配置也就消失了,并且在容器内写配置,也不是很方便,所以我们这里要挂载数据卷,实现配置的共享(和宿主机)。

    3.2 制作MySQL的配置文件

    vim my.cnf

    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect=‘SET NAMES utf8mb4’
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    并把这个文件放到/data/mysql/conf下。
    在这里插入图片描述

    3.3 运行MySQL容器

    docker run -d -p 3306:3306 --privileged=true -v /data/mysql/log:/var/log/msql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql5.7 mysql:5.7.44
    
    • 1

    在这里插入图片描述

    3.4 验证

    3.4.1 创建数据

    在这里插入图片描述
    在这里插入图片描述
    上面我创建了一个mmp的数据库,并且也创建了表sys_user

    3.4.2 验证容器重启后,数据不会丢失

    下面我重启这个容器,看容器会不会丢失。

    docker restart mysql5.7
    
    • 1

    在这里插入图片描述
    验证配置是否丢失
    在这里插入图片描述
    我们看到,这还是之前容器的配置,没有改变。
    验证数据是否丢失
    在这里插入图片描述
    数据也没有丢失。
    所以挂载容器数据卷后,容器重启后,数据不会丢失,配置也不会消失。

    3.4.3 验证删除后,重启运行数据不会丢失

    3.4.3.1 删除容器

    docker rm -f mysql5.7
    
    • 1

    在这里插入图片描述

    3.4.3.2 重新运行容器

    docker run -d -p 3306:3306 --privileged=true -v /data/mysql/log:/var/log/msql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql5.7 mysql:5.7.44
    
    • 1

    3.4.3.3 验证

    验证配置是否丢失
    在这里插入图片描述
    我们看到,这还是之前容器的配置,没有改变。
    验证数据是否丢失
    在这里插入图片描述
    数据也没有丢失。
    所以挂载容器数据卷后,容器重启后,数据不会丢失,配置也不会消失。

    4.注意

    注意,这里运行的MySQL容器仅供自己学习使用,不能用于生产,因为配置太简单,并且也没有做基本的主从复制。

  • 相关阅读:
    Android查漏补缺(5)ContentProvider和ContentResolver
    数字孪生与智慧城市:共筑未来城市的科技基石
    day13 ts后端持久层框架(java转ts全栈/3R教室)
    【数据结构】---几分钟简单几步学会手撕链式二叉树(中)
    Vue-devTools安装—创建项目方法2 ui创建——Vue指令综合案例——汽车品牌管理
    ASP.NET Core 性能优化-缓存
    大数据平台测试-高级架构师语录(偷笑)
    XML解析
    springboot基于Java SpringBoot的电影院管理系统设计与实现毕业设计源码011633
    RocketMQ 消息存储机制分析
  • 原文地址:https://blog.csdn.net/lvxinchun/article/details/134452938
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号