IDE/docker-client 遠(yuǎn)程連接 Docker Engine(最大的好處是讓 wsl+docker+虛擬機(jī)三者共存)
更新:這篇文章價(jià)值已經(jīng)不大了。因?yàn)樽钚掳娴?VMware Workstation 和 Windows 10 2004,已經(jīng)支持 Vmware 虛擬機(jī)和 Hyper-V 共存了哈哈哈~
而且 Docker Desktop for Windows 可以直接使用 WSL2 作為 Backend,也就是說所有 Windows 家庭版用戶,也能無痛使用它了!喜大普奔!
為了同時(shí)使用 wsl+虛擬機(jī)+docker,我也是折騰了好幾回了,希望 wsl2+vmware 的兼容特性盡快 release 吧。。。
Intellj/VSCode 連接本地的 Docker 基本不需要任何配置,默認(rèn)直接就能連上,因此這里不再說明。
注意:使用 Windows 的
docker build時(shí),一定要注意換行符的區(qū)別!!這會(huì)導(dǎo)致 shell 腳本無法運(yùn)行。
有很多時(shí)候我們希望能連接使用遠(yuǎn)程的 docker engine。原因有很多,比如本機(jī)性能不夠啊、本機(jī) Windows 的 VirtualBox/Vmware 和 Docker-For-Windows/WSL2(hyperv) 不兼容啊、希望快速在遠(yuǎn)程主機(jī)上部署測(cè)試容器啊等等。
下面介紹使用各 IDE/Docker-Client 遠(yuǎn)程連接 Docker Engine 的方法:
一、遠(yuǎn)程主機(jī)上的 Docker Engine 配置
遠(yuǎn)程主機(jī)也可以是 VMware 虛擬機(jī)。
windows 上可以在虛擬機(jī)內(nèi)安裝 docker engine,windows 本機(jī)通過下面的方法遠(yuǎn)程連接虛擬機(jī)內(nèi)的 docker engine 來實(shí)現(xiàn) docker/虛擬機(jī)共存。
方便起見,虛擬機(jī)最好提前設(shè)置好靜態(tài) IP,方法請(qǐng)網(wǎng)上百度。(CentOS 和 Ubuntu 配置靜態(tài) IP 的方法不一樣,請(qǐng)注意。)
Docker 默認(rèn)只監(jiān)聽本地 Unix 連接,無法遠(yuǎn)程訪問。因此首先需要讓 Docker Engine 監(jiān)聽 TCP 遠(yuǎn)程端口。修改 /etc/docker/daemon.json 中的 hosts 參數(shù):
{
"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 參數(shù),其他參數(shù)(主要是些鏡像倉(cāng)庫(kù)、日志大小限制等配置)可以不配,詳見 DevOps-Docker
改好后 systemctl restart docker 重啟 docker engine.
現(xiàn)在直接通過瀏覽器訪問 http://<server-ip>:2375/images/json,如果返回 200,就說明配置 ok 了。
注意:上述方法開啟的 2375 端口,默認(rèn)沒有任何保護(hù)措施,并不安全,千萬(wàn)別在公網(wǎng)上使用!!!安全相關(guān)的設(shè)置參見 Docker Engine 遠(yuǎn)程訪問安全設(shè)置
二、本地 IDE/Docker-Client 配置
1. Intellij 系列 IDE: Idea/Pycharm/Goland/Rider 等
全系列 IDE 自帶 Docker 插件,該插件內(nèi)部使用 java 的 docker sdk 與 Docker Engine 交互,不需要單獨(dú)安裝 docker/docker-compose client.
只需要給個(gè) remote api 和 certifact 證書(用于認(rèn)證)就行。
2. Docker-Client 配置
Docker 主要有兩個(gè)客戶端工具:
docker-client: 就是用于執(zhí)行docker xxx命令的程序,最常用的客戶端。docker-compose: 比 docker-client 更方便,它通過docker-compose.yml對(duì)容器進(jìn)行編排。用過的人都說好~
那么這兩個(gè)東西的安裝方法如下:
- Linux: 參考 安裝 Docker,自己剔除掉 docker-engine 的安裝即可。
- 或者自己在 docker downloads - linux 中下載最新版本,然后解壓出 docker-client
- 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進(jìn)行安裝,因?yàn)?docker-compose是純 python 寫的。 - 不需要安裝臃腫的 docker-desktop,那東西還和 vmware/virtualbox 不兼容,還只支持 windows 10 pro 以上的版本,就是個(gè)垃圾。。。
安裝好客戶端后,通過環(huán)境變量設(shè)定 docker 的遠(yuǎn)程地址 DOCKER_HOST:
# Linux 臨時(shí)設(shè)置環(huán)境變量,x.x.x.x 替換成你遠(yuǎn)程主機(jī)的 IP 地址。
export DOCKER_HOST='tcp://X.X.X.X:2375'
# Windows Powershell
$env:DOCKER_HOST = 'tcp://X.X.X.X:2375' # 臨時(shí)設(shè)置環(huán)境變量
[Environment]::SetEnvironmentVariable("DOCKER_HOST", "tcp://X.X.X.X:2375", "User") # 修改當(dāng)前用戶的環(huán)境變量,只對(duì)新進(jìn)程有效
然后重啟 VSCode,點(diǎn)擊左邊的 Docker 插件,就可以發(fā)現(xiàn)插件已經(jīng)連接上了哈哈。
另外直接在 powershell 中輸入 docker ps,你會(huì)發(fā)現(xiàn) docker 命令也可以正常使用了。非常舒服,比用 windows-docker-desktop 舒服多了。
我目前是本地開了一個(gè) vmware 虛擬機(jī),然后 windows 本機(jī)通過上述配置連接虛擬機(jī)中的 docker engine.
3. VSCode 配置
根據(jù) VSCode Docs - Container Advanced - 連接遠(yuǎn)程 docker host,VSCode 的 Container 插件要求本機(jī)必須安裝好 docker-client 和 docker-compose.
因此只要你的 「2. Docker-Client 配置」沒有問題,你就能正常使用 VSCode 的容器插件了。
注意:
- 以這種方式配置好的遠(yuǎn)程 docker-client,不能將本機(jī)文件夾映射到遠(yuǎn)程 docker engine!只能用數(shù)據(jù)卷。

浙公網(wǎng)安備 33010602011771號(hào)