Docker輕量級web圖形頁面管理 - Portainer部署記錄

散盡浮華發表於2018-11-13

 

Docker圖形頁面管理工具基本常用的有三種: Docker UI,Shipyard,Portainer,之前分別介紹了Docker UI和Shipyard部署,下面簡單介紹下Portainer部署.Portainer是Docker的圖形化管理工具,提供狀態顯示皮膚、應用模板快速部署、容器映象網路資料卷的基本操作(包括上傳下載映象,建立容器等操作)、事件日誌顯示、容器控制檯操作、Swarm叢集和服務等集中管理和操作、登入使用者管理和控制等功能, 功能十分全面,基本能滿足中小型單位對容器管理的全部需求。

0)  機器環境

[root@docker-node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

[root@docker-node1 ~]# ifconfig|grep 172.16.60
        inet 172.16.60.213  netmask 255.255.255.0  broadcast 172.16.60.255

[root@docker-node1 ~]# systemctl stop firewalld
[root@docker-node1 ~]# systemctl disable firewalld
[root@docker-node1 ~]# firewall-cmd --state
not running

1)  查詢當前有哪些Portainer映象

[root@docker-node1 ~]# docker search portainer
NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
portainer/portainer              A simple to use management user interface fo…   831                                     
hypriot/rpi-portainer            A web interface for the Docker engine. Dead …   36                                      
portainer/templates              App Templates for Portainer http://portainer…   14                                      
portainer/agent                  An agent used to manage all the resources in…   10                                      
portainer/golang-builder         Utility to build Golang binaries.               2                                       [OK]
bmoorman/portainer               Portainer [github.com/portainer/portainer] o…   1                                       [OK]
arpanpal010/portainer                                                            1                                       
usgsastro/portainer              custom portainer install into centos7           1                                       [OK]
softonic/portainer-endpoint      Allows auto register all the swarm nodes in …   1                                       [OK]
dockerframework/portainer        Portainer (Simple Management UI for Docker) …   1                                       [OK]
rancher/portainer-agent                                                          0                                       
voltha/voltha-portainer          Portainer support for VOLTHA                    0                                       
nenadilic84/portainer                                                            0                                       
rodjers/portainer                Swarm portainer                                 0                                       
portainer/base                   Multi-stage build image to create the Portai…   0                                       [OK]
hassioaddons/portainer                                                           0                                       
portainer/angular-builder        Builder image for Portainer frontend.           0                                       [OK]
stefanscherer/portainer          Portainer for Windows Insider                   0                                       
jiangxinshang/portainer          可在loongson的mips64el平臺執行的portainer               0                                       
ssbkang/portainer                                                                0                                       
ollijanatuinen/portainer         debug/development versions of portainer         0                                       
helloysd/portainer                                                               0                                       
j0nnylester/portainer            portainer running on a Raspberry Pi             0                                       
11384eb/portainer                                                                0                                       
flochtililoch/armv7l-portainer                                                   0      

2)  下載Portainer映象

[root@docker-node1 ~]# docker pull portainer/portainer
Using default tag: latest
latest: Pulling from portainer/portainer
d1e017099d17: Pull complete 
d4e5419541f5: Pull complete 
Digest: sha256:07c0e19e28e18414dd02c313c36b293758acf197d5af45077e3dd69c630e25cc
Status: Downloaded newer image for portainer/portainer:latest
[root@docker-node1 ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
nginx                 latest              62f816a209e6        6 days ago          109MB
portainer/portainer   latest              00ead811e8ae        8 weeks ago         58.7MB

3)  執行Portainer,Portainer執行方式有以下兩種方式:

單機版執行 (不推薦,正常選擇下面叢集啟動方法)
如果僅有一個docker宿主機,則可使用單機版執行,執行以下命令就可以啟動了:

[root@docker-node1 ~]# docker run -ti -d --name kevin-portainer -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock  portainer/portainer
5818eaf37bf493a679ebbaa05ba28c6a860501ea78e608981e1934300843ab4b

