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

相关推荐
杨浦老苏22 分钟前
轻量级自托管笔记与清单利器jotty·page
笔记·docker·markdown·todo·群晖
YongCheng_Liang27 分钟前
Docker 核心概念与价值详解:从理论到实战安装指南
运维·docker·容器
XerCis41 分钟前
PostgreSQL与MySQL的超全对比(含迁移步骤)
数据库·mysql·postgresql
a***592642 分钟前
MySQL数据可视化实战技巧
数据库·mysql·信息可视化
Kratzdisteln42 分钟前
【Linux】Docker容器中快速部署VNC远程桌面环境
linux·运维·docker
liux35281 小时前
MySQL执行计划与索引优化全面解析(三)
android·mysql·adb
咸鱼xxx1 小时前
N8N搭建Agent(Docker Desktop版本)
docker·ai·容器·agent·n8n
袁袁袁袁满1 小时前
Docker服务彻底清空的所有相关资源(容器、镜像、网络、数据卷等)
linux·运维·ubuntu·docker·容器·docker清空资源·docker停掉资源
warton881 小时前
proxysql配置mysql mgr代理,实现读写分离
linux·运维·数据库·mysql
skywalk81631 小时前
Ubuntu22.04安装docker并启动 dnote服务
linux·ubuntu·docker·dnote