【Docker构建MySQL8.0镜像】

Docker构建MySQL8.0镜像

  • 部署流程
    • [1. 拉取docker镜像](#1. 拉取docker镜像)
    • [2. 创建数据卷,存放MySQL数据](#2. 创建数据卷,存放MySQL数据)
    • [3. 启动MySQL镜像](#3. 启动MySQL镜像)
    • [4. 初始化sql放入MySQL镜像](#4. 初始化sql放入MySQL镜像)
    • [5. 执行MySQL脚本](#5. 执行MySQL脚本)
    • [6. MySQL镜像打包](#6. MySQL镜像打包)
    • [7. MySQL镜像迁移](#7. MySQL镜像迁移)

部署流程

1. 拉取docker镜像

go 复制代码
docker pull mysql:8.0.35

拉取成功后就可以看到镜像了:

这里我们选择MySQL 8.0.35版本,因为在8.0.33及其之前的版本被扫出多个漏洞,所以决定使用比较新版本的8.0.35。

2. 创建数据卷,存放MySQL数据

go 复制代码
docker volume create mysql_data8_35

最好在启动时自己准备好配置文件

3. 启动MySQL镜像

3.1 启动脚本

go 复制代码
docker run -d -e MYSQL_ROOT_PASSWORD=密码 --name mysql8 -d -p 13307:3306 -v mysql_data8_35:/var/lib/mysql -v /日志目录/log:/var/log/ -v /配置文件目录/my.cnf:/etc/mysql/my.cnf mysql:8.0.35

注意:上述启动命令需要修改密码、日志目录、配置文件目录等内容后才能执行

常见的mysql8配置文件 my.cnf:

mysqld

datadir = /var/lib/mysql

secure-file-priv= NULL

sql-mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

!includedir /etc/mysql/conf.d/

character-set-server = utf8mb4

collation-server = utf8mb4_general_ci

init_connect='SET NAMES utf8mb4'

lower_case_table_names = 1

mysql

default-character-set=utf8mb4

client

default-character-set=utf8mb4

3.2 查看是否启动成功

4. 初始化sql放入MySQL镜像

4.1 查看镜像id

docker ps

4.2 往镜像中放入脚本

docker cp init.sql 84dc03543c0f:/root/init.sql

4.3 进入镜像

docker exec -it mysql8 bash

5. 执行MySQL脚本

  1. 执行前登录mysql,开启日志:set global general_log=1;
  2. 查询日志存放目录:show variables like 'general%';
  3. 后续可以在目录实时查看脚本执行情况
  4. 创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  5. 执行MySQL脚本:mysql -uroot -p 数据库名 < /root/init.sql
    回车后输入密码
  6. 脚本执行完登录mysql去关闭日志:set global general_log=0;
    不关闭日志会导致数据堆积,mysql镜像越来越大

6. MySQL镜像打包

将MySQL镜像打成压缩包,后续就能直接把压缩包复制到别的服务器,实现镜像迁移。

6.1 查看数据卷所在位置

go 复制代码
docker volume inspect mysql_data8_35


6.2 数据压缩

  • 进入目录: cd /var/lib/docker/volumes/mysql_data8_35
  • 压缩数据:tar -czvf mysql8-35.tar.gz _data/

6.3 镜像压缩

go 复制代码
docker save -o mysql8-35.tar mysql:8.0.35

6.4 最终结果

7. MySQL镜像迁移

1. 加载镜像

docker load -i mysql8-35.tar

加载后即可看到镜像

2. 解压数据卷文件

tar -zxvf mysql8-35.tar.gz

3. 启动镜像

启动指令:
docker run -d -e MYSQL_ROOT_PASSWORD=密码 --name mysql8 -d -p 13307:3306 -v 数据卷解压目录/_data:/var/lib/mysql -v 日志目录/logs:/var/log/mysql8 -v 配置文件目录/my.cnf:/etc/mysql/my.cnf mysql:8.0.35

上述指令的配置文件目录、日志目录都是非必须的,如果不需要将对应 -v指令去掉即可

相关推荐
JavaPub-rodert23 分钟前
Docker 镜像地址总失效?基于 DockerHub 项目用 GitHub Actions 做一个自动检测状态页
docker·容器·github
天衍四九-30 分钟前
Docker 进阶实战系列(一):容器镜像安全,最小镜像与非 Root 运行
安全·docker·eureka
天衍四九-44 分钟前
Docker进阶实战系列(二):容器日志深度治理|驱动配置、自动切割、磁盘爆满彻底解决
docker·容器·eureka
sbjdhjd1 小时前
云安全 | Docker 容器逃逸复盘(一):从隔离边界到运行时链路,如何确认自己身处容器
网络安全·docker·云原生·容器·kubernetes·云计算·云安全
溪语流沙1 小时前
【Web全栈进阶】PostgreSQL上手:Docker跑库 + 把早报站从SQLite迁过去
前端·docker·postgresql
梦想不只是梦与想11 小时前
docker-compose.yml
docker·docker-compose·docker run
更深兼春远21 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
小白的码BUG之路1 天前
Docker -- No space left on device
运维·docker·容器
wzq11_6661 天前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
程序员老陆1 天前
Docker 命令全景指南:从镜像构建到生产运维
运维·docker·容器