使用Portainer部署Docker容器實踐

1、背景

最近在使用rancher2.5.5部署Redis主從複製的時候,發現rancher會產生不少iptables的規則,這些規則致使咱們在部署了rancher的機器上沒法使用Redis的主從複製功能,由於我對rancher和k8s的瞭解也僅限於瞭解網絡架構和使用,對底層並不深刻,短時間內沒法解決這個網絡衝突的問題;nginx

所以我將rancher管理docker的模式換成使用protainer的方式,這個portainer相對來講更加輕量級,在搭建過程當中也使用了幾個小時學習,如今講整個過程儘可能復原給你們一些參考。redis

2、操做步驟

  1. 安裝Portiner
  2. 管理節點
  3. 部署容器

3、安裝Portiner

安裝Portiner的方式有不少種,但我一貫喜歡使用最簡單的方法來完成所須要作的事情,所以這裏我將使用docker的方式來搭建它。docker

3.1 docker部署

docker部署的方式很是簡單,只須要執行簡單的運行容器命令便可,命令以下所示。vim

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目錄下,命令執行完成以後,返回結果信息以下圖所示api

在上圖中能夠看到已經成功運行了一個docker容器,接下來我須要驗證服務是否正常運行,使用瀏覽器訪問URLhttp://127.0.0.1:9000/地址,結果以下所示瀏覽器


在上圖中能夠看到Portainer系統已經可以訪問, 說明成功系統安裝成功了。安全

3.2 節點初始化

如今我須要設置管理員的帳號密碼,這裏我簡單填寫密碼和確認密碼以後,點擊Create user按鈕便可建立管理員帳戶。服務器

管理員帳戶設置完成以後,須要進行初始化,以下圖所示微信


在上圖中有三個選項,我選擇使用Portainer管理本地docker程序,點擊Connect按鈕,便可完成初始化操做。網絡

3.3 功能初探

完成初始化操做以後,就能夠進入Portainer的工做界面,以下圖所示

在上圖找那個能夠看到Portainer系統中已經有一個local的本地節點,咱們能夠點擊它進入節點的管理,以下圖所示

在上圖中能夠看到Portainer系統列出了local節點的 Stack、容器信息、鏡像信息、磁盤信息、網絡信息等等,這裏我隨意點擊Containers區塊,就能夠看到容器列表,以下圖所示

在上圖中能夠看到容器列表中存在兩個容器,以及容器的運行狀態,也能夠對這些容器進行控制。

4、管理節點

如今已經對本地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、部署容器

添加節點完成以後,我準備在遠程節點中部署個人容器;

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

相關文章
相關標籤/搜索