一、背景
最近在使用rancher2.5.5部署Redis主從複製的時候,發現rancher會產生很多iptables的規則,這些規則導致我們在部署了rancher的機器上無法使用Redis的主從複製功能,因為我對rancher和k8s的瞭解也僅限於瞭解網路架構和使用,對底層並不深入,短期內無法解決這個網路衝突的問題;
因此我將rancher管理docker的模式換成使用protainer的方式,這個portainer相對來說更加輕量級,在搭建過程中也使用了幾個小時學習,現在講整個過程儘量復原給大家一些參考。
二、操作步驟
- 安裝Portiner
- 管理節點
- 部署容器
三、安裝Portiner
安裝Portiner的方式有很多種,但我一向喜歡使用最簡單的方法來完成所需要做的事情,因此這裡我將使用docker的方式來搭建它。
3.1 docker部署
docker部署的方式非常簡單,只需要執行簡單的執行容器命令即可,命令如下所示。
docker run -d \
-p 9000:9000 \
-p 8000:8000 \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/docker/portainer-ce/data:/data \
--name portainer-ce portainer/portainer-ce
命令中對映了物理機的8000埠和9000埠到容器中的8000埠以及9000埠,同時將宿主機的docker通訊檔案/var/run/docker.sock
也對映到了容器中,另外為了持久化部署,還將目錄/opt/docker/portainer-ce/data
對映到了容器的/data
目錄下,命令執行完成之後,返回結果資訊如下圖所示
在上圖中可以看到已經成功執行了一個docker容器,接下來我需要驗證服務是否正常執行,使用瀏覽器訪問URLhttp://127.0.0.1:9000/
地址,結果如下所示
在上圖中可以看到Portainer系統已經能夠訪問, 說明成功系統安裝成功了。
3.2 節點初始化
現在我需要設定管理員的賬號密碼,這裡我簡單填寫密碼和確認密碼之後,點選Create user
按鈕即可建立管理員賬戶。
管理員賬戶設定完成之後,需要進行初始化,如下圖所示
在上圖中有三個選項,我選擇使用Portainer管理本地docker程式,點選Connect
按鈕,即可完成初始化操作。
3.3 功能初探
完成初始化操作之後,就可以進入Portainer的工作介面,如下圖所示
在上圖找那個可以看到Portainer系統中已經有一個local
的本地節點,我們可以點選它進入節點的管理,如下圖所示
在上圖中可以看到Portainer系統列出了local
節點的 Stack、容器資訊、映象資訊、磁碟資訊、網路資訊等等,這裡我隨意點選Containers
區塊,就可以看到容器列表,如下圖所示
在上圖中可以看到容器列表中存在兩個容器,以及容器的執行狀態,也可以對這些容器進行控制。
四、管理節點
現在已經對本地docker可以進行控制,但是我並不滿足於此,我需要對其他機器也進行控制。
4.1 開始新增節點
在Portainer系統中,有一個endpoints
的選單,在這個選單當中可以新增多個節點,如下圖所示
在上圖中可以看到,已經有一個local
的節點,在列表上方有一個Add endpoint
按鈕,點選按鈕後就可以來到新增節點的詳情頁,如下圖所示
在上圖中可以看到有5個選項,這裡我選擇最簡單的一種方式,使用Docker API
進行控制。
4.2 開放API控制
這種方法需要在節點的docker啟動程式中新增引數,因此我需要先登入到節點伺服器中去,ssh登登入伺服器的命令如下所示
ssh root@xxx.xxx.xxx.xxx
命令執行完畢之後,返回如下圖所示
在上圖中可以看到已經進入節點所在的伺服器,接著需要編輯docker啟動的配置檔案,命令如下所示
vim /usr/lib/systemd/system/docker.service
命令執行之後,就可以在vim編輯介面修改配置,如下圖所示
將開啟遠端訪問程式碼加入到docker的啟動命令列中,程式碼如下所示
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
將程式碼複製到 /usr/bin/dockerd
程式後面,如下圖所示
儲存配置檔案之後,需要重啟docker服務,重啟docker的命令如下所示
systemctl daemon-reload && systemctl restart docker
重啟docker之後,一切正常的話就完成了
4.3 驗證埠狀態
檢視docker的配置資訊,命令如下所示
docker info
命令執行之後,返回的資訊如下圖所示
在上圖中可以看到docker給了一個warning的警告提示,告知我開啟遠端訪問會存在安全風險,這裡暫時不理會它,不過出現這個提示說明確實是開啟了遠端訪問的功能
另外可以檢視通過開放埠,來驗證開啟是否成功,命令如下所示
netstat -ntl
命令執行完畢之後,會返回當前主機的埠開放情況,如下圖所示
在上圖中可以看到2375
埠已經被開啟成功, 說明節點本身開啟docker是OK了;
但是Portainer通過ip訪問此節點的時候,要考慮網路中的防火牆是否會遮蔽此埠,這裡可以使用nmap
工具來探測節點的埠是否可以被訪問,現在我回到Portainer系統的命令終端,並使用nmap工具進行探測,命令如下所示
nmap -p 2375 xxx.xxx.xxx.xxx
命令執行之後,會返回2375是否處於開啟的情況,執行結果如下圖所示
在上圖中可以看到節點的2375
埠是開啟的,並且可以進行連線。
4.4 完成新增節點
接下來回到瀏覽器視窗,如下圖所示
在上圖所示的網頁中,將節點的IP地址和埠通過URL形式填寫進去,然後點選Add endpodint
按鈕,即可將節點增加進去,新增成功會有相應的提示,如下圖所示
在上圖中可以看到Portainer系統提示新增節點已經成功,並且節點列表可以看到此節點了。
五、部署容器
新增節點完成之後,我準備在遠端節點中部署我的容器;
5.1 部署單個容器
回到Portainer主頁,在主頁可以看到剛才新增的節點資訊,如下圖所示
在上圖中選擇剛才新增的節點,然後進入容器選單選項,可以看到此節點的容器列表,,如下圖所示
在上圖所示頁面的列表上方有一個Add container
按鈕,點選此按鈕後就會調整到新增容器詳情頁
在上圖所示的頁面中,需要將docker映象地址填寫進去,這裡我隨意選舉了一個nginx映象,並且將主機的8888埠對映到了容器的80埠,提交這些資訊之後,Portainer系統會告知你容器執行是否成功,如下圖所示
在上圖中可以看到容器已經執行成功,並且跳轉到了容器列表中,接下來我們可以訪問此節點對應的8888埠,來驗證服務是否可用.
開啟瀏覽器,然後在位址列中填入URLhttp://xxx.xxx.xxx.xxx:8888/
,訪問之後返回的結果如下圖所示
在上圖中可以看到nginx
服務已經成功執行了;
5.2 部署 docker-compose
除了在容器列表頁部署容器之外,Portainer系統還支援使用docker-compose的方式進行部署,在Portainer系統中叫做stacks
,在選單欄中選擇此項,可以進入docker-compose服務的列表,如下圖所示
在列表的上方有一個Add stack
按鈕,點選此按鈕,就可以新增docker-compose
服務,如下圖所示
在上圖所示的頁面中,會要求我填寫docker-compose的資訊,這裡我準備了一個Redis服務的docker-compose
的配置,配置程式碼如下所示
version: '3.5'
services:
redis:
image: "redis:latest"
container_name: redis_test
command: redis-server
ports:
- "16379:16379"
降配置填到頁面的後,進行提交Portainer就會在對應節點部署剛才的docker-compose
服務,如下圖所示
部署成功之後,可以在stacks列表中看到剛才部署的服務,你還可以點選列表中的服務名稱,進入詳情頁進行檢視和修改,如下圖所示
在上圖中可以看到此服務具體執行了什麼容器,也可以終止或刪除該容器。
本文對Portainer也是一個初探,更加細節的還需要各位孜孜不倦的進行探索。
關於作者
作者:湯青松
微信:songboy8888
日期:2021-04-10
本作品採用《CC 協議》,轉載必須註明作者和本文連結