iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
自我挑戰組

自我學習Docker的30天奇幻旅程系列 第 17

Day17 Docker Swarm學習

Swarm翻譯為一大群或是密集的東西,在Docker中則是指將多個Docker主機組在一起的單個虛擬或是物理機,可以管理多個跨主機部署的container。Swarm將全部Docker主機組在一起後還是能夠對container使用Docker的命令,但是是經由Swarm執行,並且所有動作會由集群的manager來控制。

Swarm與Kubernetes確實有許多相似之處,皆具有高可用性可擴展性Load balancing自我修復等特性,兩者的比較網路上也是有許多文章就自行查看了。不過可以說的是Swarm是內建在Docker可以說是為Docker而生的,其在部屬的時候能直接使用Dockerfile而不用編譯,並且Swarm能夠直接使用docker-compose的檔案(某些功能可能需要對映做修改像是deploy),在平台的統一性以及使用上的簡易性來說是佔有優勢的。

簡單創建Swarm指令

要創立Swarm可以使用init就會教導你怎麼創建

docker swarm init

那當我們建立之後當然要設置worker以及manager,所以可以使用join加入兩者

  • worker
docker swarm join-token worker
  • manager
docker swarm join-token manager

Play with Swarm

透過我們之前遊玩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

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官方文件


上一篇
Day16 Docker Compose file指令大集(三)
下一篇
Day18 Docker Swarm實作
系列文
自我學習Docker的30天奇幻旅程24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言