docker compose部署mysql数据库
1. 想要达成的目标
通过docker compose 来部署 mysql,并实现一些列需求
- 在mysql容器初始化时设置字符类型
- 设置mysql容器的时区为中国时区
- 设置mysql root密码,采用.env传入参数
- 初始化时创建一个数据库
- 初始化时创建用户名和密码
- 挂载本地目录到容器内
- 容器初始化时执行脚本,导入需要的数据库数据
- 使用现有创建的docker network网络,并设定固定IP地址
- 设置容器运行时使用的内存不超过1G
2. 实现方式
- docker compose文件
version: "3.9"
services:
# app 标签
mysql:
# 使用的镜像名称
image: mysql:5.7
# 容器名称
container_name: mysql57
# 容器重启策略
restart: always
# 容器初始化时执行的指令
command:
[
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
]
# 环境遍历
environment:
# 设置容器内的时区
TZ: Asia/Shanghai
# 设置mysql root密码,可以直接设置明文密码 MYSQL_ROOT_PASSWORD: root,这里采用.env来传入密码
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
# 创建数据库
MYSQL_DATABASE: wordpress
# 设置数据库用户名
MYSQL_USER: demo
# 设置数数据库密码
MYSQL_PASSWORD: demo
# 对外端口的映射
ports:
- 43306:3306
# 映射目录到容器
volumes:
- ./db_data:/var/lib/mysql
# 将需要执行的sql语句也加入
- ./myemployees.sql:/docker-entrypoint-initdb.d/myemployees.sql
# 当有初始化时需要执行sql语句
- ./db-init.sh:/docker-entrypoint-initdb.d/db-init.sh
# 指定使用的容器网络和地址
networks:
seclabs:
ipv4_address: 10.1.0.2
# 限制容器内存大小
mem_limit: 1024m
# 在宿主机上创建
# docker network create --driver=bridge --subnet=10.1.0.0/24 seclabs
# 调用外部网络,注意不能调用默认生成的docker0网络
networks:
seclabs:
external: true
- .env 文件
$ cat .env
MYSQL_ROOT_PASSWORD=root
- db-init.sh
$ cat db-init.sh
#!/bin/bash
mysql -uroot -proot < /docker-entrypoint-initdb.d/myemployees.sql >/dev/null 2>&
- myemployees.sql
-- 此处文件为自己随意创建的几条数据
3. 启动运行
docker compose up -d