背景
本地開發了一個SpringBoot專案,想透過Docker部署起來,我本地是Window10系統,由於某些原因不能虛擬化並且未安裝Docker-Desktop,所以我在想有沒有辦法本地不需要虛擬化也不需要安裝Docker-Desktop來實現支援Docker命令遠端連線到我自己的伺服器上。經過搜尋以及大佬的指點發現了一個辦法。那就是透過Docker客戶端遠端連線伺服器的Docker服務端。
實現
Docker客戶端遠端訪問服務端
檢視Docker服務端版本
docker version
獲取到Docker服務端版本為24.0.7。
Docker服務端允許遠端訪問
修改docker.service開放遠端訪問。
# 編輯
vim /lib/systemd/system/docker.service
找到該檔案中的
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
註釋或刪除改行,替換為如下命令
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
替換之後儲存退出,然後重啟Docker服務
systemctl daemon-reload && systemctl restart docker
在你本地透過瀏覽器訪問http://{伺服器IP}:2375/version
,當看到頁面顯示一串JSON時表示已開放遠端訪問。
下載對應版本客戶端
在Windows訪問https://download.docker.com/win/static/stable/x86_64/下載跟服務端版本一致的客戶端壓縮包。
下載之後解壓到指定資料夾,比如我放在D:\\tools
下。在D:\\tools
下會多出來一個名字為docker
的資料夾,裡面有如下圖docker.exe、dockerd.exe、docker-proxy.exe三個檔案(docker-compose.exe不用管,後面會講)。
配置環境變數
在Windows的系統環境變數中新增一個環境變數DOCKER_HOST
,值配置為tcp://{IP}:2375
,這個IP
替換為Docker所在伺服器的IP(例如我的tcp://192.168.169.180:2375
)
然後再新增一個環境變數DockerClient
,值配置為D:\\tools\\docker
,也就是剛剛解壓的目錄,並且在Path中新增該變數(%DockerClient%
),配置該環境變數後可以在任何位置訪問docker.exe
可執行檔案。
驗證
開啟CMD,在任意資料夾下執行docker ps
檢視是否顯示伺服器上的容器。
Docker-Compose實現同樣功能
檢視服務端docker-compose版本
docker-compose version
# Docker Compose version v2.29.2
下載相同版本的docker-compose
訪問https://github.com/docker/compose/releases下載對應版本的docker-compose。
下載後存放到docker客戶端所在的目錄D:\\tools\\docker
下,就是在上面看到的docker-compose.exe
(檔名稱是自己改的,下載下來就是上圖的名稱)。
驗證
執行命令檢視是否生效。
docker-compose ps
注意:執行docker-compose命令所在的資料夾的名稱需要注意,不能隨便亂取名。我的情況是需要跟伺服器上的當前資料夾名稱保持一致。我的伺服器上docker-compose.yml放在/usr/looveh/tw-feedback下,所以在Windows下執行docker-compose命令時當前目錄的名稱需要為tw-feedback,否則查詢不到容器。