# install docker/nerdctl in wsl2 ubuntu22.04
如果不想在 windows 內安裝 docker-desktop 這個容器工具的話,可以考慮使用 WSL2 的 linux 來安裝、使用容器,以下是相關安裝命令。
:::info
除非特別切換到 root 進行操作,不然用預設使用者的話,docker / nerdctl 都需要加上 sudo 來操作。
docker / nerdctl 都有提供 rootless 的安裝方式,我尚未進行相關的安裝測試...... 有安裝的話再更新筆記上來。
:::
## wsl install
> 其他資訊請參閱微軟官方文件
```bash
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](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)
```bash
# 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](https://docs.docker.com/engine/install/ubuntu/#install-from-a-package)
```bash
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 可以利用以下命令 (記得調整設定內容)
```bash
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 大全套,裡面已包含必要的所有資源
可以參考官方發布頁面: [連結](https://github.com/containerd/nerdctl/releases)
```bash
cd ~
curl -fsSL https://github.com/containerd/nerdctl/releases/download/v2.2.2/nerdctl-full-2.2.2-linux-amd64.tar.gz --output nerdctl-full-2.2.2-linux-amd64.tar.gz
# 如果因為憑證問題無法下載,可以用這個命令
# curl -fsSLk https://github.com/containerd/nerdctl/releases/download/v2.2.2/nerdctl-full-2.2.2-linux-amd64.tar.gz --output nerdctl-full-2.2.2-linux-amd64.tar.gz
sudo tar Cxzvvf /usr/local nerdctl-full-2.2.2-linux-amd64.tar.gz
```
以下安裝會包含 buildkit,這樣才能建置容器
buildkit 相關資料可以查閱官方說明: [連結](https://github.com/containerd/nerdctl/blob/main/docs/build.md)
### install to root
```bash
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
:::warning
這邊我安裝會出錯,僅記錄
:::
```bash
# 這個 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
- [WSL2にDocker代替のNerdCtl(containerd)を入れてみる(2023)](https://zenn.dev/dozo/articles/df36eb282969ec)