Docker swarm如何通過(guò)docker-compose部署應(yīng)用
1.初始化swarm
默認(rèn)情況下,Docker作為一個(gè)隔離的單節(jié)點(diǎn)工作。
所有容器僅部署在引擎上。
群模式將它變成了一個(gè)多主機(jī)集群感知引擎。
為了使用秘密功能,Docker必須處于“群模式”。
這是通過(guò)
$ 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.
在第二臺(tái)主機(jī)上執(zhí)行下面的命令,將它作為一個(gè)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,可以定義一個(gè)Docker部署以及生產(chǎn)細(xì)節(jié)。
這為管理可以部署到集群模式集群中的應(yīng)用程序部署提供了一個(gè)中央位置。
一個(gè)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:
該文件已擴(kuò)展到利用群集部署選項(xiàng)。
第一個(gè)配置選項(xiàng)使用depends_on。這意味著Redis必須在網(wǎng)絡(luò)之前部署,并允許我們控制服務(wù)啟動(dòng)的順序。
下一個(gè)配置選項(xiàng)定義應(yīng)該如何使用新的部署選項(xiàng)部署應(yīng)用程序。
首先,mode: replicated和replicas: 2決定服務(wù)應(yīng)該啟動(dòng)多少個(gè)replicas。
其次,定義資源。限制是應(yīng)用程序不能超過(guò)的硬限制,預(yù)留是Docker Swarm指示應(yīng)用程序需要的資源的指南。
第三,restart_policy指出進(jìn)程崩潰時(shí)應(yīng)該如何操作。
第四,update_config定義如何應(yīng)用和推出更新。
最后,位置允許我們添加約束,以確定服務(wù)應(yīng)該部署在哪里。
更多docker-compose file文件配置細(xì)節(jié)請(qǐng)參考
3.部署服務(wù)
Docker Compose文件被稱為Docker Compose Stack。
堆疊可以通過(guò)CLI部署到Swarm。
docker stack命令用于通過(guò)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
可以通過(guò)以下方式發(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ù),那么這將是不同的。
每個(gè)服務(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式
這篇文章主要介紹了物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
docker容器增加端口映射全過(guò)程(修改配置文件方式)
文章詳細(xì)描述了如何通過(guò)修改Docker容器的配置文件來(lái)增加端口映射,以解決已經(jīng)運(yùn)行的容器需要增加端口映射的問(wèn)題,以MySQL容器為例進(jìn)行了具體操作步驟的說(shuō)明2024-11-11
Docker添加tomcat容器無(wú)法訪問(wèn)首頁(yè)解決方案
這篇文章主要介紹了Docker添加tomcat容器無(wú)法訪問(wèn)首頁(yè)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
docker-compose安裝Jenkins的實(shí)踐筆記
jenkins是一個(gè)比較強(qiáng)大的自動(dòng)構(gòu)建工具, Jenkins是開(kāi)源CI&CD軟件領(lǐng)導(dǎo)者,提供超過(guò)1000個(gè)插件來(lái)支持構(gòu)建、部署、自動(dòng)化,本文給大家介紹docker-compose安裝Jenkins的實(shí)踐筆記,感興趣的朋友一起看看吧2021-09-09
使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn)
本文主要介紹了使用Jenkins+docker打包部署后端服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn)(圖文)
Vaultwarden是一個(gè)開(kāi)源的密碼管理器,它提供了類似于Bitwarden的功能,允許用戶安全地存儲(chǔ)和管理密碼、敏感數(shù)據(jù)和身份信息,本文主要介紹了docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10
使用docker搭建嵌入式Linux開(kāi)發(fā)環(huán)境
本文主要介紹了使用docker搭建嵌入式Linux開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-08-08

