1 Docker Swarm極速部署(5分鐘極速部署)

一、介紹系統環境

1)伺服器環境

節點名稱IP作業系統核心版本

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

注意

:部署這些編排工具的時候伺服器數量不定,1臺伺服器也行,所以讀者可以自由增減伺服器。

2)前提條件

Docker

版本1。18+

叢集節點之間保證

TCP 2377

TCP/UDP 7946

UDP 4789

埠通訊

注意

Docker

版本最好大於

1。12

,因為

1。12

版本之後

Docker Swarm

才正式歸入

Docker

內建命令內,另外,需要保證各個節點之間的可連通性,如果是外網叢集的話,注意要設定

iptable

來限定某些

IP

對於某些埠的可訪問性。

二、叢集部署

1)master節點建立Swarm叢集(要儲存初始化後token,因為在節點加入時要使用token作為通訊的金鑰)

[root@master ~]# docker swarm init ——advertise-addr 172。16。60。95

Swarm initialized: current node (kfi2r4dw6895z5yvhlbyzfck6) is now a manager。

To add a worker to this swarm, run the following command:

docker swarm join ——token SWMTKN-1-3fzyAz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172。16。60。95:2377

To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions。

注意

:真的是一鍵部署叢集!!!,上面命令執行後,該機器自動加入到

swarm叢集

。這個會建立一個

叢集token

,獲取全球唯一的

token

,作為叢集唯一標識。後續將其他節點加入叢集都會用到這個

token

值。 其中,

——advertise-addr

引數表示其它

swarm

中的

worker

節點使用此

ip地址

manager

聯絡。命令的輸出包含了其它節點如何加入叢集的命令。

使用

docker info

或者

docker node ls

檢視叢集中的相關資訊

docker info

……。

Swarm: active

NodeID: kfi2r4dw6895z5yvhlbyzfck6

Is Manager: true

ClusterID: y2zgs373cg0y6559t675yexcj

Managers: 1

Nodes: 1

Orchestration:

Task History Retention Limit: 5

……。

2)新增節點到swarm叢集中

需要在所有節點執行,

worker節點

只需一條命令就可以加入叢集

docker swarm join ——token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172。16。60。95:2377

master

上檢視

叢集節點

的狀態

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

到此

Swarm叢集

就建立好了,我們現在有一個

多節點的Swarm叢集

,我們來測試一下常用的命令吧~~~

3)docker node 命令

[root@master ~]# docker node ——help

Usage: docker node COMMAND

Manage Swarm nodes

Options:

Commands:

demote Demote one or more nodes from manager in the swarm

inspect Display detailed information on one or more nodes

ls List nodes in the swarm

promote Promote one or more nodes to manager in the swarm

ps List tasks running on one or more nodes, defaults to current node

rm Remove one or more nodes from the swarm

update Update a node

# demote

將管理節點降級為普通節點

# inspect

檢視節點的詳細資訊

# ls

列出節點

# promote

將普通節點升級為管理節點

# ps

檢視執行的任務

# rm

從swarm叢集中刪除節點

# update

改變叢集節點狀態

[root@master ~]# docker node update ——help

Usage: docker node update [OPTIONS] NODE

Update a node

Options:

——availability string Availability of the node (“active”|“pause”|“drain”)

——label-add list Add or update a node label (key=value)

——label-rm list Remove a node label if exists

——role string Role of the node (“worker”|“manager”)

# 主要使用availability string

# active

節點狀態正常

# pause

節點掛起、暫停

# drain

排除節點,比如將master節點排除,不分配任務,只作為管理節點

node update命令

三、在Swarm中部署服務

叢集部署好了,我們接下來該測試一下我們的叢集基本使用是否正常,下面我們開始我們的測試。

1)建立Hello服務,檢視服務資訊

[root@master ~]# docker service create ——replicas 1 ——name hello busybox

[root@master ~]# docker service ls

ID NAME MODE REPLICAS IMAGE PORTS

kosznwn4ombx hello replicated 0/1 busybox:latest

REPLICAS

中能看出這個

hello服務

並沒有啟動起來,

0/1

表示

1

計劃啟動的副本數,

0

實際啟動的數量。所以啟動失敗

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

2)新增引數

hello服務

busybox

只是一個基礎映象,並沒有一個持續執行的任務,所以

manager

會不斷重啟

hello

這個服務,所以有好多

shutdown

的記錄。但是我們可以為其新增一個任務使其持續執行。

注意

:為什麼沒有任務

Docker

容器就會終止呢?這個問題我們之後再回答

[root@master ~]# docker service update ——args “ping www。baidu。com” hello

hello

overall progress: 1 out of 1 tasks

1/1: running [==================================================>]

verify: Service converged

# update:更新狀態

# ——args:增加引數

再次檢視

hello服務

狀態:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

過濾不正常的

hello服務

狀態:

[root@master ~]# docker service ps -f “desired-state=running” hello

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

