為什麼有這種需求
目前我使用容器的主力是 Podman 不過有些跟容器整合的工具(e.g. AWS SAM CLI, act)是只支援 Docker 這套工具的,對於 Podman 的支援官方是從不保證能通。有礙於這類工具實在對於生產力很有幫助,所以開始研究兩者並存的可能性。不過因為 Docker Desktop 因為已經不是免費了,所以目標就是只安裝 docker engine,然後用 docker client cli 來使用 service 。
前置條件
這篇是以 Podman 已經安裝好的情形下來展示,如何接續安裝 Docker engine。
確認 wsl 版本是 version 2
wsl --set-default-version 2
更新 wsl 避免踩到舊版的坑
wsl --update
安裝指定版本號,這邊直接指定最新的 Ubuntu 版本
wsl --install -d Ubuntu-22.04
停止該虛擬機器,因為我們要準備把虛擬硬碟從預設路徑搬移出去
wsl -t Ubuntu-22.04
匯出
wsl --export Ubuntu-22.04 {new path}\Ubuntu-22.04.tar
解除註冊
wsl --unregister Ubuntu-22.04
在新的地方重新註冊虛擬機
wsl --import Ubuntu-22.04 {new path}\Ubuntu-22.04 {new path}\Ubuntu-22.04.
tar
進入虛擬機器裡
wsl -d Ubuntu-220.4 --user {your_user_name}
更新 Ubuntu 內的套件
|
|
安裝docker engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
基本上做到這邊 docker 就已經安裝完成。但可以測試一下 docker 是否安裝成功
sudo docker run hello-world
Docker engine 設定
確認虛擬機內 wsl.conf 設定
cat /etc/wsl.conf
要有以下的內容
|
|
接下來為了要讓我們可以直接從 windows 下指令,我們要在以下路徑追加設定
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo vi /etc/systemd/system/docker.service.d/tcp.conf
內容如下:
|
|
第一個 ExecStart=
這行設定不是誤植,是為了避免有別的地方已經有設定 ExecStart
導致執行時發生錯誤,若有衝突會有以下類似訊息:
docker.service: Service has more than one ExecStart= setting
更動完設定重啟 wsl
|
|
更動完設定後重啟 docker
|
|
確認服務的狀態 sudo service docker status
Host (Windows) 的設定
回到 windows 環境
|
|
這邊安裝 docker 主要是為了他的 docker.exe
執行檔,可以不用在 windows
身上將 dockerd
作為服務運行起來。
環境變數新增以下的值(新增成使用者變數就好):
|
|
注意事項
這邊 port 故意開 2377 而不是預設的 2375 是為了不要跟 Podman 打架,不然一次只能開一個起來。
兩個同時安裝起來後,雖然可以同時作用,但是 Podman desktop 卻無法作用,之前的下載的 image 跟 container 都消失了,這點目前還不知道原因。 Orz