Docker swarm如何通過docker-compose部署應(yīng)用
1.初始化swarm
默認(rèn)情況下,Docker作為一個隔離的單節(jié)點工作。
所有容器僅部署在引擎上。
群模式將它變成了一個多主機集群感知引擎。
為了使用秘密功能,Docker必須處于“群模式”。
這是通過
$ docker swarm init Swarm initialized: current node (ean4r3wx8dutbj2hlkp4lsfu0) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2t5z3yzsmq4xlhilsuh04ltiprnqt1h1cv8gmmaq6eip3day99-advgpojck21b1hlh3v6vgpncq 172.17.0.86:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
在第二臺主機上執(zhí)行下面的命令,將它作為一個worker添加到集群中。
$ token=$(ssh -o StrictHostKeyChecking=no 172.17.0.86 "docker swarm join-token -q worker") && docker swarm join 172.17.0.86:2377 --token $token Warning: Permanently added '172.17.0.86' (ECDSA) to the list of known hosts. This node joined a swarm as a worker.
2.創(chuàng)建 Docker Compose 文件
使用Docker Compose v3
,可以定義一個Docker部署以及生產(chǎn)細(xì)節(jié)。
這為管理可以部署到集群模式集群中的應(yīng)用程序部署提供了一個中央位置。
一個Docker Compose文件已經(jīng)創(chuàng)建,它定義了使用web前端部署Redis服務(wù)器。
使用以下命令查看文件.
$ cat docker-compose.yml version: "3" services: redis: image: redis:alpine volumes: - db-data:/data networks: appnet1: aliases: - db deploy: placement: constraints: [node.role == manager] web: image: katacoda/redis-node-docker-example networks: - appnet1 depends_on: - redis deploy: mode: replicated replicas: 2 labels: [APP=WEB] resources: limits: cpus: '0.25' memory: 512M reservations: cpus: '0.25' memory: 256M restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s update_config: parallelism: 1 delay: 10s failure_action: continue monitor: 60s max_failure_ratio: 0.3 placement: constraints: [node.role == worker] networks: appnet1:
該文件已擴展到利用群集部署選項。
第一個配置選項使用depends_on
。這意味著Redis必須在網(wǎng)絡(luò)之前部署,并允許我們控制服務(wù)啟動的順序。
下一個配置選項定義應(yīng)該如何使用新的部署選項部署應(yīng)用程序。
首先,mode: replicated
和replicas: 2
決定服務(wù)應(yīng)該啟動多少個replicas。
其次,定義資源。限制是應(yīng)用程序不能超過的硬限制,預(yù)留是Docker Swarm指示應(yīng)用程序需要的資源的指南。
第三,restart_policy
指出進(jìn)程崩潰時應(yīng)該如何操作。
第四,update_config
定義如何應(yīng)用和推出更新。
最后,位置允許我們添加約束,以確定服務(wù)應(yīng)該部署在哪里。
更多docker-compose file文件配置細(xì)節(jié)請參考
3.部署服務(wù)
Docker Compose文件被稱為Docker Compose Stack
。
堆疊可以通過CLI部署到Swarm。
docker stack
命令用于通過Swarm部署docker Compose stack
。
在本例中,它將以myapp作為服務(wù)的前綴。
$ docker stack deploy --compose-file docker-compose.yml myapp Creating network myapp_appnet1
一旦部署完畢,就可以使用CLI檢查狀態(tài)。
$ docker stack ls NAME SERVICES ORCHESTRATOR myapp 2 Swarm
可以通過以下方式發(fā)現(xiàn)內(nèi)部服務(wù)的詳細(xì)信息
$ docker stack services myapp ID NAME MODE REPLICAS IMAGE PORTS l8c8oztncboc myapp_web replicated 2/2 katacoda/redis-node-docker-example:latest
注意,該命令指示服務(wù)的Desired / Running
狀態(tài)。
如果不能部署服務(wù),那么這將是不同的。
每個服務(wù)容器的詳細(xì)信息可以使用
$ docker stack ps myapp ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS x90dytk7svj7 myapp_web.1 katacoda/redis-node-docker-example:latest host02 Running Running 3 minutes ago 92a3t08318ne myapp_redis.1 redis:alpine host01 Running Running 3 minutes ago ikmrz4pufzyd myapp_web.2 katacoda/redis-node-docker-example:latest host02 Running Running 3 minutes ago
所有這些信息仍然可以被發(fā)現(xiàn)使用
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 21bbc04a9e8d redis:alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 6379/tcp myapp_redis.1.92a3t08318neq5g5sd1akrwzo
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker?swarm快速部署redis分布式集群的詳細(xì)過程
這篇文章主要介紹了docker?swarm快速部署redis分布式集群,只需要通過docker-compose.yml文件和一個啟動命令就完成redis分布式部署的方式,讓其分別部署在不同機器上,并實現(xiàn)集群搭建,需要的朋友可以參考下2022-10-10