记录docker安装配置使用

上一级页面:index-wsl

前言

首先安装wsl2,index-wsl

docker搭配wsl2使用,Docker在wsl2中支持两种安装方式,具体见:Docker在wsl2中支持两种安装方式

本文推荐使用Windows docker desktop搭配WSL2的方式,下文将其称为Docker for windows desktop

此种方式是通过使用内网穿透,使得Linux成功挂载上windows端的docker,并且在Linux中使用docker命令。

什么是Docker for windows Desktop

现在我们已经安装了WSL2,

我们可以在Docker Desktop for Windows上配置它。

Windows 子系统 for Linux (WSL) 2 引入了一个重大的体系结构更改,因为它是 Microsoft 构建的完整 Linux 内核,允许 Linux 容器在没有仿真的情况下本机运行

Docker Desktop 使用 WSL 2 中的动态内存分配功能来大大提高资源利用率

这意味着 Docker Desktop 仅使用所需的 CPU 和内存资源量,同时使 CPU 和内存密集型任务(如构建容器)能够更快地运行。

此外,在 WSL 2 中,冷启动后启动 Docker 守护程序所需的时间要快得多启动 Docker 守护程序只需不到 10 秒,而在以前版本的 Docker Desktop 中则需要近 1 分钟。

另外一种docker安装方式,使用原生的linux 容器

本文主要介绍官方推荐的Docker for windows Desktop搭配WSL2的方式,

而对于另外一种方式,见安装与配置-docker-for-liunx-wsl

安装配置docker & wsl2

官方的docker & WSL2文档请见:WSL 上的 Docker 容器入门 | Microsoft Docs

跟随官方文档开始配置:

如果您运行的是受支持的系统,Docker 将在初始化期间提示您启用 WS2。

若要安装 Docker(在已安装 WSL 之后):

  1. 下载 Docker Desktop 并按照安装说明进行操作。

  2. 安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。 Docker Desktop dashboard icon

  3. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。 Docker Desktop general settings

  4. 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。 Docker Desktop resource settings

配置网络代理

docker build 中,经常要拉取的一下开发工具也下载很慢或者无法下载, 这时候可以使用代理进行下载

您的docke可以设置一个网络代理,可以使用一个脚本,具体见index-proxy

或者使用docker官方提供的WSL Integration,具体见为docker-wsl-integration设置代理

配置镜像加速服务器

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。

国内各大云服务商(腾讯云、阿里云、百度云)均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考本页最后一小节。

建议阅读文档:镜像加速器 - Docker — 从入门到实践 (gitbook.io)

添加镜像服务器,以提供对二进制文件下载的加速服务

1
2
# 为docker设置镜像
sudo mkdir -p /etc/docker && echo -e '{\n "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"]\n}' | sudo tee /etc/docker/daemon.json

测试docker是否安装成功

若要确认已安装 Docker,请打开 WSL 发行版(例如 Ubuntu)

在WSL发行版的shell中输入 docker --version 来显示版本和内部版本号

通过使用 docker run hello-world 运行简单的内置 Docker 映像,测试安装是否正常工作

Pasted%20image%2020220512224430.png
成功运行会显示如同的提示

一个docker测试程序

docker官方有全面的文档Docker Documentation | Docker Documentation

按照docker文档所说的,测试第一个docker程序Orientation and setup | Docker Documentation

1
docker run -d -p 80:80 docker/getting-started

注意防火墙
Pasted%20image%2020220512223533.png

打开docker for windows desktop

跟随文档访问Docker 仪表板

Pasted%20image%2020220512223841.png
成功进入仪表盘,说明docker配置完成了

Pasted%20image%2020220512223955.png

docker 从入门到实战

docker作为成熟的商业产品,已经有了许多优秀的教程,这里给出一些推荐。

前言 - Docker — 从入门到实践 (gitbook.io)

Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)

需要了解的有用 Docker 命令

下面是一些需要了解的有用 Docker 命令:

通过输入以下命令列出 Docker CLI 中可用的命令:

1
docker

使用以下命令列出特定命令的信息:

1
docker <COMMAND> --help

使用以下命令列出计算机上的 docker 映像(此时仅为 hello-world 映像):

1
docker image ls --all

使用以下命令列出计算机上的容器:

1
docker container ls --all

1
docker ps -a