[root@docker-node1 ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                    NAMES
5818eaf37bf4        portainer/portainer   "/portainer"        19 seconds ago      Up 2 seconds        0.0.0.0:9000->9000/tcp   kevin-portainer

以上語句用宿主機9000埠關聯容器中的9000埠,並給容器起名為portainer-test。啟動成功後,使用該機器IP:PORT即可訪問Portainer。訪問http://172.16.60.213:9000, 首次登陸需要註冊使用者,給admin使用者設定密碼:

單機版這裡選擇local, 點選Connect進行連線即可

注意:從上圖可以看出,有提示需要掛載本地 /var/run/docker.socker與容器內的/var/run/docker.socker連線。因此,在啟動時必須指定該掛載檔案。

如上,點選左邊欄的"Endpoint"-"local",可以將單機版的節點名稱修改下,比如將預設的"local"改為"docker-node1-172.16.60.213"

點選"Update endpoint",就可以看到修改後新的節點名稱"docker-node1-172.16.60.213"了,然後點選"Home",點選右邊的docker-node1-172.16.60.213節點,就可看到該節點的Docker管理資訊.

接著就可以在這個web節點裡進行Docker容器的建立,更名,關閉,啟動,刪除以及映象,網路,volume等操作管理了

多節點叢集執行
更多的情況下,我們會有一個docker叢集,可能有幾臺機器,也可能有幾十臺機器,因此,進行叢集管理就十分重要了,Portainer也支援叢集管理,Portainer還可以和Swarm一起來進行叢集管理操作。下面簡單記錄下Pointainer管理多個docker節點的做法:

一.   先來搭建Swarm叢集環境
    
1) 基本環境
用兩臺機器來搭建(都是centos7.5系統)
172.16.60.220    docker-node1
172.16.60.221    docker-node2
    
[root@docker-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
    
修改兩臺機器的主機名並做hosts (這裡以docker-node1為例)
[root@docker-node1 ~]# hostnamectl set-hostname docker-node1
[root@docker-node1 ~]# echo "docker-node1" > /etc/hostname
[root@docker-node1 ~]# vim /etc/hosts
172.16.60.220    docker-node1
172.16.60.221    docker-node2
    
關閉兩臺機器的防火牆和selinux (這裡以docker-node1為例)
[root@docker-node1 ~]# systemctl stop firewalld
[root@docker-node1 ~]# systemctl disable firewalld
[root@docker-node1 ~]# firewall-cmd --state
not running
[root@docker-node1 ~]# cat /etc/sysconfig/selinux
SELINUX=disabled
[root@docker-node1 ~]# setenforce 0
[root@docker-node1 ~]# getenforce
Disabled
    
兩臺機器都要安裝docker環境 (這裡以docker-node1為例)
[root@docker-node1 ~]# yum install -y docker
[root@docker-node1 ~]# systemctl start docker
[root@docker-node1 ~]# systemctl enable docker
    
修改docker監聽埠 (這裡以docker-node1為例)
Swarm是通過監聽2375埠進行通訊的,所以在使用Swarm進行叢集管理之前,需要設定一下2375埠的監聽。所有主機節點docker開啟2375監聽,
docker版本不同,配置方式不一樣
[root@docker-node1 ~]# cp /etc/sysconfig/docker /etc/sysconfig/docker.bak
[root@docker-node1 ~]# vim  /etc/sysconfig/docker         //在OPTIONS這一行裡新增下面內容:
OPTIONS='-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
  
重啟docker服務
[root@docker-node1 ~]# systemctl restart docker

[root@docker-node1 ~]# lsof -i:2375
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
dockerd 13785 root    5u  IPv6 4518841      0t0  TCP *:2375 (LISTEN)

[root@docker-node1 ~]# telnet 172.16.60.220 2375
Trying 172.16.60.220...
Connected to 172.16.60.220.
Escape character is '^]'.
    
2) Swarm安裝和叢集建立
    
