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 命令时,确保当前目录包含了相关的配置文件和挂载目录,并且具有足够的权限来操作这些资源。

相关推荐
隔壁老王15623 分钟前
mysql实时同步到es
数据库·mysql·elasticsearch
努力的小T40 分钟前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣2 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
Hanson Huang3 小时前
【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
redis·mysql·mongodb·es
LUCIAZZZ3 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel
yuanbenshidiaos3 小时前
【正则表达式】
数据库·mysql·正则表达式
转身後 默落4 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三4 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes
jessezappy4 小时前
记录:Docker 安装记录
docker·安装·ollama·软链接
三天不学习5 小时前
如何在 Ubuntu 上安装 Docker:详细步骤指南
ubuntu·docker·eureka