Docker 作為目前程序員的必備技能,已經被廣泛使用。使用 WSL2 直接安裝運行社區版本 Docker ,比安裝 Docker Desktop 更加節省空間,且啟動速度更快。本文將介紹如何在 Debian WSL2 上安裝使用社區版 Docker。
安裝 Docker 其實主要關注幾個問題:1. 安裝源的國內鏡像使用。 2. Docker Image 倉儲的國內鏡像配置。 3. WSL2 啟動 Docker 時的兼容性設置。
安裝
Docker 的國內軟件源有很多,各大鏡像站都有,如:
http://mirrors.cloud.tencent.com/docker-ce / http://mirrors.aliyun.com/docker-ce / http://mirrors.ustc.edu.cn/docker-ce
安裝時照着官方文檔 Install Docker Engine on Debian 來操作就行了,只是將相關網站替換為鏡像網址。以阿里雲軟件源為例,安裝的命令行如下:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \
$(lsb_release -cs) 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
WSL2 兼容性配置
執行了上述命令,你應該已經安裝完成了,可是執行 service docker start 應該是會報錯的,你還需進行一下兼容性設置。主要是創建 fstab 文件,以及設置 iptables 為 legacy 模式。以使 Docker 能夠在 WSL2 上正常啟動。
sudo apt install iptables
sudo touch /etc/fstab
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
此時你已經可以通過 root 權限使用 service docker start 啟動 Docker 服務,並正常使用。
權限設置
如果你的默認賬戶不是 root,如果想要不通過 sudo 使用 docker 命令,你還需要將用戶加入 docker 用戶組。
sudo usermod -aG docker $USER && newgrp docker
在 WSL2 中,docker 發布的服務端口可以正常映射到宿主機的 localhost 的相同端口上,和正常使用 Docker Desktop 一樣。
daemon.json 配置
Docker 鏡像倉儲國內訪問速度不佳,國內鏡像倉儲代理服務有很多,阿里雲,daocloud,中科大,網易都有。這里列幾個:
https://docker.mirrors.ustc.edu.cn
http://f1361db2.m.daocloud.io
http://hub-mirror.c.163.com
除了鏡像加速外,我一般還會設置日志文件的 max-size ,以及 cgroupdriver 。
max-size 配置可以防止日志文件過大
native.cgroupdriver 可選 cgroupfs 和 systemd 兩個選項,詳見 (Docker 文檔的 Options for the runtime 小節)[https://docs.docker.com/engine/reference/commandline/dockerd/#docker-runtime-execution-options]。systemd 用於 cgroup v2 host ,而 wsl 由於目前不兼容 systemd ,只能選擇cgroupfs 。在生產環境的服務器上,應優先使用 systemd 選項。雖然 cgroupfs 目前是docker的默認選項,我還是會特別指定它。
sudo mkdir /etc/docker/
MIRROR=https://docker.mirrors.ustc.edu.cn
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["$MIRROR"],
"insecure-registries": ["192.168.196.110:5000"]
}
EOF
至此,本教程結束了,你可以通過 sudo service docker start
啟動 docker,enjoy 。