yxyivio4mzlg hello。1 busybox:latest master Running Running 4 minutes ago

# -f “desired-state=running” : 狀態為runngin的服務

3)為服務擴容(縮融)scale

剛才設定的

replicas=1

,可以增加副本數量

[root@master ~]# docker service scale hello=4

hello scaled to 4

overall progress: 4 out of 4 tasks

1/4: running

2/4: running

3/4: running

4/4: running

verify: Service converged

# scale : 指定服務的數量

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

4)工作節點排除

manager

manager

只作為管理節點

上圖中

manager

也運行了一個服務,將

manager

排除在外,在正式的生產環境中我們都建議這麼做,因為在容器編排當中,區分

Worker

Master

節點的主要原因是因為

Worker

只負責完成任務,啟動服務,而

Master

則負責任務的調配,一旦

Master

節點也執行服務,導致

Master

節點負載過重,則會使叢集發生崩潰,所以工作節點排除

manager

是很有必要的。

[root@manager ~]# docker node update ——availability drain manager

# node update : 更改節點狀態

# ——availability : 三種狀態

active: 正常

pause:掛起

drain:排除

排除

manager

後,其上面執行的服務會轉移到其他節點

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

四、滾動更新服務

例如

升級服務

的映象版本

[root@manager ~]# docker service create \

> ——replicas 3 \

> ——name redis \

> ——update-delay 10s \

> redis:3。0。6

# 啟動3個副本集的redis

# update-delay 10s :每個容器依次更新,間隔10s

滾動更新:

docker service update ——image redis:3。0。7 redis

更新完成後新版本和歷史記錄都能檢視

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

檢視配置資訊:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

五、服務更新和回滾策略

1)設定策略

[root@manager ~]# docker service create \

——name my-web \

——replicas 10 \

——update-delay 10s \

——update-parallelism 2 \

——update-failure-action continue \

——rollback-parallelism 2 \

——rollback-monitor 20s \

——rollback-max-failure-ratio 0。2 \

nginx:1。12。1

# ——update-parallelism 2 : 每次允許兩個服務一起更新

#——update-failure-action continue : 更新失敗後的動作是繼續

# ——rollback-parallelism 2 : 回滾時允許兩個一起

# ——rollback-monitor 20s :回滾監控時間20s

# ——rollback-max-failure-ratio 0。2 : 回滾失敗率20%

如果執行後檢視狀態不是設定的,可以在

update

一下,將服務狀態設定為自己想要的

docker service update ——rollback-monitor 20s my-web

docker service update ——rollback-max-failure-ratio 0。2 my-web

# 有兩個地方設定數值沒有成功,手動設定

檢視狀態:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

2)服務更新

[root@manager ~]# docker service update ——image nginx:1。13。5 my-web

和上述策略一致,兩兩更新

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

更新完成:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

3)手動回滾(策略是失敗會回滾,現在沒有失敗)

剛才nginx版本已經是

1。13。5

了,現在將其還原到

1。12。1

[root@manager ~]# docker service update ——rollback my-web

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

手動回滾成功

2 docker swarm叢集視覺化管理

一、工具介紹

我們既然搭建好了我們的容器編排叢集,那我們總不能日常的時候也在命令列進行操作,所以我們需要使用到一些視覺化的工具,

Docker

圖形化管理提供了很多工具,有

Portainer

Docker UI

Shipyard

等等,本文主要介紹

Portainer

Portainer

是一個開源、輕量級

Docker

管理使用者介面,基於

Docker API

,提供狀態顯示面板、應用模板快速部署、容器映象網路資料卷的基本操作(包括上傳下載映象,建立容器等操作)、事件日誌顯示、容器控制檯操作、

Swarm叢集

和服務等集中管理和操作、登入使用者管理和控制等功能。功能十分全面,基本能滿足中小型單位對容器管理的全部需求。

二、建立容器

1)下載官方映象

[root@ linuxidc /]# docker pull portainer/portainer

Using default tag: latest

latest: Pulling from portainer/portainer

d1e017099d17: Pull complete

ba5495c717cb: Pull complete

Digest: sha256:8146a5aae1135a0ccee424488c6867b438be21d1e915903a858d12e8382b817b

Status: Downloaded newer image for portainer/portainer:latest

2)單機執行

如果僅有一個

docker宿主機

,則可使用

單機版

執行,

Portainer單機版

執行十分簡單,只需要一條語句即可啟動容器,來管理該機器上的

docker

映象、容器等資料。

建立資料卷:

[root@linuxidc ~]# docker volume create portainer_data

portainer_data

注意

:很多人會有疑問,為什麼要建立資料卷?這個我們也在之後進行回答,這裡埋下一坑。

執行容器:

[root@linuxidc ~]# docker run -d -p 9000:9000 -v /var/run/docker。sock:/var/run/docker。sock -v portainer_data:/data portainer/portainer

