Docker Swarm入門教程

精靈雲發表於2016-04-26

本文來源:Ghostcloud原創


    迄今為止,Docker Swarm問世已有一年的時間。Docker Swarm的首次隆重亮相要追溯到2014年,Docker官方在當年12月的DockerConEU峰會上正式推出了Docker Swarm。Docker Swarm不僅是一種用於管理Docker及Docker Machine的叢集管理工具,同時也是一種CLI工具,可用來控制Docker主機。Docker官方意在透過Docker Swarm提供一套全面的、能夠覆蓋容器執行的各個環節的整合式解決方案,並突破自身的現有定位,實現從單純提供Docker引擎到產品多樣化的轉變。

    對於Docker而言,Docker Swarm可謂是原生的叢集管理工具。Swarm呼叫的是Docker API標準介面,我們只需透過常規的docker執行命令來啟動容器,後續的工作就不用管了,Swarm會自動選擇適合的主機來執行相關容器。也就是說,像Compose和bespoke scripts等同樣呼叫Docker API的管理工具可以在不經任何改動的情況下,直接透過Swarm來實現對叢集的管理,不再像以前一樣只能在單一主機上部署容器。


    如下文所示,Swarm的基礎架構非常簡單:

i. 在每臺主機上都部署一個Swarm agent,並在一臺主機上安裝Swarm manager(在小型叢集上跑測試的時候,安裝Swarm manager的主機上也可以同時裝agent)。

ii. 所有主機上的容器都由manager來編排和排程。

iii. Swarm提供了高可用機制,比如說,我們可以透過etcd、Consul或ZooKeeper來將現有業務轉交給備用的manager,從而實現故障轉移。

    Swarm提供了若干種不同的機制來查詢主機並將其加入到某個叢集中,業內管這一功能叫Swarm發現服務。Swarm預設的是令牌查詢模式,在這種模式下,每臺主機的IP地址都以列表形式儲存在Docker Hub上。


    下面我們進入實戰環節,作為一個入門教程,我們先從Docker Swarm的部署講起。筆者只花了幾分鐘時間,就在自己的谷歌雲引擎上建立了4個叢集節點,其中包括一個Swarm Master節點,兩個Agent節點和一個Swarm Manager節點,後者用於管理整個叢集。執行環境如下:



建立Swarm Master節點:

   首先我們要在Docker Swarm叢集的節點上安裝Docker 1.9.1,可參照下文的命令列將所有主機上的Docker升級到最新版本:

wget -qO- | sh
[注意這裡是大寫字母O,不是數字0]

Processing triggers for systemd (225-1ubuntu9) …   

Processing triggers for man-db (2.7.4-1) …

Setting up docker-engine (1.9.1-0~wily) …
Installing new version of config file /etc/bash_completion.d/docker …
Installing new version of config file /etc/init.d/docker …
Installing new version of config file /etc/init/docker.conf …
Processing triggers for ureadahead (0.100.0-19) …
Processing triggers for systemd (225-1ubuntu9) …
+ sh -c docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:20:08 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:20:08 UTC 2015
OS/Arch: linux/amd64
如果要以非root使用者的角色使用Docker,則需用以下命令列將使用者新增到“docker”使用者組:
sudo usermod -aG docker [要新增的使用者]
注意,執行該命令列之後,要退出重新登入才能生效。

啟動Docker Daemon

root@dockerhost-1 ~]# docker -H tcp://0.0.0.0:2375 -d &
[1] 11516
[root@dockerhost-1 ~]# Warning: ‘-d’ is deprecated, it will be removed soon. See usage.
WARN[0000] please use ‘docker daemon’ instead.
WARN[0000] /!\ DON’T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON’T KNOW WHAT YOU’RE DOING /!\
INFO[0000] Listening for HTTP on tcp (0.0.0.0:2375)
ERRO[0000] WARNING: No –storage-opt dm.thinpooldev specified, using loopback; this configuration is strongly discouraged for production use
INFO[0000] [graphdriver] using prior storage driver “devicemapper”
INFO[0000] Option DefaultDriver: bridge
INFO[0000] Option DefaultNetwork: bridge
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: modprobe: WARNING: Module br_netfilter not found.
, error: exit status 1
INFO[0000] Firewalld running: true
INFO[0000] Loading containers: start.
INFO[0000] Loading containers: done.
INFO[0000] Daemon has completed initialization
INFO[0000] Docker daemon commit=a01dc02/1.8.2 execdriver=native-0.2 graphdriver=dev
icemapper version=1.8.2-el7.centos
[root@dockerhost-1 ~]#


安裝Docker Swarm

root@docker-1:~# docker run –rm swarm create
7733f838d176809cb2f2d24eb34ce78c

上面的命令列會建立一個token ID,整個Docker Swarm叢集的配置都是圍繞這個ID進行的。


安裝Swarm Agent Node 1:[10.240.0.3]

    首先要確定Agent節點1上已經安裝了1.9.x版本的Docker。另外說一句,在Agent節點上啟動Docker daemon的步驟跟在master節點上的啟動步驟是一樣的:

#docker run -d swarm join –addr=10.240.0.3:2375 token://7733f838d176809cb2f2d24eb34ce78c

560e58a76ef235c8d74fffb2c680149111b8bbe687f1e0e164cd7c05dad59f33


安裝Swarm Manager Node[10.240.0.5]

root@docker-3:~# docker run -d -p 7000:2375 swarm manage token://7733f838d176809cb2f2d24eb34ce78c
b26a2bbb336e26e0cd6ac5d61b90d7a9d9f74a2d072f573b6890bd9b0f6e470f

注意此處的7000swarm manager的埠號,大家可以設定自己的埠號。


下面可以看到swarm叢集的詳細資訊:

root@docker-3:~# docker -H tcp://10.240.0.5:7000 info
Containers: 0
Images: 2
Storage Driver:
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 1
docker-1: 10.240.0.2:2375
+ Status: Healthy
+ Containers: 0
+ Reserved CPUs: 0 / 1
+ Reserved Memory: 0 B / 3.794 GiB
+ Labels: executiondriver=native-0.2, kernelversion=4.2.0-18-generic, operatingsystem=Ubuntu 15.10, storagedriver
=devicemapper
Execution Driver:
Kernel Version:
Operating System:
CPUs: 1
Total Memory: 3.794 GiB
Name: b26a2bbb336e
ID:
Http Proxy:
Https Proxy:
No Proxy:

因為我們上面只新增了一個叢集節點,所以這裡顯示的swarm叢集中只有節點1


安裝Swarm Agent Node 2 :[10.240.0.4]

root@docker-2:~# docker run -d swarm join –addr=10.240.0.4:2375 token://7733f838d176809cb2f2d24eb34ce78c
fe5b81d57f6394db655d15ce097f8ca537d6c74c2de6a477ac38544a7db0a5d8
root@docker-2:~#


安裝完畢,在Swarm Manager節點上執行下面的命令列即可檢視swarm叢集中的所有節點:
#docker run –rm swarm list token://7733f838d176809cb2f2d24eb34ce78c

10.240.0.4:2375
10.240.0.2:2375

OK!大功告成!多節點Swarm叢集建立完畢!


下面我們來建立一個容器,並透過Swarm Manager來執行該容器:

sudo docker -H tcp://10.0.1.61:5001 run -dt –name swarm-test nginx /bin/sh

root@docker-1:~# docker images
INFO[0999] GET /v1.18/images/json
INFO[0999] +job images()
INFO[0999] -job images() = OK (0)
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 813e3731b203 4 days ago 133.8 MB
centos latest 14dab3d40372 5 days ago 194.7 MB
swarm latest e9ff33e7e5b9 11 days ago 17.15 MB
ajeetraina/dell-syscfg v1.0 d121b6e6dba4 12 weeks ago 1.449 GB
tduzan/docker-omsa latest ffcbdafb4aa6 16 months ago 806.4 MB
root@docker-1:~#


下面的命令列可以檢視各個swarm agent主機上執行的容器:

root@docker-3:~# docker -H tcp://10.240.0.5:7100 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

NAMES
d0ee6dad4b39 nginx:latest “/bin/sh” 58 minutes ago Up 58 minutes 80/tcp,
443/tcp docker-1/swarm-test
cd9bc8c96e45 ajeetraina/dell-syscfg:v1.0 “/bin/bash” About an hour ago Up About an hour
docker-1/jolly_curie
d0bcc8da090e bad926a6fb50:latest “/bin/bash” About an hour ago Up About an hour
docker-2/hopeful_tesla
root@docker-3:~#

    綜上所述,使用者只需透過Swarm Manager節點便可建立容器,而且操作非常簡便。我們不用去管容器要執行在哪個節點上,Swarm叢集具有高度智慧化的特點,可自動分配適當的資源以供容器執行。

    透過以上教程,大家可以對Docker Swarm的安裝使用有個初步的印象,希望本篇教程能夠幫助到大家。最後祝大家都能體驗到Swarm帶來的便捷和高效!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31126106/viewspace-2088580/,如需轉載,請註明出處,否則將追究法律責任。

相關文章