docker封装mysql镜像

  • 2020 年 3 月 17 日
  • 笔记

一、概述

直接使用官方的镜像

docker pull mysql:5.7

但是mysqld.cnf并没有优化,还是默认的。

二、封装镜像

创建目录

# dockerfile目录  mkdir -p /opt/dockerfile/mysql  # 持久化目录  mkdir -p /data/mysql/data

/opt/dockerfile/mysql 目录结构如下:

./  ├── dockerfile  ├── mysqld.cnf  └── run.sh

dockerfile

FROM mysql:5.7  ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

mysqld.cnf

[client]  port=3306  socket = /var/run/mysqld/mysqld.sock  [mysql]  no-auto-rehash  auto-rehash  default-character-set=utf8mb4  [mysqld]  ###basic settings  server-id = 2  pid-file    = /var/run/mysqld/mysqld.pid  socket        = /var/run/mysqld/mysqld.sock  datadir        = /var/lib/mysql  #log-error    = /var/lib/mysql/error.log  # By default we only accept connections from localhost  #bind-address    = 127.0.0.1  # Disabling symbolic-links is recommended to prevent assorted security risks  symbolic-links=0  character-set-server = utf8mb4  sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"  default-storage-engine=INNODB  transaction_isolation = READ-COMMITTED  auto_increment_offset = 1  connect_timeout = 20  max_connections = 3500  wait_timeout=86400  interactive_timeout=86400  interactive_timeout = 7200  log_bin_trust_function_creators = 1  wait_timeout = 7200  sort_buffer_size = 32M  join_buffer_size = 128M  max_allowed_packet = 1024M  tmp_table_size = 2097152  explicit_defaults_for_timestamp = 1  read_buffer_size = 16M  read_rnd_buffer_size = 32M  query_cache_type = 1  query_cache_size = 2M  table_open_cache = 1500  table_definition_cache = 1000  thread_cache_size = 768  back_log = 3000  open_files_limit = 65536  skip-name-resolve  ########log settings########  log-output=FILE  general_log = ON  general_log_file=/var/lib/mysql/general.log  slow_query_log = ON  slow_query_log_file=/var/lib/mysql/slowquery.log  long_query_time=10  #log-error=/var/lib/mysql/error.log  log_queries_not_using_indexes = OFF  log_throttle_queries_not_using_indexes = 0  #expire_logs_days = 120  min_examined_row_limit = 100  ########innodb settings########  innodb_io_capacity = 4000  innodb_io_capacity_max = 8000  innodb_buffer_pool_size = 6144M  innodb_file_per_table = on  innodb_buffer_pool_instances = 20  innodb_buffer_pool_load_at_startup = 1  innodb_buffer_pool_dump_at_shutdown = 1  innodb_log_file_size = 300M  innodb_log_files_in_group = 2   innodb_log_buffer_size = 16M  innodb_undo_logs = 128  #innodb_undo_tablespaces = 3  #innodb_undo_log_truncate = 1  #innodb_max_undo_log_size = 2G  innodb_flush_method = O_DIRECT  innodb_flush_neighbors = 1  innodb_purge_threads = 4  innodb_large_prefix = 1  innodb_thread_concurrency = 64  innodb_print_all_deadlocks = 1  innodb_strict_mode = 1  innodb_sort_buffer_size = 64M  innodb_flush_log_at_trx_commit=1  innodb_autoextend_increment=64  innodb_concurrency_tickets=5000  innodb_old_blocks_time=1000  innodb_open_files=65536  innodb_stats_on_metadata=0  innodb_file_per_table=1  innodb_checksum_algorithm=0  #innodb_data_file_path=ibdata1:60M;ibdata2:60M;autoextend:max:1G  innodb_data_file_path = ibdata1:12M:autoextend  #innodb_temp_data_file_path = ibtmp1:500M:autoextend:max:20G  #innodb_buffer_pool_dump_pct = 40  #innodb_page_cleaners = 4  #innodb_purge_rseg_truncate_frequency = 128  binlog_gtid_simple_recovery=1  #log_timestamps=system  ##############  delayed_insert_limit = 100  delayed_insert_timeout = 300  delayed_queue_size = 1000  delay_key_write = ON  disconnect_on_expired_password = ON  div_precision_increment = 4  end_markers_in_json = OFF  eq_range_index_dive_limit = 10  innodb_adaptive_flushing = ON  innodb_adaptive_hash_index = ON  innodb_adaptive_max_sleep_delay = 150000  #innodb_additional_mem_pool_size = 2097152  innodb_autoextend_increment = 64  innodb_autoinc_lock_mode = 1

run.sh

#!/bin/bash  docker run -d --name mysqld_prod --restart=always -e MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 -v /data/mysql/data:/var/lib/mysql mysqld_prod:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

生成镜像

cd /opt/dockerfile/mysql  docker build -t mysqld_prod:5.7 .

启动镜像

bash run.sh

三、测试连接

连接测试