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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端