439cc8a6d44a84f5967534c50d3accc43fbeb578258a52c2683afeb230dd6e04

引數說明:

-d:容器在後臺執行;

-p 9000:9000 :宿主機9000埠對映容器中的9000埠

-v /var/run/docker。sock:/var/run/docker。sock :把宿主機的Docker守護程序(Docker daemon)預設監聽的Unix域套接字掛載到容器中;

-v portainer_data:/data :把宿主機portainer_data資料卷掛載到容器/data目錄;

檢視容器程序:

[root@linuxidc ~]# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

439cc8a6d44a portainer/portainer “/portainer” 13 seconds ago Up 13 seconds 0。0。0。0:9000->9000/tcp amazing_clarke

訪問服務:

訪問方式:http://IP:9000 ,首次登入需要註冊使用者,給使用者

admin

設定密碼,如下圖:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

單機版本選擇

“Local“

,點選

Connect

即可連線到本地

docker

,如下圖:

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

注意

:從上圖可以看出,有提示需要掛載本地

/var/run/docker。socker

與容器內的

/var/run/docker。socker

連線。因此,在啟動時必須指定該掛載檔案。

3)叢集執行

更多的情況下,我們會有一個

docker叢集

,可能有

幾臺機器

,也可能有

幾十臺機器

,因此,進行叢集管理就十分重要了,

Portainer

也支援叢集管理,

Portainer

可以和

Swarm

一起來進行叢集管理操作。首先要搭建了一個

Swarm

,本文不著重介紹

Swarm叢集

的安裝。

啟動叢集參考官方文件:

https://

portainer。io/install。ht

ml

$ docker service create \

——name portainer \

——publish 9000:9000 \

——replicas=1 \

——constraint ‘node。role == manager’ \

——mount type=bind,alt="震驚 | 只需3分鐘!極速部署個人Docker雲平臺" data-isLoading="0" src="/static/img/blank.gif" data-src=//var/run/docker。sock,dst=/var/run/docker。sock \

——mount type=bind,alt="震驚 | 只需3分鐘!極速部署個人Docker雲平臺" data-isLoading="0" src="/static/img/blank.gif" data-src=//opt/portainer,dst=/data \

portainer/portainer \

-H unix:///var/run/docker。sock

啟動

Portainer

之後,首頁還是給

admin

使用者設定密碼(這裡和單機啟動一樣)。

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們進入之後可以看到這個一個介面。

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們可以看到我們現在的叢集的節點配置情況

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們可以看到我們叢集中各節點的容器分佈情況

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

3 Docker Swarm+阿里雲映象倉庫實戰

我們現在已經做好了叢集以及叢集的視覺化管理,我們可以將自己的服務打包到

DockerHub

倉庫進行釋出,但有時候我們希望有個自己的私人倉庫,能夠不對外暴露的話,怎麼辦呢?我們這裡介紹一種方式,基於

Docker Swarm+阿里雲映象倉庫

的服務部署方式。

一、自建阿里雲映象倉庫

根據連結進入到映象倉庫

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

新建映象倉庫

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們選擇從命令列推映象

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

新建好“test”映象倉庫,看看具體的倉庫情況

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

二、自建映象推到遠端倉庫

我們拉下來一個映象,記住

映象的 ID

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們先在本地登入倉庫,便於之後的操作

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

將本地的映象打上

TAG

,推到遠端倉庫

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

我們切換到遠端倉庫,

test映象倉庫

已經有了該映象,說明我們推送成功了。

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

三、Docker Swarm拉取映象啟動服務

1)

Portainer

新增私有庫

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

2)

Portainer

拉取遠端倉庫啟動一個容器

啟動容器

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

測試容器是否正常執行

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

根據

Postman

的資訊,服務正常執行,說明我們這個思路是正確的~

4 總結

單就目前的雲市場來說,

Kubernates

已經佔據

80%

的市場份額,

Docker Swarm

已逐漸被淘汰,像阿里雲將會在不久之後終止對

Swarm

的雲編排的支援。雖然是這樣的請況,但是對於我們個人開發者來說,也許我們的伺服器配置很低,但我們又想用雲平臺來部署自己的服務,那我們大可以選擇

Docker Swarm

,簡單又不需要極高的配置,還能讓我們嘗試雲服務帶給我們的便捷性,何樂而不為呢?

號主介紹

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

前兩年在二線大廠工作,目前在創業公司搬磚。

接觸方向是

爬蟲

雲原生架構

方面,

豐富的反爬攻克經驗

以及

雲原生二次開發

經驗。

其他諸如

資料分析

駭客增長

也有所涉獵。

做過

百餘人的商業分享

以及

多次開辦培訓課程。

目前也是**CSDN部落格專家 **

震驚 | 只需3分鐘!極速部署個人Docker雲平臺

震驚 | 只需3分鐘!極速部署個人Docker雲平臺