docker mysql 生产环境_Docker构建MySQL环境

一、运行 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 bashcat /etc/mysql/my.cnf

docker mysql 生产环境_Docker构建MySQL环境_第1张图片

可以发现,主配置文件 my.cnf 加载了 /etc/mysql/conf.d 文件夹下所有的配置(后缀必须是 .cnf),我们只需映射 conf.d 文件夹即可。

宿主机中创建文件夹 mysql,并分别创建 data 目录和 conf 目录。新建配置文件 txl.cnf:

[mysqld]

server-id = 1#服务Id唯一

port= 3306log-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

588089cfbfbbc2d01937b2a84a6fd883.png

使用容器客户端连接:

docker exec -it mysql mysql -uroot -p123

docker mysql 生产环境_Docker构建MySQL环境_第2张图片

二、微容器 Alpine 构建基础镜像

Alpine Linux 是一个面向安全的轻型的 Linux 发行版。采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,如:apk add、apk update、apk del。

关键的是,相比于其他 Linux 的 Docker 镜像,它的容量非常小,仅仅只有5MB。

Alpine Linux 的官网:

2.1 构建 MySQL 客户端镜像

Dockerfile:

FROM alpine:3.8RUN 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密码

需要重新构建 Dockerfile,如:

FROM alpine:3.8RUNecho 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.1RUNmkdirdata

ENV mysql_user root

ENV mysql_pass123ENV 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 /datafimysqldump-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.1ENV mysql_user root

ENV mysql_pass123ENV mysql_host180.76.232.93ENV mysql_db test

COPY ./mysqlbak.sh /RUNchmod +x mysqlbak.shENV cron_conf"* * * * *"RUNecho "$cron_conf /mysqlbak.sh" >> /var/spool/cron/crontabs/root

ENTRYPOINT ["crond","-f"]

crond -f  代表定时任务卡在前台运行:

docker mysql 生产环境_Docker构建MySQL环境_第3张图片

构建镜像:

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

你可能感兴趣的:(docker,mysql,生产环境)