跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Docker 重新打包 MySQL5.7 镜像并定制配置

通过 Docker 拉取 MySQL 5.7 基础镜像,在容器内调整 my.cnf 参数并提交为自定义镜像。流程涵盖镜像获取、容器运行、配置修改及新镜像验证,帮助开发者快速构建符合特定需求的数据库环境。重点涉及 GTID 开启、InnoDB 参数优化及持久化存储配置,适合需要定制化数据库环境的开发场景。

CryptoLab发布于 2025/2/3更新于 2026/6/421 浏览
Docker 重新打包 MySQL5.7 镜像并定制配置

Docker 重新打包 MySQL5.7 镜像并定制配置

在实际开发中,我们往往需要基于官方 MySQL 镜像进行一些特定的配置调整,比如修改默认端口、优化 InnoDB 参数或开启 GTID。直接修改配置文件后提交为新镜像,是快速构建定制化数据库环境的有效方法。下面以 MySQL 5.7 为例,演示如何通过 Docker 完成这一过程。

1. 拉取与启动基础镜像

首先从 Docker Hub 拉取官方的 MySQL 5.7 镜像,并启动一个容器。这里通过环境变量设置 root 密码,并将宿主机端口映射到容器内部。

docker pull mysql:5.7

docker run --name mysql -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql:5.7

启动后建议立即检查容器状态,确保运行正常:

docker ps -l

如果看到 STATUS 为 Up,说明服务已就绪。若显示 Exited,请查看日志排查原因(常见于权限或配置问题)。

2. 进入容器验证连接

为了确认数据库功能正常,我们可以进入容器内部执行 SQL 命令:

docker exec -it mysql bash
mysql -uroot -p123456

成功登录后会看到 MySQL 版本信息,此时可以简单执行 show databases; 确认无报错。

同时,在宿主机上也可以通过客户端工具连接测试,确保网络端口映射无误:

mysql -uroot -p123456 -h 192.168.1.20

3. 修改配置文件 my.cnf

接下来是核心步骤。我们需要修改容器内的 /etc/mysql/my.cnf 文件,根据业务需求调整参数。例如,开启 GTID 模式、调整 InnoDB 缓冲池大小、优化日志策略等。

注意:不同版本的 MySQL 配置文件路径可能略有差异,请以实际容器内路径为准。常见的修改包括全局变量、InnoDB 引擎参数以及日志相关配置。

以下是经过整理的配置示例,涵盖了连接数、字符集、主从复制及性能调优的关键项:

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
back_log = 80
basedir = /usr
tmpdir = /tmp
datadir = /var/lib/mysql

#------------------- global variables ------------#
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 16
slave_preserve_commit_order = 
 = 
 = TABLE
 = TABLE
 = 
 = 
 = NONE
 = 
 = /var/lib/mysql/mysql-bin
 = 
 = 
 = 
 = 
 = 
 = 
 = 
 = 
 = 
 = 
 = utf8
 = utf8_bin
skip_external_locking
 = 
 = mysql
 = DEFAULT
skip-name-resolve
 = 
 = 


 = M
 = ibdata1:M:autoextend
 = 
 = 
 = 
 = M
 = M
 = 
 = 
 = 
 = 
 = 
 = 
innodb_file_per_table
innodb_rollback_on_timeout


 = M
 = M
 = M
 = M
 = M
 = M
 = M
 = M
 = M


 = my3306-bin
 = row
 = 
 = 
 = M
 = M
 = k
slow_query_log
log-slow-admin-statements
 = 
 = 


 = relay3306.index
 = relay3306
 = 
 = 
log-slave-updates


 = M
 = M
 = M
 = M


 = MySQL [\\d]>
 = utf8


interactive-timeout


 = 
 = /var/lib/mysql/mysqld_error.log
