Docker Desktop 学习笔记

基础配置

先安装 WSL2

然后去 docker 官网下载 docker desktop

安装好之后修改配置:


  1. 修改拉取的镜像位置

settings ——> Advanced ——> Resources ——> Disk image location

这里修改为 D:\docker\DockerDesktopWSL


  1. 修改文件共享位置

settings ——> Resources ——> File sharing

这里修改为 D:\docker\file sharing


  1. 修改 docker hub 镜像

settings ——> Docker Engine

这里是 docker hub 镜像位置,去华为云镜像中心右上角的镜像加速器那儿复制镜像网址,让后填入其中


概念讲解

使用 vaultwarden 的 docker 部署命令来解释

docker pull vaultwarden/server:latest
docker run --detach --name vaultwarden \
  --env DOMAIN="https://vw.domain.tld" \
  --volume D:/workspace/vaultwarden_backupdata:/data/ \
  --restart unless-stopped \
  --publish 127.0.0.1:8000:80 \
  vaultwarden/server:latest

查看是否挂载成功的命令

docker exec -it vaultwarden ls -l /data

镜像

从 docker hub 拉取下来就是镜像,例如 docker pull vaultwarden/server:latest 命令,就是拉取了 vaultwarden 的最新版本

存储位置是 Disk image location 下的 vhdx 文件中,我已经把 Disk image location 修改为了 D:\docker\DockerDesktopWSL,所以是存储在这个路径下

容器

创建一个容器来运行镜像,例如

docker run --detach --name vaultwarden

存储位置也是 Disk image location 下的 vhdx 文件中,我已经把 Disk image location 修改为了 D:\docker\DockerDesktopWSL,所以是存储在这个路径下

这个目录是存储服务器持久化数据的地方,也是 Windows 宿主机所在路径

--volume D:/docker/DockerDesktopWSL/:/data/ 就是卷所在目录,冒号之前的就是自定义路径,冒号之后的得翻阅文档才能确定

卷的路径需要在运行容器时自定义,不想前两个可以全局化配置

类型 示例 位置 适用场景
Docker 管理的 Volume docker volume create mydata 存在 WSL2 的 docker/volumes 最稳定、性能好
绑定挂载(Bind Mount) D:/your-vaultwarden-data:/data 你本地 Windows 文件夹 方便查看和备份

容器的文件系统是 临时的:

为了让重要数据 不跟着容器一起消失,Docker 提供了 Volume。

我使用的是 bind mount。

对于 Vaultwarden,它完全适合使用 bind mount,因为方便你在 Windows 上备份和同步。

Volume 就是用来存“容器生命周期之外仍要保存的数据”

比如数据库内容、上传文件、配置、密钥等

容器删了没关系,Volume 里的数据还在

--env DOMAIN="https://vw.domain.tld"

给容器里的程序设置一个环境变量。

容器内能看到:

DOMAIN=https://vw.domain.tld

--publish 127.0.0.1:8000:80

端口映射:

所以在 Windows 打开:

http://localhost:8000

如果想要让同局域网下的其它设备访问的话就去除 127.0.0.1: 字段,只保留 --publish 8000:80,意思是映射到 8000 端口

然后在同局域网下的其它设备访问 http://<你的WindowsIP地址>:<宿主机端口>,其中 Windows IP 地址是打开 pwsh,输入 ipconfig 就可查看 ip 地址

--restart unless-stopped

自动重启策略:

容器和镜像存储在 Disk image location 下,服务器持久化数据存储在 volume 下

docker 删除缓存

构建缓存(Build Cache)

当你用 docker build 时,会产生很多分层缓存,用来加速下次 build。

特点:

docker builder prune -a

未使用的镜像(unused image)

包括:

docker image prune -a

停止的容器(stopped containers)

停止的容器不是在运行,也没有用处。

docker container prune

未使用的网络(unused networks)

只是 Docker 创建但容器没有使用的网络。

docker network prune

安全清理的一键命令

它会清理:

不删 volumes,所以很安全。

docker system prune -a

清除 volumes 的命令要极度小心

docker volume prune

docker 的通俗理解

真实含义 类比 存放位置 删除会丢失吗?
镜像(Image) VSCode 安装包/程序本体 Disk image location(vhdx) 删除不会影响 volume
容器本体(容器的 rootfs) VSCode 进程运行时的临时数据 Disk image location(vhdx) 删除不会影响 volume
Volume(持久化数据) VSCode 打开的项目文本文件 Windows 本地磁盘 ✔ 永远不会因容器删除而丢失
Bind mount(你用的方式) Windows 上的真实文件夹 Windows 本地磁盘 ✔ 永远不会因 Docker 行为丢失