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