docker swarm搭建mysql数据库服务

因为工作需要搭建演示环境,使用docker swarm部署了一次mysql,特此整理,以备参考。

首先我们需要编写docker swarm启动使用的yml文件,指明所用镜像,版本以及一些配置。

其中因为使用了hostnet网络模式,容器将不会虚拟出IP/端口,而是使用宿主机的IP和端口。 比如你配置了使用3306端口,就是直接使用服务器的3306端口。

容器启动后,便可以使用配置文件中的初始密码连接访问。

示例

yaml 复制代码
version: '3.4'
services:
  mysql:
    volumes:
      - /app/mysql/conf:/etc/mysql
      - /app/mysql/data:/var/lib/mysql
      - /app/mysql/logs:/var/log/mysql
      - /app/mysql/mysql-files:/var/lib/mysql-files
    image: mysql:8.0.25
    networks:
       - hostnet
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=password
      - SQL_MODE=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
        # 指定启动节点
#          - node.labels.node==manager
           - node.role==manager
    # 赋予容器所有内核权限       
    cap_add:
      - ALL
    logging: 
      driver: "json-file"
      options: 
        max-size: "1m"

#networks:
#  overlay:

networks:
  hostnet:
    external:
      name: host

其中需要根据配置,建立对应目录与配置文件,docker会将你服务器的目录与镜像内的目录相映射。

javascript 复制代码
    volumes:
      - /app/mysql/conf:/etc/mysql
      - /app/mysql/data:/var/lib/mysql
      - /app/mysql/logs:/var/log/mysql
      - /app/mysql/mysql-files:/var/lib/mysql-files

前半边为你服务器上的目录,后半部分为对应镜像内的目录, 前半边的目录需要你先手动创建mkdir出来,否则容器无法启动

目录用处 /etc/mysql 配置 /var/lib/mysql 数据文件 /var/log/mysql 日志 /var/lib/mysql-files 导入导出

其中可以在配置目录/etc/mysql下,新加my.cnf进行相关配置的调整 数据文件目录/var/lib/mysql保证数据不会随容器关闭而丢失,也便于迁移,其他目录不再具体说明,

my.cnf 示例如下

ini 复制代码
[mysqld]
port=6446
#skip-grant-tables
skip-name-resolve

#此参数可以控制服务端口监听在哪个网卡上
#bind_address=192.168.22.22
#bind_address=127.0.0.1
#bind-address = 0.0.0.0

default-time-zone='+08:00'

collation_server=utf8mb4_general_ci
character_set_server=utf8mb4
init-connect=SET NAMES utf8mb4
default-time-zone='+08:00'
max_connections=3000

#binlog保留多长时间
binlog_expire_logs_seconds=2592000

#函数验证规则
log_bin_trust_function_creators=1

[client]
default-character-set=utf8mb4 

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log

sql_mode="ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

容器启动 docker stack deploy -c /app/mysql/mysql-docker.yml mysql

容器删除 docker stack rm mysql

容器日志 docker service logs -f mysql_mysql

启动节点查看 docker service ps mysql_mysql

相关推荐
Web3&Basketball26 分钟前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
bluebonnet271 小时前
【docker】使用regctl免安装docker下载镜像
运维·docker·容器
Java开发追求者18 小时前
windows快速安装docker
windows·docker·安装·1024程序员节
骑着蜗牛撵大象32720 小时前
飞牛fnOS部署Damselfly:Compose编排、照片目录与7100固定访问
java·docker·rpc·dubbo·fnos·照片管理·damselfly
一掬净土21 小时前
kubelet 报错如下:docker does not support reopening container log files
docker·云原生·kubelet·logfiles
TTATTC1 天前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
docker·开源
骑着蜗牛撵大象3271 天前
N1 小盒子撑起 AI 接口中转层:New-API 接管本地 Ollama,用 Token 分发模型能力
docker·llama·1024程序员节·api网关·飞牛nas·new-api
艸肅1 天前
Docker 国内镜像源配置
linux·ubuntu·docker·1024程序员节
java_logo1 天前
Docker 部署 Bililive-go:轻松搭建多平台直播录制
docker·1024程序员节·直播录制·轩辕镜像·bililive-go·chigusa/bililive-go
A-刘晨阳1 天前
【云原生】nerdctl 部署及使用指南
运维·docker·kubernetes·云计算·1024程序员节·nerdctl