2.1) Swarm映象下載
docker-node1機器上下載
[root@docker-node1 ~]# docker pull swarm
[root@docker-node1 ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
swarm                 latest              ff454b4a0e84        5 months ago        12.7MB
    
docker-node2機器上下載
[root@docker-node2 ~]# docker pull swarm
[root@docker-node2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID               CREATED              SIZE
docker.io/swarm     latest              ff454b4a0e84        5 months ago        12.7 MB
    
2.2) 初始化Swarm
在docker-node1機器上進行初始化操作
[root@docker-node1 ~]# docker swarm init --advertise-addr 172.16.60.220
Swarm initialized: current node (vayif0c04lged913w9z3pxtd5) is now a manager.
    
To add a worker to this swarm, run the following command:
    
    docker swarm join --token SWMTKN-1-5qjhhernfguqc4zwhtwgdzfwy7xl1ksjr04ve2wg0pk376wqvx-717allcxbo5mu02weq0s4ge36 172.16.60.220: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聯絡。命令的輸出包含了其它節點如何加入叢集的命令。
    
2.3) 新增叢集節點
在docker-node2機器上執行以下新增叢集節點的操作命令
[root@docker-node2 ~]# docker swarm join --token SWMTKN-1-5qjhhernfguqc4zwhtwgdzfwy7xl1ksjr04ve2wg0pk376wqvx-717allcxbo5mu02weq0s4ge36 172.16.60.220:2377
This node joined a swarm as a worker.
    
如後續要加入其他更多的節點,新增操作也是執行這個命令.
    
2.3) 檢視叢集節點
在docker-node1機器上執行檢視,因為此時它是swarm叢集的leader節點
[root@docker-node1 ~]# docker node list
ID                                                  HOSTNAME         STATUS          AVAILABILITY        MANAGER STATUS      ENGINE VERSION
vayif0c04lged913w9z3pxtd5 *      docker-node1      Ready             Active                     Leader                        18.09.0
trmbfdjdxncnukfenuzuokfun          docker-node2     Ready             Active                                                         1.13.1
    
===============================================================
二.  部署Portainer
    
docker-node1節點操作
[root@docker-node1 ~]# docker pull portainer/portainer
[root@docker-node1 ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
portainer/portainer   latest              00ead811e8ae        8 weeks ago         58.7MB
swarm                 latest              ff454b4a0e84        5 months ago        12.7MB
    
[root@docker-node1 ~]# docker run -ti -d --name my-portainer -p 9000:9000 --restart=always  portainer/portainer
6755cd140049d7cb3ab77f40ddf0fb79f20384cffd17cb87da68d04033be30b5
    
[root@docker-node1 ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED              STATUS                  PORTS                              NAMES
6755cd140049        portainer/portainer   "/portainer"            57 seconds ago      Up 41 seconds       0.0.0.0:9000->9000/tcp   my-portainer

[root@docker-node1 ~]# lsof -i:9000
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
docker-pr 13631 root    4u  IPv6 1092261      0t0  TCP *:cslistener (LISTEN)

[root@docker-node1 ~]# telnet 172.16.60.210 9000
Trying 172.16.60.210...
telnet: connect to address 172.16.60.210: Connection refused
[root@docker-node1 ~]# telnet 172.16.60.220 9000 
Trying 172.16.60.220...
Connected to 172.16.60.220.
Escape character is '^]'.

訪問http://172.16.60.213:9000,   同樣首次登陸需要註冊使用者,給admin使用者設定密碼:

叢集模式, 這樣一定要選擇Remote, 輸入docker-node1的ip,然後點選Connect。

同樣點選左邊欄的"Endpoints" - "+add endpoint", 新增叢集節點

新增之後,點選左邊欄的"Home", 右邊就可以看到節點資訊了,可以進行切換操作.

如上圖,右邊就可以分別點選切換到對應的docker節點中進行容器管理了. 可以點選切換到Manager節點172.16.60.220裡面左邊欄的"swarm",檢視swarm節點情況.
若要加入其他docker節點到這個portainer介面裡進行管理,則如上同理操作: 1) 在/etc/sysconfig/docker裡新增2375埠配置. 2) 加入到swarm叢集中. 3) 在portainer介面裡新增Endpoints.

相關文章