1、簡介
目的:在Docker Swarm集羣中,使用stack服務編排搭建lnmp來部署WordPressphp
- 使用私有倉庫的nginx和php鏡像
- mysql使用dockerhup最新鏡像
- 使用nfs共享存儲作數據持久化,包括nginx配置文件、wordpress網站文件、mysql配置文件和數據
使用nfs volume作數據持久化,能夠讓全部節點共享數據,這樣數據只須要保留一份,方便部署和更新html
2、準備
(1)新建nfs存儲的目錄 node
# 配置文件目錄 mkdir -p /data/conf/{stack_nginx,stack_mysql} # 數據存放目錄 mkdir -p /data/storage/{mysql_data,web_data}
(2)配置nfspython
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)從新nfsmysql
systemctl restart nfs
3、部署服務
(1)編寫ymal文件nginx
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)部署web
# docker stack deploy -c service_stack.yml wp Creating service wp_php Creating service wp_mysql Creating service wp_nginx
(3)查看服務sql
雖然服務名稱中加了wp_*,可是在swarm的dns解析中,同樣能夠識別ymal文件中定義的service名稱docker
# 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)查看數據卷vim
# 工做節點 [root@node-01 ~]# docker volume ls DRIVER VOLUME NAME local wp_dbdata local wp_mysql_cnf local wp_nginx_conf local wp_webdata
4、部署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)
⑤完成登入