IDE/docker-client 遠程連接 Docker Engine(最大的好處是讓 wsl+docker+虛擬機三者共存)


更新:這篇文章價值已經不大了。因為最新版的 VMware Workstation 和 Windows 10 2004,已經支持 Vmware 虛擬機和 Hyper-V 共存了哈哈哈~
而且 Docker Desktop for Windows 可以直接使用 WSL2 作為 Backend,也就是說所有 Windows 家庭版用戶,也能無痛使用它了!喜大普奔!


為了同時使用 wsl+虛擬機+docker,我也是折騰了好幾回了,希望 wsl2+vmware 的兼容特性盡快 release 吧。。。

Intellj/VSCode 連接本地的 Docker 基本不需要任何配置,默認直接就能連上,因此這里不再說明。

注意:使用 Windows 的 docker build 時,一定要注意換行符的區別!!這會導致 shell 腳本無法運行。

有很多時候我們希望能連接使用遠程的 docker engine。原因有很多,比如本機性能不夠啊、本機 Windows 的 VirtualBox/Vmware 和 Docker-For-Windows/WSL2(hyperv) 不兼容啊、希望快速在遠程主機上部署測試容器啊等等。

下面介紹使用各 IDE/Docker-Client 遠程連接 Docker Engine 的方法:

一、遠程主機上的 Docker Engine 配置

遠程主機也可以是 VMware 虛擬機。
windows 上可以在虛擬機內安裝 docker engine,windows 本機通過下面的方法遠程連接虛擬機內的 docker engine 來實現 docker/虛擬機共存。
方便起見,虛擬機最好提前設置好靜態 IP,方法請網上百度。(CentOS 和 Ubuntu 配置靜態 IP 的方法不一樣,請注意。)

Docker 默認只監聽本地 Unix 連接,無法遠程訪問。因此首先需要讓 Docker Engine 監聽 TCP 遠程端口。修改 /etc/docker/daemon.json 中的 hosts 參數:

{
    "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "50m",
      "max-file": "1"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "insecure-registries" : ["harbor.internal.xxx.com"],
    "registry-mirrors": [
      "https://dockerhub.azk8s.cn",
      "https://hub-mirror.c.163.com"
    ],
    "storage-driver": "overlay2",
    "storage-opts": [
      "overlay2.override_kernel_check=true"
    ]
}

主要是第一行 hosts 參數,其他參數(主要是些鏡像倉庫、日志大小限制等配置)可以不配,詳見 DevOps-Docker

改好后 systemctl restart docker 重啟 docker engine.

現在直接通過瀏覽器訪問 http://<server-ip>:2375/images/json,如果返回 200,就說明配置 ok 了。

注意:上述方法開啟的 2375 端口,默認沒有任何保護措施,並不安全,千萬別在公網上使用!!!安全相關的設置參見 Docker Engine 遠程訪問安全設置

二、本地 IDE/Docker-Client 配置

1. Intellij 系列 IDE: Idea/Pycharm/Goland/Rider 等

全系列 IDE 自帶 Docker 插件,該插件內部使用 java 的 docker sdk 與 Docker Engine 交互,不需要單獨安裝 docker/docker-compose client.
只需要給個 remote api 和 certifact 證書(用於認證)就行。

2. Docker-Client 配置

Docker 主要有兩個客戶端工具:

  1. docker-client: 就是用於執行 docker xxx 命令的程序,最常用的客戶端。
  2. docker-compose: 比 docker-client 更方便,它通過 docker-compose.yml 對容器進行編排。用過的人都說好~

那么這兩個東西的安裝方法如下:

  1. Linux: 參考 安裝 Docker,自己剔除掉 docker-engine 的安裝即可。
  2. Windows: 使用 chocolaty 安裝 choco install docker-cli docker-compose 即可
    • choco 的 docker-cli 來源:StefanScherer/docker-cli-builder,是第三方編譯版,非官方。
    • choco 的 docker-compose 來源: 在 docker-compose - github release ,官方包。
    • 也可以通過 pip install docker-compose 進行安裝,因為 docker-compose 是純 python 寫的。
    • 不需要安裝臃腫的 docker-desktop,那東西還和 vmware/virtualbox 不兼容,還只支持 windows 10 pro 以上的版本,就是個垃圾。。。

安裝好客戶端后,通過環境變量設定 docker 的遠程地址 DOCKER_HOST:

# Linux 臨時設置環境變量,x.x.x.x 替換成你遠程主機的 IP 地址。
export DOCKER_HOST='tcp://X.X.X.X:2375'

# Windows Powershell
$env:DOCKER_HOST = 'tcp://X.X.X.X:2375'  # 臨時設置環境變量
[Environment]::SetEnvironmentVariable("DOCKER_HOST", "tcp://X.X.X.X:2375", "User")  # 修改當前用戶的環境變量,只對新進程有效

然后重啟 VSCode,點擊左邊的 Docker 插件,就可以發現插件已經連接上了哈哈。

另外直接在 powershell 中輸入 docker ps,你會發現 docker 命令也可以正常使用了。非常舒服,比用 windows-docker-desktop 舒服多了。

我目前是本地開了一個 vmware 虛擬機,然后 windows 本機通過上述配置連接虛擬機中的 docker engine.

3. VSCode 配置

根據 VSCode Docs - Container Advanced - 連接遠程 docker host,VSCode 的 Container 插件要求本機必須安裝好 docker-clientdocker-compose.

因此只要你的 「2. Docker-Client 配置」沒有問題,你就能正常使用 VSCode 的容器插件了。

注意:

  1. 以這種方式配置好的遠程 docker-client,不能將本機文件夾映射到遠程 docker engine!只能用數據卷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM