Try   HackMD

Docker開啟Remote API與遠程管理設置筆記

Configure where the Docker daemon listens for connections
https://docs.docker.com/engine/install/linux-postinstall/#configure-where-the-docker-daemon-listens-for-connections

在官方說明文件內有提到兩種方式

  • 使用systemd unit file < 此筆記主要使用此方式
  • 使用daemon.json

需要注意兩種方式一起設置使用的話,會造成docker.service啟動時衝突導致服務無法啟動。

此筆記操作環境是在Ubuntu 20.04 Server環境下,在安裝系統設定中並未勾選預先裝Docker,而是事後系統安裝完畢啟動後,在執行手動安裝Docker

關於安裝Docker可參考
https://docs.docker.com/engine/install/ubuntu/

Step 1. 編輯docker.service unit file

sudo systemctl edit docker.service

設置以下內容

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
  • 官方預設TCP是配置127.0.0.1,筆者自己設置為0.0.0.0允許外部IP連入
  • 官方預設是配置2375 port,筆者自己使用的是4243 port,可按照自己的需求設定。

因是在nano編輯器底下設定,設置完成後請按Ctrl+x>y>Enter儲存內容。

Step 2. 重新啟動systemctl刷新配置檔案

sudo systemctl daemon-reload

Step 3. 重新啟動Docker服務

sudo systemctl restart docker.service

確認服務啟動狀態

sudo systemctl status docker.service

當重新啟動完成後,可以用下列指令確認目前監聽狀態資訊

sudo netstat -lntp | grep dockerd

Step 4. 關於防火牆操作 - ufw

  • 確認Ubuntu Server 防火牆目前是否有啟動
sudo ufw status

如果要在觀察更仔細資訊內容,可以加verbose參數

sudo ufw verbose
  • 啟動防火牆指令
sudo ufw enable

如果需要其他參數說明幫助可用以下指令,來進一步查看可用的參數

sudo ufw -h
  • 設置防火牆規則為Default,並且拒絕掉所有的連入的請求只允許連出
sudo ufw default deny

Default的規則中內容可以看到如下

Default: deny (incoming), allow (outgoing), deny (routed)

將Docker Remote API Port 在防火牆設置允許指定來源連入規則

筆者習慣針對來源連線進行控管,在這裡只允許指定的IP來進行遠程連線,在此部分設定為只允許IP10.0.0.10(筆者電腦在內部網路的 IP)透過4243Port來通過防火牆,進一步取得跟Docker Remote API溝通。

  • 指令格式
sudo ufw allow from '你的來源連線IP' to any port '開放允許使用的Port'
  • 實際執行內容
sudo ufw allow from 10.0.0.10 to any port 4243

在設定完成此規則後,除了指定允許的IP之外,其他IP透過此Port連入至系統時,會被防火牆給擋掉不給予連入。

使用Portainer進行遠程連接管理

關於Portainer安裝可參考
https://documentation.portainer.io/v2.0/deploy/linux/

在安裝完畢後,進入本地portainer點選選單Endpoints> Add endpoint按鈕

Environment type (必填)

  • 選擇Docker

Environment details (必填)

  • Name > 自己給予這一個遠程管理命名,筆者以自己的Jenkins_Server Docker做範例。
  • Endpoint URL > 對應Docker Remote API Host設定,根據前面步驟筆者是設定透過4243 Port來跟Docker遠程連接,在此範例會是10.0.0.14:4243
  • Public IP > 設置跟遠程Docker所在主機IP即可,在此範例會是10.0.0.14

其餘設定看是否有需要再自行設定,設定完成後點選Add endpoint按鈕。

設定完成後在Endpoints頁面即可看到剛剛新增的Docker遠程Jenkins_Server

可在Home頁面清單看到剛剛新增的Jenkins_Server

點選進去後即可進行Docker操作。