Docker構建MySQL環境


一、運行 MySQL 容器

MySQL 鏡像地址:https://hub.docker.com/_/mysql

根據鏡像說明可知:

  • 默認的配置文件是:/etc/mysql/my.cnf
  • 默認的數據目錄是:/var/lib/mysql

最簡單的啟動方式:

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

通過 bash 進入容器,查看 my.cnf:

docker exec -it mysql bash
cat /etc/mysql/my.cnf

可以發現,主配置文件 my.cnf 加載了 /etc/mysql/conf.d 文件夾下所有的配置(后綴必須是 .cnf),我們只需映射 conf.d 文件夾即可。

宿主機中創建文件夾 mysql,並分別創建 data 目錄和 conf 目錄。新建配置文件 txl.cnf:

[mysqld]
server-id = 1 #服務Id唯一
port = 3306
log-error    = /var/log/mysql/error.log
#只能用IP地址
skip_name_resolve 
#數據庫默認字符集
character-set-server = utf8mb4
#數據庫字符集對應一些排序等規則 
collation-server = utf8mb4_general_ci
#設置client連接mysql時的字符集,防止亂碼
init_connect='SET NAMES utf8mb4'
#最大連接數
max_connections = 300

接下來分別映射數據庫目錄和配置文件目錄,啟動容器:

docker run --name mysql -d --rm \
-v /home/txl/mysql/conf:/etc/mysql/conf.d \
-v /home/txl/mysql/data:/var/lib/mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.22

使用容器客戶端連接:

docker exec -it mysql mysql -uroot -p123

二、微容器 Alpine 構建基礎鏡像

Alpine Linux 是一個面向安全的輕型的 Linux 發行版。采用了 musl libc 和 busybox 以減小系統的體積和運行時資源消耗。在保持瘦身的同時,Alpine Linux 還提供了自己的包管理工具 apk,如:apk add、apk update、apk del。

關鍵的是,相比於其他 Linux 的 Docker 鏡像,它的容量非常小,僅僅只有5MB。

Alpine Linux 的官網:

apline 鏡像地址:https://hub.docker.com/_/alpine

2.1 構建 MySQL 客戶端鏡像

Dockerfile:

FROM alpine:3.8
RUN apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]

構建鏡像:

docker build -t myalpine:0.1 .

測試運行:

docker run -it --name myalpine myalpine:0.1 -h 服務端IP -uroot -p密碼

默認鏡像源可能比較慢,可以使用中科大鏡像源:http://mirrors.ustc.edu.cn/alpine/

需要重新構建 Dockerfile,如:

FROM alpine:3.8
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/main > /etc/apk/repositories
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk add mysql-client
ENTRYPOINT ["mysql"]

2.2 MySQL 備份專用鏡像

在之前 MySQL 客戶端鏡像的基礎上,利用 mysqldump 數據庫備份命令制作一個新的鏡像。

Dockerfile:

FROM myalpine:0.1
RUN mkdir data
ENV mysql_user root
ENV mysql_pass 123
ENV mysql_host 服務端IP
ENV mysql_db test
ENTRYPOINT mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db > /data/$mysql_db.sql

構建鏡像:

docker build -t mysqlbackup:0.1 .

測試運行:

docker run -it --name mysqlbak --rm \
-v /home/txl/mysqlbak:/data \
-e mysql_host = 服務端IP \
-e mysql_db = test \
mysqlbackup:0.1

容器執行成功后自動刪除。查看 /home/txl/mysqlbak 目錄, test.sql 文件已被自動生成,數據表備份成功。

2.3 MySQL 備份專用鏡像(定時自動備份)

創建腳本 mysqlbak.sh:

#!/bin/sh
if [ ! -d "/data" ]; then
  mkdir /data
fi
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db > /data/$mysql_db-$(date +%Y%m%d_%H%M%S).sql

Dockerfile:

FROM myalpine:0.1
ENV mysql_user root
ENV mysql_pass 123
ENV mysql_host 180.76.232.93
ENV mysql_db test
COPY ./mysqlbak.sh /
RUN chmod +x mysqlbak.sh
ENV cron_conf  "*       *       *       *       *  "
RUN echo "$cron_conf /mysqlbak.sh" >> /var/spool/cron/crontabs/root
ENTRYPOINT ["crond","-f"]

 crond -f  代表定時任務卡在前台運行:

構建鏡像:

docker build -t mysqlbackup:0.2 .

測試運行:

docker run -d --name mysqlbak  \
-v /home/txl/mysqlbak:/data \
-e mysql_user=root \
-e mysql_pass=123 \
-e mysql_host=服務端IP \
-e mysql_db=test \
mysqlbackup:0.2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM