Docker Swarm入門教程

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

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


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

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

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

iii. Swarm提供了高可用機制,比如說,我們可以通過etcdConsulZooKeeper來將現有業務轉交給備用的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- https://get.docker.com/ | 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帶來的便捷和高效!

 

安裝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帶來的便捷和高效!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章