Docker之路-容器編排"swarm+compose"


創建服務

我們知道使用 docker-compose.yml可以來一次配置、啟動多個容器,在 Swarm 集群中也可以使用 compose 文件 (docker-compose.yml) 來配置、啟動多個服務。

使用 docker service create 一次只能部署一個服務,使用 docker-compose.yml 我們可以一次啟動多個關聯的服務。

我們以在 Swarm 集群中部署 WordPress 為例進行說明(官方例子):

# docker-compose.yml
version: "3"

services:
  wordpress:
    image: wordpress
    ports:
      - 80:80
    networks:
      - overlay
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    deploy:
      mode: replicated
      replicas: 3

  db:
    image: mysql
    networks:
       - overlay
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    deploy:
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

volumes:
  db-data:
networks:
  overlay:

在該compose文件中定義了3個服務,一個是wordpress服務,一個是worldpress依賴的數據庫服務,另外一個是提供一個可視化頁面的服務,通過該服務能夠從瀏覽器中很直觀的查看集群中各個服務的運行節點。

swarm中管理管理通過compose啟動的服務,需要使用docker stack命令。

部署服務

上面我們編寫好了docker-compose.yml文件,文件中定義了我們要啟動的服務,並且定義了各個服務之前的依賴關系,我們邊可以通過該文件來啟動一組服務了。

部署服務使用 docker stack deploy,其中 -c 參數指定 compose 文件名,最后跟上服務名(自定義,這里為worldpress)。

[root@node1 /opt/mycontainer/wordpress]# docker stack deploy -c docker-compose.yml wordpress
Creating network wordpress_overlay
Creating network wordpress_default
Creating service wordpress_worldpress
Creating service wordpress_db
Creating service wordpress_visualizer

從上面的執行結果可以看到,所有的服務都以"worldpress_x x x"的形式存在,這樣是為了避免多個服務組之間的服務名沖突。

查看剛才啟動的服務,可以觀察到服務名稱叫“wordpress”,服務數量有3個:

[root@node1 /opt/mycontainer/wordpress]# docker stack  ls
NAME                SERVICES            ORCHESTRATOR
wordpress           3                   Swarm

查看每個服務的信息:

[root@node1 /opt/mycontainer/wordpress]# docker stack services wordpress
ID                  NAME                   MODE                REPLICAS            IMAGE                             PORTS
3c8tgiwvncn1        wordpress_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
vgh0g9aoxwgk        wordpress_db           replicated          1/1                 mysql:latest
wu96zajgvs1v        wordpress_worldpress   replicated          0/3                 worldpress:latest                 *:81->80/tcp

刪除服務

如果要移除服務,那么請使用docker stack down,但是該命令不會移除服務所使用的 數據卷,如果你想移除數據卷請使用 docker volume rm

[root@node1 /opt/mycontainer/wordpress]# docker stack down wordpress
Removing service wordpress_db
Removing service wordpress_visualizer
Removing service wordpress_worldpress
Removing network wordpress_overlay
Removing network wordpress_default
[root@node1 /opt/mycontainer/wordpress]# ls -1 /var/lib/docker/volumes/
...
metadata.db
mydata
registry_registry-data
wordpress_db_data 	# 數據卷還在
[root@node1 /opt/mycontainer/wordpress]# docker volume rm wordpress_db_data
wordpress_db_data
# 數據卷被刪除了
[root@node1 /opt/mycontainer/wordpress]# ls -1 /var/lib/docker/volumes/
...
metadata.db
mydata
registry_registry-data


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM