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