一、簡介
目的:在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)

⑤完成登入

