Try   HackMD

install docker/nerdctl in wsl2 ubuntu22.04

如果不想在 windows 內安裝 docker-desktop 這個容器工具的話,可以考慮使用 WSL2 的 linux 來安裝、使用容器,以下是相關安裝命令。

除非特別切換到 root 進行操作,不然用預設使用者的話,docker / nerdctl 都需要加上 sudo 來操作。
docker / nerdctl 都有提供 rootless 的安裝方式,我尚未進行相關的安裝測試 有安裝的話再更新筆記上來。

wsl install

其他資訊請參閱微軟官方文件

wsl --update
wsl --install Ubuntu-22.04

接下來會要設定使用者與密碼,設定好後,直接輸入 wsl 即可進入 ubuntu 內部
(預設會進入你目前的資料夾,wsl 是可以直接使用 windows 內的資料的)

因為 wsl 開啟後,預設會進入的目錄是你剛剛執行 wsl 時所在的目錄,因為接下來的操作可能會要下載資料,可以先用 cd ~ 的命令進入 ubuntu 的預設使用者資料夾

docker

from package tool (apt-get)

offical doc-install-using-the-repository

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

manually install

offical doc-install-from-a-package

cd ~
curl -fsSLk https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.9-1_amd64.deb --output containerd.io_1.6.9-1_amd64.deb
curl -fsSLk https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.11.2-1~ubuntu.22.04~jammy_amd64.deb --output docker-buildx-plugin_0.11.2-1~ubuntu.22.04~jammy_amd64.deb
curl -fsSLk https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_24.0.7-1~ubuntu.22.04~jammy_amd64.deb --output docker-ce-cli_24.0.7-1~ubuntu.22.04~jammy_amd64.deb
curl -fsSLk https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_24.0.7-1~ubuntu.22.04~jammy_amd64.deb --output docker-ce_24.0.7-1~ubuntu.22.04~jammy_amd64.deb
curl -fsSLk https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.21.0-1~ubuntu.22.04~jammy_amd64.deb --output docker-compose-plugin_2.21.0-1~ubuntu.22.04~jammy_amd64.deb

sudo dpkg -i ./containerd.io_1.6.9-1_amd64.deb \
  ./docker-buildx-plugin_0.11.2-1~ubuntu.22.04~jammy_amd64.deb \
  ./docker-ce-cli_24.0.7-1~ubuntu.22.04~jammy_amd64.deb \
  ./docker-ce_24.0.7-1~ubuntu.22.04~jammy_amd64.deb \
  ./docker-compose-plugin_2.21.0-1~ubuntu.22.04~jammy_amd64.deb

# 安裝好後就已啟動,不需要 start
# sudo service docker start

set daemon.json

如果要設定 docker daemon.json 可以利用以下命令 (記得調整設定內容)

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
    "insecure-registries": [
        "{your-registries-domain}"
    ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

nerdctl

下載 nerdctl 大全套,裡面已包含必要的所有資源
可以參考官方發布頁面: 連結

cd ~

curl -fsSL https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-full-1.7.0-linux-amd64.tar.gz --output nerdctl-full-1.7.0-linux-amd64.tar.gz
# 如果因為憑證問題無法下載,可以用這個命令
# curl -fsSLk https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-full-1.7.0-linux-amd64.tar.gz --output nerdctl-full-1.7.0-linux-amd64.tar.gz
sudo tar Cxzvvf /usr/local nerdctl-full-1.7.0-linux-amd64.tar.gz

以下安裝會包含 buildkit,這樣才能建置容器
buildkit 相關資料可以查閱官方說明: 連結

install to root

sudo mkdir /etc/buildkit
cat <<EOF | sudo tee /etc/buildkit/buildkitd.toml
[worker.oci]
  enabled = false

[worker.containerd]
  enabled = true
  # namespace should be "k8s.io" for Kubernetes (including Rancher Desktop)
  namespace = "default"
EOF

sudo systemctl enable --now containerd

install to user

這邊我安裝會出錯,僅記錄

# 這個 sh 檔案已經在 tar 解壓的時候放到 /usr/local 了,所以可以直接執行
containerd-rootless-setuptool.sh install

## install log
[INFO] Checking RootlessKit functionality
[rootlesskit:parent] error: failed to setup UID/GID map: newuidmap 683 [0 1000 1 1 100000 65536] failed: : exec: "newuidmap": executable file not found in $PATH

ref