Swarm翻譯為一大群或是密集的東西,在Docker中則是指將多個Docker主機組在一起的單個虛擬或是物理機,可以管理多個跨主機部署的container。Swarm將全部Docker主機組在一起後還是能夠對container使用Docker的命令,但是是經由Swarm執行,並且所有動作會由集群的manager來控制。
Swarm與Kubernetes確實有許多相似之處,皆具有高可用性、可擴展性、Load balancing、自我修復等特性,兩者的比較網路上也是有許多文章就自行查看了。不過可以說的是Swarm是內建在Docker可以說是為Docker而生的,其在部屬的時候能直接使用Dockerfile而不用編譯,並且Swarm能夠直接使用docker-compose的檔案(某些功能可能需要對映做修改像是deploy),在平台的統一性以及使用上的簡易性來說是佔有優勢的。
要創立Swarm可以使用init就會教導你怎麼創建
docker swarm init
那當我們建立之後當然要設置worker以及manager,所以可以使用join加入兩者
docker swarm join-token worker
docker swarm join-token manager
透過我們之前遊玩Docker建立的compose-file,改成用stack命令來建立Swarm。
docker-compose檔案
version: '3.8'
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
執行docker stack deploy來使用compose file建置Swarm
?$ docker stack deploy --compose-file docker-compose.yml
mystack
Creating network mystack_default
Creating service mystack_app
Creating service mystack_mysql
可以看到我們的network以及兩個服務都建立好了,在Dashboard裡面則是長這樣
這時候就可以訪問localhost:3000來運行我們的APP
Swarm的node可以有幾種命令來操作,首先是查看方式
?$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ue096u6tpyy4gnidykdnn884x * docker-desktop Ready Active Leader 19.03.12
通常node ls會列出多個node的資訊,因為我們這個Swarm只有一個節點所以才顯示一個
如果要檢查單個節點可以使用docker node inspect <NODE-ID>
,輸出會是JSON格式但是會有點亂,因此可以再用--pretty
flag來整理成條列式的顯示方式。
?$ docker node inspect self --pretty
ID: ue096u6tpyy4gnidykdnn884x
Hostname: docker-desktop
Joined at: 2020-09-28 14:39:45.472015233 +0000 utc
Status:
State: Ready
Availability: Active
Address: 192.168.65.3
Manager Status:
Raft Status: Reachable
Leader: Yes
Platform:
Operating System: linux
Architecture: x86_64
Resources:
CPUs: 2
Memory: 1.944GiB
Plugins:
Log: awslogs, fluentd, gcplogs, gelf, journald, json-file, local, logentries, splunk, syslog
Network: bridge, host, ipvlan, macvlan, null, overlay
Volume: local
Engine Version: 19.03.12
---(略)
今天就先學到這邊了,Swarm感覺還有很多可以使用的,不過目前只知道可以deploy compose file而已
參考文獻:
docker官方文件