Docker swarm 使用服務編排部署lnmp

1、簡介

目的:在Docker Swarm集羣中,使用stack服務編排搭建lnmp來部署WordPressphp

  1. 使用私有倉庫的nginx和php鏡像
  2. mysql使用dockerhup最新鏡像
  3. 使用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)

  

  ⑤完成登入

  

相關文章
相關標籤/搜索