on
gtid_mode
ON
relay_log_info_repository
master_info_repository
relay_log_recovery
on
enforce_gtid_consistency
ON
binlog_checksum
log_slave_updates
ON
log-bin
max_connect_errors
20000
max_connections
2000
wait_timeout
3600
interactive_timeout
3600
net_read_timeout
3600
net_write_timeout
3600
table_open_cache
1024
table_definition_cache
1024
thread_cache_size
512
open_files_limit
10000
character-set-server
collation-server
performance_schema
1
user
myisam_recover_options
local_infile
0
lower_case_table_names
0
#-------------------- innoDB ------------#
innodb_buffer_pool_size
2000
innodb_data_file_path
200
innodb_flush_log_at_trx_commit
1
innodb_io_capacity
600
innodb_lock_wait_timeout
120
innodb_log_buffer_size
8
innodb_log_file_size
200
innodb_log_files_in_group
3
innodb_max_dirty_pages_pct
85
innodb_read_io_threads
8
innodb_write_io_threads
8
innodb_support_xa
1
innodb_thread_concurrency
32
#------------ session variables -------#
join_buffer_size
8
key_buffer_size
256
bulk_insert_buffer_size
8
max_heap_table_size
96
tmp_table_size
96
read_buffer_size
8
sort_buffer_size
2
max_allowed_packet
64
read_rnd_buffer_size
32
#------------ MySQL Log ----------------#
log-bin
binlog_format
sync_binlog
1
expire_logs_days
15
max_binlog_cache_size
128
max_binlog_size
500
binlog_cache_size
64
log_warnings
1
long_query_time
0.25
#--------------- replicate --------------#
relay-log-index
relay-log
server-id
88
init_slave
'set sql_mode=STRICT_ALL_TABLES'
[myisamchk]
key_buffer
512
sort_buffer_size
512
read_buffer
8
write_buffer
8
[mysql]
prompt
default-character-set
[mysqlhotcopy]
[mysqld_safe]
open-files-limit
8192
log-error

保存退出后,记得重启容器使配置生效(或者直接在当前运行容器中生效,取决于具体参数类型,部分参数需重启)。

4. 提交新镜像

配置完成后,使用 docker commit 将当前容器的状态保存为新的镜像。这一步相当于把我们的'定制版'固化下来。

docker commit 64f075017f93 mysql:5.7.22-custom

这里的 64f075017f93 是容器的 ID,mysql:5.7.22-custom 是新镜像的仓库名和标签。你可以随时用 docker images 查看新生成的镜像。

5. 验证新镜像

最后,运行一个新容器来测试这个自定义镜像是否正常工作:

docker run --name mysql_test -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql:5.7.22-custom

进入容器检查配置文件内容,并在宿主机尝试连接,确认所有自定义参数均已生效。至此,我们就完成了一个包含特定配置的 MySQL 5.7 镜像的打包流程。

提示:在生产环境中,建议结合 Dockerfile 编写自动化构建脚本,而不是手动 commit 容器,这样能更好地管理镜像层和依赖关系。

目录

  1. Docker 重新打包 MySQL5.7 镜像并定制配置
  2. 1. 拉取与启动基础镜像
  3. 2. 进入容器验证连接
  4. 3. 修改配置文件 my.cnf
  5. 4. 提交新镜像
  6. 5. 验证新镜像
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 内存管理:new/delete 操作自定义类型的构造与析构原理
  • Matplotlib 图例进阶:plt.legend() 深度定制与实战技巧
  • AI 大模型通信机制解析:流式传输与数据封装逻辑
  • 从零构建大模型:深入理解大型语言模型原理与实现
  • AI 图像生成技术指南:从原理到实战
  • 统信 UOS V2500 服务器 OpenClaw AI Agent 安装部署指南
  • CSS 样式基础与布局实战指南
  • Web 服务与 I/O 模型详解及 Nginx 实战
  • 网络基础安全六大组件:防火墙、WAF、IPS、行为管控、DDoS 及蜜罐详解
  • SpringBoot 整合 Langchain4j 对接主流大模型实战
  • FPGA 设计实战:CAN 总线原理与 Verilog 实现
  • Cppcheck:C/C++ 代码静态分析工具的使用指南
  • 大模型微调核心技术:LoRA 原理、实践与常见问题解析
  • 无线蜂窝网络:核心原理、架构与代际演进
  • 基于 AI 辅助的 Java 在线考试系统开发实践
  • C++26 任务调度与优先级控制机制详解
  • Dev C++ 安装与配置指南
  • OpenClaw 安装与飞书机器人对接全流程指南
  • SpringBoot+Nacos 整合达梦数据库:MySQL 迁移与持久化配置实战
  • 开源大模型实战:GPT-OSS 本地部署与全面测评
  • 相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online