docker-comapose安装部署mysql

docker-comapose安装部署mysql

dart 复制代码
version: "3.4"
services:
  mysql:
    image: docker.das-security.cn/middleware/mysql:8.4.1
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=密码
    volumes:
      - /etc/localtime:/etc/localtime
      - ./configs/mysql/initdb:/docker-entrypoint-initdb.d/
      - ./configs/mysql/my.cnf:/etc/my.cnf
      - ../volumes/mysql:/var/lib/mysql
    restart: always
    ports:
      - 3306:3306
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:3306" ]
      interval: 30s
      timeout: 20s
      retries: 5

my.cnf

dart 复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.2/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.2/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-log-bin
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=hn-user

pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8mb4
socket=/var/run/mysqld/mysqld.sock



[mysql]
default-character-set=utf8mb4

!includedir /etc/mysql/conf.d/

版本和服务定义

dart 复制代码
version: "3.4"
services:
  mysql:
    image: docker.das-security.cn/middleware/mysql:8.4.1
    container_name: mysql

这里指定了使用的 docker-compose 版本为 "3.4",并定义了一个名为 mysql 的服务,使用指定的镜像 docker.das-security.cn/middleware/mysql:8.4.1,同时为容器命名为 mysql。

环境变量设置

dart 复制代码
environment:
  - MYSQL_ROOT_PASSWORD=密码

设置了 MYSQL_ROOT_PASSWORD 环境变量,用于指定 MySQL 的 root 用户密码,这里的 "密码" 应替换为实际的强密码。

数据卷挂载

dart 复制代码
volumes:
  - /etc/localtime:/etc/localtime
  -./configs/mysql/initdb:/docker-entrypoint-initdb.d/
  -./configs/mysql/my.cnf:/etc/my.cnf
  -../volumes/mysql:/var/lib/mysql

挂载本地的 /etc/localtime 到容器内的 /etc/localtime,确保容器内时间与宿主机时间一致。

将本地 ./configs/mysql/initdb 目录挂载到容器内的 /docker-entrypoint-initdb.d/,这个目录通常用于存放初始化 SQL 脚本,在容器启动时会自动执行这些脚本对数据库进行初始化操作。

把本地的 ./configs/mysql/my.cnf 配置文件挂载到容器内的 /etc/my.cnf,用于自定义 MySQL 的配置。

将本地 .../volumes/mysql 目录挂载到容器内的 /var/lib/mysql,这是 MySQL 数据存储的默认目录,这样可以保证数据的持久化,即使容器被删除,数据也不会丢失。

重启策略和端口映射

复制代码
restart: always
ports:
  - 3306:3306

restart: always 表示容器总是会在退出时自动重启,确保服务的可用性。

将容器内的 3306 端口映射到宿主机的 3306 端口,使得可以从宿主机或其他网络访问到容器内的 MySQL 服务。

健康检查

dart 复制代码
healthcheck:
  test: [ "CMD", "curl", "-f", ":3306" ]
  interval: 30s
  timeout: 20s
  retries: 5

健康检查设置使用 curl 命令尝试连接到 MySQL 服务的 3306 端口,-f 参数表示如果返回的状态码不是 200 也认为是成功(因为可能只是连接成功,而不是一个标准的 HTTP 响应)。

interval: 30s 表示每隔 30 秒检查一次容器的健康状态。

timeout: 20s 是健康检查命令的超时时间,如果在 20 秒内没有响应则认为检查失败。

retries: 5 表示如果连续 5 次健康检查失败,则认为容器不健康。

以下是一些可能的进一步丰富内容:

资源限制(可选)

复制代码
resources:
  limits:
    memory: 2G # 限制内存使用为 2GB
    cpu: 1.5 # 限制 CPU 使用为 1.5 个核心(根据实际需求调整)
  reservations:
    memory: 1G # 预留 1GB 内存(根据实际情况调整)
    cpu: 0.5 # 预留 0.5 个核心(根据实际情况调整)

可以根据实际系统资源和应用需求,对 MySQL 容器的资源使用进行限制和预留,以避免容器过度占用资源影响其他服务或系统性能。

日志配置(可选)

dart 复制代码
logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

这里配置了容器的日志驱动为 json-file,并设置了每个日志文件的最大大小为 10MB,最多保留 5 个日志文件。可以根据需要调整日志策略,例如使用其他日志驱动(如 syslog)或更详细的日志配置选项。

网络配置(可选,如果有特殊网络需求)

dart 复制代码
 networks:
      - my-network
networks:
  my-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.16.0.0/16
          gateway: 172.16.0.1

如果你的应用有多个服务并且需要更精细的网络控制,可以定义自己的网络。这里创建了一个名为 my-network 的自定义桥接网络,设置了子网和网关。将 mysql 服务连接到这个网络可以实现更好的网络隔离和管理。

通过以上丰富和扩展,可以使 docker-compose 部署的 MySQL 服务更加完善和适应不同的场景需求。在实际应用中,还需要根据具体的生产环境、性能要求和安全策略等进行进一步的调整和优化。同时,记得在运行 docker-compose 命令时,确保当前目录包含了相关的配置文件和挂载目录,并且具有足够的权限来操作这些资源。

相关推荐
Blue.ztl34 分钟前
菜鸟之路day31一一MySQL之多表设计
android·数据库·mysql
阿杜杜不是阿木木7 小时前
物联网从HomeAssistant开始
物联网·docker-compose·ha·米家·home-assistant·公牛
心动啊1218 小时前
镜像和容器的管理
docker·容器
noravinsc8 小时前
docker compose ps 命令
docker
篱笆院的狗9 小时前
MySQL 中如何进行 SQL 调优?
java·sql·mysql
溜达的大象10 小时前
docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤
运维·docker·容器
学习2年半10 小时前
服务器mysql连接我碰到的错误
运维·服务器·mysql
wangbaowo10 小时前
MySQL数据库下篇
数据库·经验分享·笔记·学习·mysql·安全
伤不起bb10 小时前
MySQl 数据库操作
数据库·mysql
是店小二呀11 小时前
【金仓数据库征文】金仓数据库(KingbaseES)迁移与集群部署实战:从MySQL到KES的全流程解析
数据库·mysql·金仓数据库 2025 征文·数据库平替用金仓