本文內容來自於互聯網
Swarm簡介:
Swarm是Docker官方提供的一款集羣管理工具,其主要作用是把若干臺Docker主機抽象爲一個整體,並且通過一個入口統一管理這些Docker主機上的各種Docker資源。Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些。
Swarm的基本架構如下圖所示
這個圖作爲一個整體實際上都處於一個所謂的集羣中,它可能對應了一到多臺的實際服務器。每臺服務器上都裝有Docker並且開啓了基於HTTP的DockerAPI。這個集羣中有一個SwarmManager的管理者,用來管理集羣中的容器資源。管理者的管理對象不是服務器層面而是集羣層面的,也就是說通過Manager,我們只能籠統地向集羣發出指令而不能具體到某臺具體的服務器上要幹什麼(這也是Swarm的根本所在)。至於具體的管理實現方式,Manager向外暴露了一個HTTP接口,外部用戶通過這個HTTP接口來實現對集羣的管理。對於稍微大一點的集羣,最好是拿出一臺實際的服務器作爲專門的管理者,作爲學習而言,也可以把管理者和被管理者放在一臺服務器上。
下面就來講一下如何簡單地通過swarm搭建一個集羣。
安裝docker
既然是docker容器編排,必定要安裝docker啦(僅需兩句命令即可安裝)。
yum install epel-release -y yum install docker
配置主節點服務器
主服務器負責調度容器分配那些啦,配置很簡單,請看下面的命令
ifconfig docker swarm init --advertise-addr
爲什麼要內網ip呢?這種服務公開到外網,被攻擊了咋辦。執行了這句命令之後會輸出一句命令,這句命令就是在其它服務器執行,說明要加入這個集羣。
配置從服務器
只需要執行上面那句命令(下面僅僅是例子)
docker swarm join --token :2377
鏡像服務器配置
請注意,請把所有用於容器編排的服務器的docker鏡像源指向同一個鏡像源。因爲你沒理由更新鏡像都手工在每一個服務器更新吧,所以請自己建立私有鏡像倉庫,反正也特簡單。
docker run -d -p :5000:5000 -v /root/my_registry:/tmp/registry registry
還是那一句話,用內網ip,真心不敢輕易使用外網。上面命令已經部署好私有倉庫服務,但是這種情況下,提交鏡像會報錯,還需要修改一個文件。
vim /etc/docker/daemon.json
添加下面的內容(注意替換):
{ "insecure-registries":[":5000"] }
重啓docker服務即可。
注意:所有需要從該私有倉庫下載鏡像的服務器,也需要把這段內容複製過去,ip就是私有倉庫ip。
往私有鏡像倉庫提交鏡像
我們簡單說一下命令即可,不懂可以問我。
docker build --tag= . docker tag :5000/ docker push :5000/
容器編排使用
創建服務(我們把每一個應用都視爲一個服務,每個服務下有若干個容器組成)
docker service create --replicas 2 --name app_b -p 33333:80 :5000/web_app_a /var/webApp
--replicas是說明一共要啓動多少個容器
--name是爲這個服務起一個名字
-p是端口映射,這是一個神奇的東西,以我們的例子爲例,每一臺服務器33333端口都會隨機代理到我們服務下的一個容器,竟然連負載均衡都處理好了,完美。
:5000/web_app_a 這個只是鏡像名字
/var/webApp這個只是我寫的東西的啓動命令而已
查看服務的容器分配情況
docker service ps
刪除一個服務
docker service rm
4. 調整服務的容器個數
docker service scale =
5. 更新服務所使用的鏡像
docker service update --image
6. 更新服務的內存限制
docker service update --reserve-memory
7. 查看創建了哪些服務
docker service ls
8. 查看服務器節點情況
docker node ls