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
posted @ 2023-06-27 10:23  二乘八是十六  阅读(526)  评论(0编辑  收藏  举报