Docker - 使用 swarm 部署 services


前言

經過之前一段時間學習與思考,我們已經大概明確了一些感念: Docker image/container,  service and node

簡單來說,swarm允許我們以節點(node)的方式組織集群(cluster);每個節點上面可以部署一個或者多個服務(service);每個服務又可以包括一個或者多個(container)

 

在此,我放上Docker官方網站的結構圖,方便理解。

 

 

 創建網絡

在部署服務之前,我們首先需要創建網絡。Docker 提供了不同的方式供我們創建不同形式的網絡。在這里,我們創建 overlay 模式的網絡

$ docker network create --driver overlay \

  --subnet 10.0.0.1/24 \

  --opt encrypted \

  mynetwork

-- driver 指定網絡方式

-- subset 指定用於網絡的子網, 如果不指定,swarm會自動選擇一個子網,但是根據官網的描述這個自動指定的子網這個可能會引起container通信的問題。(before kelner 3.10)

-- opt 指定網絡安全模式

 

創建網絡完成后,我們可以查看到我們的網絡

$ docker network ls

PS : 在這里貼一下官網對於network的描述,有興趣的童鞋可以看一下

Docker Engine swarm mode natively supports overlay networks, so you can enable container-to-container networks. When you use swarm mode, you don’t need an external key-value store. Features of swarm mode overlay networks include the following:

  • You can attach multiple services to the same network.
  • By default, service discovery assigns a virtual IP address (VIP) and DNS entry to each service in the swarm, making it available by its service name to containers on the same network.
  • You can configure the service to use DNS round-robin instead of a VIP.

In order to use overlay networks in the swarm, you need to have the following ports open between the swarm nodes before you enable swarm mode:

  • Port 7946 TCP/UDP for container network discovery.
  • Port 4789 UDP for the container overlay network.

在指定網絡上添加服務

$ docker service create \

  --name mybusybox \

  --network mynetwork \

  busybox \

  sleep 3000

 

添加一個名稱為mybusybox的service,這個 service 將啟動找到對應的 image (如果沒有會自動下載) 並且啟動 container. 完成后我們可以看到 service 的信息

$ docker service ps mybusybox

 

再添加一個同類型的 service, 命名為tuobusybox, 在這里添加兩個service是為了演示之后的誇 container 相互訪問,實際情況下,應根據我們的業務需求添加 service

 

現在我們再查看network 信息

$docker network inspect mynetwork

這里可以看到,我們的網絡“mynetwork” 下面運行着兩個service

 

容器間通信

到這里為止,我們的 service 以及 container 已經已經創建完成。現在我們來測試下container之間的通信。

啟動一個service 並且進入容器, 我這里是 mybusybox

$ docker exec -it mybusybox.1.cj3y6wgt6rry6pxei9utjufpo /bin/sh

在容器內查看另一個容器, tuobusybox

可以看到,能夠使用DNS查詢到 tuobusybox 服務 (service)

 

在mybusybox container 里面,使用 tasks.SERVICE-NAME 來查看指點 service 中所有 container 的 IP

$ nslookup tasks.tuobusybox

由於我們只啟動了一個container, 所以只返回了一個IP。

 

OK,我們已經完成了在自己的網絡下運行多個服務(容器),並且驗證了容器之間的網絡鏈接 :)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM