5.堆(Stack)

A stack is a group of interrelated services that share dependencies, and can be orchestrated and scaled together. A single stack is capable of defining and coordinating the functionality of an entire application (though very complex applications may want to use multiple stacks).
Some good news is, you have technically been working with stacks since part 3, when you created a Compose file and used docker stack deploy. But that was a single service stack running on a single host, which is not usually what takes place in production. Here, you will take what you’ve learned, make multiple services relate to each other, and run them on multiple machines.

堆是一組共享依賴相互關聯的服務,可以被一起部署、擴展。一個單獨的stack有能力定義和協調整個應用的功能。(非常復雜的程序可能會使用多個stack)
好消息是我們已經從第3部分開始用stack工作了。只是之前是單臺機器上運行的單一服務,生產環境通常不會是這樣。下面運用之前學到的,讓多個服務關聯到一起,并且運行在多臺機器上。

1 發布多個service
1.1 修改docker-compose.yml文件

version: "3"
services:
  web:
    image: gaojingyuan/testrepo:v1
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

1.2 運行

先登錄 
docker login
再執行 
docker stack deploy -c docker-compose.yml getstartedlab

1.3 訪問visualizer


2 持久化數據

2.1 在docker-compose.yml中加入redis配置

  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - /home/docker/data:/data
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes
    networks:
      - webnet

redis在docker庫里有官方鏡像,授權了一個簡單的名字redis
其他默認軟件參照
https://docs.docker.com/samples/

2.2 配置redis

a.redis總是再管理機上運行,使用同一個文件系統

b.管理機需要創建/data文件夾

docker-machine ssh myvm1 "mkdir ./data"

3 運行

3.1 再次執行

docker stack deploy -c docker-compose.yml getstartedlab
控制臺輸出

Updating service getstartedlab_visualizer (id: kxnda4km2x5cvyyt7ylh1nqmi)

Creating service getstartedlab_redis

Updating service getstartedlab_web (id: xs960tu2fgrnzjcpbrjt8ipt4)

3.2 查看是否有redis的service

docker service ls 
控制臺輸出

ID NAME MODE REPLICAS IMAGE PORTS

zgxdz8dwhkhc getstartedlab_redis replicated 1/1 redis:latest *:6379->6379/tcp

kxnda4km2x5c getstartedlab_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp

xs960tu2fgrn getstartedlab_web replicated 5/5 gaojingyuan/testrepo:v1 *:80->80/tcp

3.3 訪問部署的services



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容