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

相关推荐
盒马盒马25 分钟前
Docker:存储卷
docker·容器
Hadoop_Liang1 小时前
Docker Compose一键部署Spring Boot + Vue项目
vue.js·spring boot·docker
诡异森林。2 小时前
Docker:容器化和虚拟化
java·docker·容器
岁岁岁平安3 小时前
mysql上课总结(1)(mysql中的常见的存储引擎)(面试)
数据库·mysql·innodb·存储引擎
昨天今天明天好多天6 小时前
【Linux】MySQL部署
linux·mysql·adb
我还能再卷一点6 小时前
Linux安装mysql【超详细】
linux·mysql·adb
ps酷教程8 小时前
docker基础篇(尚硅谷)
运维·docker·容器
CloudJourney10 小时前
初始Docker
运维·docker·容器
新知图书10 小时前
MySQL 9从入门到性能优化-创建触发器
数据库·mysql·性能优化
大只因bug10 小时前
基于Springboot的在线考试与学习交流平台的设计与实现
java·spring boot·后端·学习·mysql·vue·在线考试与学习交流平台系统