在所有需要部署 MySQL 服务的节点中添加元数据(此处仅部署一个 MySQL 服务,因此只需要向集群中的一个节点添加元数据即可)
docker node update --label-add app=db 节点ID或HOSTNAME
示例:
docker node update --label-add app=db worker1
vim compose.yaml
使用 compose 内部定义的 network 时:
version: "3.9"
services:
mysql_5:
image: mysql:5.7.42
container_name: mysql_5
hostname: mysql_5
restart: always
networks:
- db_network
ports:
- "3306:3306"
volumes:
- /etc/localtime:/etc/localtime:ro
- mysql_5_db:/var/lib/mysql
configs:
- source: mysql_5_conf
target: /etc/mysql/conf.d/my.cnf
mode: 0444
secrets:
- mysql_5_root_key
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_5_root_key
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.labels.app==db
volumes:
mysql_5_db:
configs:
mysql_5_conf:
file: mysql_5_my.cnf
secrets:
mysql_5_root_key:
file: mysql_5_root.key
networks:
db_network:
name: db_network
driver: overlay
driver_opts:
encrypted: 'true'
ipam:
driver: default
config:
- subnet: 172.21.0.1/24
使用已存在的 network 时,将上述 yaml 文件的 networks
部分替换为如下内容即可:
networks:
db_network:
external: true
name: db_network
注:此时需要确保已经创建了覆盖类型的 Docker Network,可通过如下命令创建:
docker network create -d overlay --opt encrypted --subnet 网段 网络名称
示例:
docker network create -d overlay --opt encrypted:'true' --subnet 172.21.0.1/24 db_network
Yaml 文件说明:
ports
中将 mysql 容器的 3306 端口映射至主机的 3306 端口,实际使用时可按需修改,如 mysql 服务无需从集群外部访问,则可不映射vim mysql_5_my.cnf
[mysqld]
max_connections = 1000
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
vim mysql_5_root.key
123456
docker stack deploy -c yaml文件 stack名称
示例:
docker stack deploy -c compose.yaml mysql_5
docker stack ls
docker stack services stack名称
示例:
docker stack services mysql_5
docker stack ps stack名称
示例:
docker stack ps mysql_5
docker stack rm stack名称
示例:
docker stack rm mysql_5