(如果没有 -a 显示全部标志,则仅显示正在运行的容器)

使用以下命令列出有关 Docker 安装的系统范围的信息,包括 WSL 2 上下文中你可使用的统计信息和资源(CPU & 内存):

1
docker info

让容器内的软件使用代理

配置 ENV 变量

让容器内的软件使用代理

1
2
3
4
5
ENV http_proxy "http://host.docker.internal:1080"
ENV HTTP_PROXY "http://host.docker.internal:1080"
ENV https_proxy "http://host.docker.internal:1080"
ENV HTTPS_PROXY "http://host.docker.internal:1080"
ENV ALL_PROXY "http://host.docker.internal:1080"

注意: **这里的 host.docker.internal 解析出来的是主机 IP, **

MacOS 中可以使用 docker.for.mac.localhost,

Win 环境中使用 docker.for.win.localhost

host 网络模式–使用宿主网络

直接使用 ENV 命令固然能解决方法, 但是硬编码会导致各种环境需要相应修改,

docker 中还有一种 host 网络模式, 让 container 使用宿主机的网络,

这里 docker build --network host . 也可以相应配置上

1
2
3
4
5
6
7
export http_proxy="http://host.docker.internal:1080"
export HTTP_PROXY="http://host.docker.internal:1080"
export https_proxy="http://host.docker.internal:1080"
export HTTPS_PROXY="http://host.docker.internal:1080"
export ALL_PROXY="http://host.docker.internal:1080"

docker build --network host .

删除停止的容器

在docker中,停止的容器不会自动删除

我们可以使用 docker ps -a 查看所有的容器状态

1
2
3
4
5
6
[root@localhost ~]# docker ps -a
CONTAINER ID ... STATUS ...
e66458d65564 ... Up 8 minutes ...
4558b3b54da0 ... Exited (137) 31 minutes ago ...
e08201b591cd ... Exited (0) 45 minutes ago ...
6801e4604a32 ... Exited (0) About an hour ago ...

那些 STATUS 栏以 Exited 开头的都是已经退出停止了的容器

我们可以使用下面的命令删除容器 6801e4604a32

已经停止的容器并不会自动删除,而是需要我们手动删除它们,这时候就要用到 docker rm 命令了

1
docker rm <container_id>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@DESKTOP-VD0NEOU:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c5276bd917d pch18/baota "/bin/sh -c /entrypo…" 6 minutes ago Created baota
0413ec227379 pch18/baota "/bin/sh -c /entrypo…" 9 minutes ago Created cool_pascal
9bb36caff4ac pch18/baota "/bin/sh -c /entrypo…" 14 minutes ago Created xenodochial_carson
a69e5ef43550 tobegit3hub/seagull "./seagull" 23 minutes ago Up 23 minutes 0.0.0.0:10086->10086/tcp suspicious_boyd
b0e4bb08dadb jrohy/v2ray "./run.sh" 52 minutes ago Up 52 minutes v2ray
2f45c7a2c4f3 alpine/git "git clone https://g…" 5 hours ago Exited (0) 5 hours ago repo
7daf9f9bc912 hello-world "/hello" 6 days ago Exited (0) 6 days ago kind_keldysh
a8da93bbf923 docker/getting-started "/docker-entrypoint.…" 6 days ago Exited (255) 6 days ago 0.0.0.0:80->80/tcp nice_albattani
root@DESKTOP-VD0NEOU:~# docker rm 0413ec227379
0413ec227379
root@DESKTOP-VD0NEOU:~# docker rm 7c5276bd917d
7c5276bd917d
root@DESKTOP-VD0NEOU:~# docker rm 9bb36caff4ac
9bb36caff4ac
root@DESKTOP-VD0NEOU:~#

有一点需要注意,docker rm 命令只能删除已经停止的容器的 ID,还未停止的容器会报错

1
docker kill 容器id

报错解决

test

参考、引用、致谢

适用于 Linux 的 Windows 子系统 Windows 10 安装指南

https://docs.microsoft.com/en-us/windows/wsl/install-win10

更新 WSL 2 Linux 内核

https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel

Docker for Windows 入门

https://docs.docker.com/docker-for-windows/

Docker Desktop WSL 2 后端

https://docs.docker.com/docker-for-windows/wsl/

https://www.twle.cn/l/yufei/docker/docker-basic-container-rm.html