docker-comapose安装部署mysql

ops/2024/10/19 1:55:35/

docker-comapose安装部署mysql

version: "3.4"
services:mysql:image: docker.das-security.cn/middleware/mysql:8.4.1container_name: mysqlenvironment:- 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/mysqlrestart: alwaysports:- 3306:3306healthcheck:test: [ "CMD", "curl", "-f", "http://localhost:3306" ]interval: 30stimeout: 20sretries: 5

my.cnf

# 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-userpid-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/

版本和服务定义

version: "3.4"
services:mysql:image: docker.das-security.cn/middleware/mysql:8.4.1container_name: mysql

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

环境变量设置

environment:- MYSQL_ROOT_PASSWORD=密码

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

数据卷挂载

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 服务。

健康检查

healthcheck:test: [ "CMD", "curl", "-f", ":3306" ]interval: 30stimeout: 20sretries: 5

健康检查设置使用 curl 命令尝试连接到 MySQL 服务的 3306 端口,-f 参数表示如果返回的状态码不是 200 也认为是成功(因为可能只是连接成功,而不是一个标准的 HTTP 响应)。
interval: 30s 表示每隔 30 秒检查一次容器的健康状态。
timeout: 20s 是健康检查命令的超时时间,如果在 20 秒内没有响应则认为检查失败。
retries: 5 表示如果连续 5 次健康检查失败,则认为容器不健康。
以下是一些可能的进一步丰富内容:

资源限制(可选)

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

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

日志配置(可选)

logging:driver: "json-file"options:max-size: "10m"max-file: "5"

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

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

 networks:- my-network
networks:my-network:driver: bridgeipam:config:- subnet: 172.16.0.0/16gateway: 172.16.0.1

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

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


http://www.ppmy.cn/ops/126605.html

相关文章

【python】数据容器:set(集合)

目录 数据容器入门数据容器:list(列表)list(列表)的遍历数据容器:tuple(元组)数据容器:str(字符串)数据容器的切片数据容器:set&…

chrome 阻止浏览器在表单输入框聚焦/输入时显示保存的密码和账号候选框(Google 密码管理工具)

参考: 完美解决 element-ui inputpassword 在浏览器会自动填充密码的问题 背景: 领导要求去掉登录页的账号密码表单的自动显示账号密码候选框 定位: chrome 版本 126.0.6478.127 , 现有表单用的是原生 input 元素, 之前已经加了 autocomplete"off" 和 readonly …

文献阅读:通过深度神经网络联合建模多个切片构建3D整体生物体空间图谱

文献介绍 文献题目: 通过深度神经网络联合建模多个切片构建3D整体生物体空间图谱 研究团队: 杨灿(香港科技大学)、吴若昊(香港科技大学) 发表时间: 2023-10-19 发表期刊: Nature M…

业务逻辑漏洞之墨者学院靶场——身份认证失效

点击链接进去之后的页面如下: 让我们获取马春生的个人信息 查看页面源代码: 可以看到一堆以数字命名的图片,应该是一些重要信息,可以看到马春生对应的图片是20128880316.jpg 根据提示登录test用户后,页面发生变化&…

状态模式(C++)

定义:状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式将状态相关的行为封装到单独的类中,并将这些对象组合成状态模式&#xff…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度,天气状况:**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

Chromium html<img>对应c++接口定义

<img src"tulip.jpg" alt"上海鲜花港 - 郁金香" /> 1、html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "img",constructorNeedsCreateElementF…

MySQL—CRUD—进阶— (一) |ू・ω・` )

文本目录&#xff1a; ❄️一、数据库约束&#xff1a; ☑1、约束类型&#xff1a; 1&#xff09;、NULL 约束&#xff1a; 2&#xff09;、唯一约束&#xff1a; 3&#xff09;、默认约束&#xff1a; 4&#xff09;、主键约束&#xff1a; 5&#xff09;、外键约束&#xff…