[mysql]定制封装MySQL的docker镜像
前言
基于MySQL的原版镜像做一些个性化配置修改,封装/etc/my.cnf文件到镜像中,并且支持通过环境变量修改innodb_buffer_pool_size、server_id以及自动配置innodb_read_io_threads和innodb_write_io_threads。
主要思路:备份并替换默认的docker-entrypoint.sh文件,根据环境变量修改my.cnf,并调用原来的启动文件。
根据CPU核数修改innodb_read_io_threads和innodb_write_io_threads,核数低于10时使用默认的4,高于10时对半分。
Dockerfile
FROM mysql:8.0.31
ADD docker-entrypoint.sh /usr/local/bin/
# docker-entrypoint_origin.sh是原始的启动文件,只是拷贝出来改了个名字
ADD docker-entrypoint_origin.sh /usr/local/bin/
ADD my.cnf /etc/
ENV MYSQL_INNODB_BUFFER_SIZE=512M
ENV MYSQL_SERVER_ID=100
- 打包命令
# 版本号的前三位表示基础MySQL版本
docker build -t custom-mysql:8.0.31.1 .
my.cnf
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
# custom variables
interactive_timeout = 600
wait_timeout = 600
default-time-zone='+8:00'
collation_server=utf8mb4_general_ci
max_allowed_packet = 32M
lower_case_table_names = 1
max_connections = 3000
innodb_buffer_pool_size = MYSQL_INNODB_BUFFER_SIZE
innodb_read_io_threads = MYSQL_READ_IOTHREADS
innodb_write_io_threads = MYSQL_WRITE_IOTHREADS
log_bin = mysql-bin
binlog_format = row
binlog_cache_size = 2M
expire_logs_days = 15
max_binlog_size = 1G
server_id = MYSQL_SERVER_ID
gtid_mode = on
enforce_gtid_consistency = on
log-slave-updates = 1
binlog-ignore-db = mysql,information_schema,sys,performance_schema
sync_binlog = 1
auto_increment_offset = 1
auto_increment_increment = 2
# slow query log
log-output=FILE
slow-query-log=1
long_query_time=5
slow_query_log_file=/var/lib/mysql/slow-query.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
docker-entrypoint.sh
#!/bin/bash
set -eo pipefail
shopt -s nullglob
# custom parameters
if [ -n "$MYSQL_SERVER_ID" ]; then
sed -i "s/MYSQL_SERVER_ID/$MYSQL_SERVER_ID/g" /etc/my.cnf
fi
function optimizeIO() {
if [ -n "$MYSQL_INNODB_BUFFER_SIZE" ]; then
sed -i "s/MYSQL_INNODB_BUFFER_SIZE/$MYSQL_INNODB_BUFFER_SIZE/g" /etc/my.cnf
fi
# 根据CPU核数自动配置io读写线程数
local cpuCores=$(cat /proc/cpuinfo | grep processor | wc -l)
local iothreads=4
if [ ${cpuCores} -gt 10 ]; then
local iothreads=$((${cpuCores}/2))
fi
sed -i "s/MYSQL_READ_IOTHREADS/${iothreads}/g" /etc/my.cnf
sed -i "s/MYSQL_WRITE_IOTHREADS/${iothreads}/g" /etc/my.cnf
}
optimizeIO
# 调用原始的启动脚本
sh /usr/local/bin/docker-entrypoint_origin.sh $@
docker-compose示例
version: "3"
services:
mysql:
image: custom-mysql:8.0.31.1
container_name: mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_INNODB_BUFFER_SIZE=1G
- MYSQL_SERVER_ID=100
[mysql]定制封装MySQL的docker镜像的更多相关文章
- 阿里mysql同步工具otter的docker镜像
https://github.com/dearplain/otter_manager https://github.com/dearplain/otter_node 本人开发的小巧docker镜像,根 ...
- 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)
原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...
- MySQL、MongoDB、Redis数据库Docker镜像制作
MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...
- mysql 的 docker 镜像使用
mysql 的 docker 镜像使用: 下载镜像: docker pull mysql:8.0.14 运行容器: docker run -it -e MYSQL_ROOT_PASSWORD=mypw ...
- asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行
1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...
- 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息
在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...
- docker部署mysql,nginx,php,并上传镜像到私有仓库
前言 最近公司准备把现有环境全部搞成容器化,所以笔者就先了解了一下docker,并搞了一搞,并把自己搞的过程记录下来.话不多说直接开干 环境说明 Centos7 Docker version 18.0 ...
- 使用 mysql 的 Docker 镜像
使用 mysql 的 Docker 镜像 前言 之前搞了很多都是手工在操作系统的镜像中安装使用 mysql,作为自己折腾也就算了,作为实际使用实为不妥:Docker最重要的特性就是可扩展性,把各种程序 ...
- Docker镜像实战(ssh、systemctl、nginx、tomcat、mysql)
Docker镜像实战 1.构建ssh镜像 2.构建systemctl 镜像 3.构建nginx镜像 4.构建tomcat镜像 5.构建mysql镜像 1.构建ssh镜像: 创建镜像目录 mkdir / ...
- MySQL 官方 Docker 镜像的使用
首先是pull image,这里我拉取的是5.6.35: $ sudo docker pull mysql:5.6.35 拉下来以后大可以按照官方的说明无脑启动,但是外部无法访问,所以绑定端口: $ ...
随机推荐
- 金三银四好像消失了,IT行业何时复苏!
疫情时候不敢离职,以为熬过来疫情了,行情会好一些,可是疫情结束了,反而行情更差了, 这是要哪样 我心中不由一万个 草泥 路过 我心中不惊有了很多疑惑和感叹 接着上一篇 一个28岁程序员入行自述和感受 ...
- pandas 常用操作记录
apply函数 一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作. 函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数. 作用: 用 ...
- RMQ问题ST表
稀疏表(Sparse Table表) 解决静态RMQ,区间最值查询问题的数据结构,树状数组(BIT)解决动态前缀和问题的数据结构: 例:https://www.luogu.org/problemnew ...
- 2021-05-12:给定一个数组arr,只能对arr中的一个子数组排序, 但是想让arr整体都有序。返回满足这一设定的子数组中,最短的是多长?
2021-05-12:给定一个数组arr,只能对arr中的一个子数组排序, 但是想让arr整体都有序.返回满足这一设定的子数组中,最短的是多长? 福大大 答案2021-05-12: 从左往右遍历,缓存 ...
- Pycharm的Available Packages为空问题
问题描述:可用软件包为空,Pycharm的Available Packages为空问题 打开软件包仓库设置画面 新建软件包仓库 输入软件包仓库 完成,可用软件包 Available Packages正 ...
- AcWing 1023. 买书
小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买多本) 输入格式 一个整数 n,代表总共钱数. 输出格式 一个整数,代表选择方案种数. ...
- RabbitMQ系列-概念及安装
1. 消息队列 消息队列是指利用队列这种数据结构进行消息发送.缓存.接收,使得进程间能相互通信,是点对点的通信 而消息代理是对消息队列的扩展,支持对消息的路由,是发布-订阅模式的通信,消息的发送者并不 ...
- 疑难杂记:Chirp信号相关的参数解释
图1 FMCW雷达信号参数 在德州仪器TI毫米波雷达中,开发板参数配置往往涉及如图1所示的信号参数. 宏观上看,信号参数包括\(ADC\)采样时间.脉冲重复周期(\(Chirp\)扫频周期)和帧时间( ...
- 了解基于模型的元学习:Learning to Learn优化策略和Meta-Learner LSTM
摘要:本文主要为大家讲解基于模型的元学习中的Learning to Learn优化策略和Meta-Learner LSTM. 本文分享自华为云社区<深度学习应用篇-元学习[16]:基于模型的元学 ...
- Spark SQL 及其DataFrame的基本操作
1.Spark SQL出现的 原因是什么? Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个叫作Data Frame的编程抽象结构数据模型(即带有Schema信息的RDD),S ...