Docker swarm 使用服务编排部署lnmp
一、简介
目的:在Docker Swarm集群中,使用stack服务编排搭建lnmp来部署WordPress
- 使用私有仓库的nginx和php镜像
- mysql使用dockerhup最新镜像
- 使用nfs共享存储做数据持久化,包括nginx配置文件、wordpress网站文件、mysql配置文件和数据
使用nfs volume做数据持久化,可以让所有节点共享数据,这样数据只需要保留一份,方便部署和更新
二、准备
(1)新建nfs存储的目录
# 配置文件目录
mkdir -p /data/conf/{stack_nginx,stack_mysql}
# 数据存放目录
mkdir -p /data/storage/{mysql_data,web_data}
(2)配置nfs
vim /etc/exports /data/conf/stack_nginx 172.16.60.0/24(rw,sync,no_root_squash) /data/conf/stack_mysql 172.16.60.0/24(rw,sync,no_root_squash) /data/storage/web_data 172.16.60.0/24(rw,sync,no_root_squash) /data/storage/mysql_data 172.16.60.0/24(rw,sync,no_root_squash)
(3)重新nfs
systemctl restart nfs
三、部署服务
(1)编写ymal文件
version: '3.3'
services:
nginx:
image: 172.16.60.95:5000/nginx:v1.0.1
ports:
- "8000:80"
networks:
- stack_net
volumes:
- type: volume
source: webdata
target: /usr/local/nginx/html
volume:
nocopy: true
- type: volume
source: nginx_conf
target: /usr/local/nginx/conf/vhosts
volume:
nocopy: true
deploy:
mode: replicated
replicas: 3
resources:
limits:
cpus: '0.2'
memory: 200M
reservations:
cpus: '0.1'
memory: 50M
depends_on:
- php
- mysql
php:
image: 172.16.60.95:5000/php:v1.0.1
networks:
- stack_net
volumes:
- type: volume
source: webdata
target: /usr/local/nginx/html
volume:
nocopy: true
deploy:
mode: replicated
replicas: 3
resources:
limits:
cpus: '0.2'
memory: 200M
reservations:
cpus: '0.1'
memory: 50M
mysql:
image: mysql:latest
networks:
- stack_net
ports:
- "3307:3306"
volumes:
- type: volume
source: mysql_cnf
target: /etc/mysql/conf.d
volume:
nocopy: true
- type: volume
source: dbdata
target: /var/lib/mysql
volume:
nocopy: true
deploy:
resources:
limits:
cpus: '0.5'
memory: 200M
reservations:
cpus: '0.25'
memory: 50M
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: wp123456
networks:
stack_net:
driver: overlay
volumes:
webdata:
driver_opts:
type: "nfs"
o: "addr=172.16.60.95,vers=4,soft,timeo=180,bg,tcp,rw"
device: "172.16.60.95:/data/storage/web_data"
dbdata:
driver_opts:
type: "nfs"
o: "addr=172.16.60.95,vers=4,soft,timeo=180,bg,tcp,rw"
device: "172.16.60.95:/data/storage/mysql_data"
nginx_conf:
driver_opts:
type: "nfs"
o: "addr=172.16.60.95,vers=4,soft,timeo=180,bg,tcp,rw"
device: "172.16.60.95:/data/conf/stack_nginx"
mysql_cnf:
driver_opts:
type: "nfs"
o: "addr=172.16.60.95,vers=4,soft,timeo=180,bg,tcp,rw"
device: "172.16.60.95:/data/conf/stack_mysql"
(2)部署
# docker stack deploy -c service_stack.yml wp Creating service wp_php Creating service wp_mysql Creating service wp_nginx
(3)查看服务
虽然服务名称中加了wp_*,但是在swarm的dns解析中,一样可以识别ymal文件中定义的service名称
# docker service ls pmd1si576gcf wp_mysql replicated 1/3 mysql:latest *:3307->3306/tcp 3f6y5uct3qpc wp_nginx replicated 3/3 172.16.60.95:5000/nginx:v1.0.1 *:8000->80/tcp ut8kphc9pu86 wp_php replicated 3/3 172.16.60.95:5000/php:v1.0.1
[root@manager conf]# docker stack ls NAME SERVICES wp 3
(4)查看数据卷
# 工作节点 [root@node-01 ~]# docker volume ls DRIVER VOLUME NAME local wp_dbdata local wp_mysql_cnf local wp_nginx_conf local wp_webdata
四、部署WordPress
nginx和mysql配置文件和上一篇部署lnmp是一样的
(1)下载wordpress
# 下载WordPress压缩包 wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz # 解压到web文件共享存储的目录或者 数据卷目录下 tar -zxvf wordpress-4.9.4-zh_CN.tar.gz -C /var/lib/docker/volumes/wp_webdata/_data/
(2)WordPress网站设置
# 访问任意节点 http://172.16.60.95:8000/wordpress
①

②

③第一次手动写入

④ 填写信息,设置用户(admin/123456)

⑤完成登入

浙公网安备 33010602011771号