首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Docker 部署 MySQL 极简实战:Dockerfile 定制、51 秒启动 51 实例、生产级参数调优建议

     編輯:MySQL 綜合教學

Docker 部署 MySQL 极简实战

Docker 以輕量級容器化技術重新定義了 MySQL 部署與測試流程。本文展示一個精簡的 Dockerfile (基於 Ubuntu + MariaDB 10),實測 **27 秒啟動 51 個實例**,並提供生產級參數調優與資料持久化建議。

精簡 Dockerfile (MariaDB 10.0)

FROM ubuntu
MAINTAINER erkan yanar 

ENV DEBIAN_FRONTEND noninteractive

# 安裝 MariaDB (官方源)
RUN apt-get update && apt-get install -y python-software-properties
RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
RUN add-apt-repository 'deb https://mirror2.hs-esslingen.de/mariadb/repo/10.0/ubuntu precise main'
RUN apt-get update && apt-get install -y mariadb-server

# 精簡配置:允許遠程連接、關閉 DNS 解析、InnoDB 刷盤優化、初始化腳本
RUN echo "[mysqld]" > /etc/mysql/conf.d/docker.cnf \
 && echo "bind-address = 0.0.0.0" >> /etc/mysql/conf.d/docker.cnf \
 && echo "innodb_flush_method = O_DSYNC" >> /etc/mysql/conf.d/docker.cnf \
 && echo "skip-name-resolve" >> /etc/mysql/conf.d/docker.cnf \
 && echo "init_file = /etc/mysql/init" >> /etc/mysql/conf.d/docker.cnf

# 建立超級用戶 (僅示範,生產請用密碼文件/環境變數)
RUN echo "GRANT ALL ON *.* TO 'supa'@'%' IDENTIFIED BY 'supa';" > /etc/mysql/init

EXPOSE 3306
USER mysql
ENTRYPOINT ["mysqld"]

構建與批量啟動測試

# 構建鏡像 (命名 mysql)
cat Dockerfile | docker build -t mysql -

# 批量啟動 51 個容器 (端口 5010-5060 映射 3306)
time for i in $(seq 10 60); do 
  docker run -d -p 50$i:3306 mysql; 
done
# 實測: real 0m27.446s (筆記本環境,KVM 更快)

驗證叢集

docker ps | grep mysqld | wc -l  # 51
docker ps | head -2
# CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
# 6d3a5181cd56  mysql  mysqld   1 min    Up      0.0.0.0:5060->3306/tcp  lonely_pare

生產級優化建議 (必讀)

維度建議配置
資料持久化-v /host/mysql/data:/var/lib/mysql 掛載宿主機目錄或具名卷,避免容器刪除數據丟失
配置外掛-v /host/mysql/conf.d:/etc/mysql/conf.d 掛載自定義 my.cnf 片段
資源限制--memory=2g --cpus=2 防止單容器佔盡宿主資源
環境變數注入使用 MYSQL_ROOT_PASSWORD, MYSQL_DATABASE 等官方鏡像支援的環境變數初始化
健康檢查Dockerfile 加入 HEALTHCHECK CMD mysqladmin ping -h localhost
網路隔離建立專用 docker network,僅應用容器可訪問
日誌驅動--log-driver=json-file --log-opt max-size=10m --log-opt max-file=3

官方鏡像替代方案 (推薦生產直接用)

docker run -d \
  --name mysql-prod \
  -e MYSQL_ROOT_PASSWORD=strong_pass \
  -e MYSQL_DATABASE=myapp \
  -v mysql-data:/var/lib/mysql \
  -v /host/conf.d:/etc/mysql/conf.d \
  -p 3306:3306 \
  --memory=2g --cpus=2 \
  mysql:8.0  # 或 mariadb:10.6

結語: Docker 讓 MySQL 實例化如同進程般輕量,極大加速 CI/CD、分庫分表測試、多版本並行開發。生產落地請務必解決**持久化、資源隔離、安全加固、備份策略**四大工程化課題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved