installing docker on wsl & ubuntu

325 阅读1分钟

需求要点

  • use a linux os ubuntu on window
  • use docker server on ubuntu
  • set docker registry-mirrors in china
  • set docker insecure-registries
  • set docker remote api

操作指南

install wsl and start wsl

note: get details on installing and setting wsl

# start and login wsl
wsl

install docker with apt on wsl & linux

# install
apt install docker.io -y
# apt remove docker.io -y 

# check
# docker --version
# docker info
# dockerd --version

# 20.10.21

note: what is docker.io vs docker-ce-cli,docker-ce,containerd.io ?

start docker service and enbale start on booting

systemctl start docker.service;systemctl enable docker.service;

check runing

docker ps
# or you can run others:
# docker run -ti --rm  alpine echo hello
# docker run -ti --rm  alpine /bin/sh

set docker registry-mirrors in china

# zero:task:s:exit /etc/docker/daemon.json
# add some txt as below
# WARN: NEXT CMD WILL OVERIDE IT.
# YOU CAN USE vim /etc/docker/daemon.json OR OTHER WAYS
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}
EOF
# zero:task:e:exit /etc/docker/daemon.json


msg="
# restart daemon-reload and docker to work after edting /etc/docker/daemon.json 
# if they are having starting.

systemctl daemon-reload;systemctl restart docker;
"
echo "$msg"

msg="
# to check docker mirror setting
# run next:

docker info
"
echo "$msg"

you can use all in one shell script :

restart daemon-reload and docker

systemctl daemon-reload ;systemctl restart docker;

set docker insecure-registries

# cat /etc/docker/daemon.json
{
  "insecure-registries": ["harbor.domain.io"]
}

# todo:
# dok-reg.sh [cmd] [domain]
dok-reg.sh use harbor.domain.io
dok-reg.sh use 127.0.0.1
dok-reg.sh del harbor.domain.io

set docker remote api

let docker client on window access docker server on wsl:

  • docker server enbale remote api
# "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],
# "hosts": ["tcp://127.0.0.1:2375","unix:///var/run/docker.sock"],
f=/etc/docker/daemon.json
cat > $f <<EOF
{
    "hosts": ["tcp://127.0.0.1:2375","unix:///var/run/docker.sock"],
}
EOF
# cat $f

f=/usr/lib/systemd/system/docker.service
cat $f | grep ExecStart=
bk="ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock"
n="ExecStart=/usr/bin/dockerd";
o="ExecStart=.*";
sed -iE "s,ExecStart=.*,$n,g" $f;

systemctl daemon-reload;systemctl restart docker;
  • docker client use relative context
# docker context --help
# docker context ls
docker context create wsl --docker "host=tcp://127.0.0.1:2375"
docker context use wsl
# docker context rm wsl

current /etc/docker/daemon.json

f=/etc/docker/daemon.json
cat > $f <<EOF
{
    "insecure-registries": ["127.0.0.1","harbor.domain.io"],
    "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
    "hosts": ["tcp://127.0.0.1:2375","unix:///var/run/docker.sock"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"50m","max-file":"3"
    }
}
EOF
# cat $f

uninstall docker

# uninstall soft
apt remove docker.io -y 
# delete docker containers,images,volumes
rm -rf /var/lib/docker
#
rm -rf /var/lib/containerd

rm -rf /etc/docker/daemon.json

all in one shell scripts


todir=./tool/wslubt-use-docker; 
tof="$todir/index.sh";
gcproxy="https://ghproxy.com/";
uri="${gcproxy}https://raw.githubusercontent.com/ymc-github/wslubt-use-docker/main/index.sh";  
mkdir -p "$todir"; curl -o "$tof" -s $uri; chmod +x "$tof";

# install docker
"$tof" install

# reset daemon config
"$tof" reset-cnf

# set docker remote api
"$tof" enable-remote-api

# get current daemon config
"$tof" cnf

# reload cnf
"$tof" reload-cnf

# remove docker
"$tof" remove

参考文献

Install Docker Engine on Ubuntu | Docker Documentation

将WSL2作为生产力工具

上篇阅读

installing wsl and setting

下篇阅读

developing in container on wsl & ubuntu (todo)

installing k8s on wsl & ubuntu (todo)

developing in k8s on wsl & ubuntu (todo)