Windows Docker 最佳实践分享

1. 网络加速

Docker Desktop:Settings -> Resources -> Proxies -> ✅ Manual proxy configuration

镜像

推荐使用:毫秒镜像

其他汇总:目前国内可用Docker镜像源汇总(截至2025年1月) - CoderJia

2. 部署方式及路径统一

通过 docker compose 的方式进行部署,所有的compose.yml以及容器的数据都存储在一个文件夹下的不同 container 名称对应的文件夹下面,最终生成大概如下的数据结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
📂docker
├── 📂allinone
│   └── 📄compose.yml
├── 📂allinone_format
│   ├── 📄compose.yml
│   └── config
├── 📂ddns-go
│   └── 📄compose.yml
├── 📂moviepilot
│   ├── 📄compose.yml
│   ├── 📂config
│   └── 📂core
├── 📂portainer-ce
│   ├── 📄compose.yml
│   └── 📂data
├── 📂qbittorrent
│   ├── 📂appdata
│   └── 📄compose.yml
└── 📂qinglong
    ├── 📄compose.yaml
    └── 📂data

另外,我这里遇到的问题比较特殊,这里也列举出来,我是在 Win11 安装的 Docker Desktop,然后出于一些原因又安装了WSL2( Ubuntu 24.04.1 LTS)并且集成了 WSL integration,然后在 WSL 上面部署了一些 Docker 项目,这就导致了我的 compose.yml 很乱,绝对路径和相对路径两种写法混杂,另外 windows 的路径和 Ubuntu 的路径也都有,很不方便未来的迁移,于是我统一了 compose 文件中关于路径的处理,相关的流程如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
### 在 Windows PowerShell(管理员权限)中执行
mkdir C:\opt\docker
[Environment]::SetEnvironmentVariable("DOCKER_DIR", "C:\opt\docker", "User")

### 在 WSL 终端中执行
echo 'export DOCKER_DIR="/mnt/c/opt/docker"' >> ~/.bashrc
source ~/.bashrc

### WSL中执行迁移(假设原WSL项目在 /home/kiwi4814/docker/ )
sudo rsync -avh --progress /home/kiwi4814/docker/ /mnt/c/opt/docker/
sudo rm -rf ~/docker

### 在 Windows 验证迁移结果
dir C:\opt\docker

### 修改 compose.yml 文件
volumes:
  - "${DOCKER_DIR}/project_name/config:/config"
  - "${DOCKER_DIR}/project_name/data:/data"
  - "${DOCKER_DIR}/common:/shared"
  
### 验证 - windows
cd C:\opt\docker\project_name
docker-compose up -d
docker exec moviepilot cmd /c "dir C:\config"

### 验证 - WSL
cd /mnt/c/opt/docker/moviepilot
docker-compose up -d
docker exec -it moviepilot ls /config

### Docker项目迁移并重启
# 清理旧容器(保留数据卷)
docker compose down
# 这里是更新的命令,不更新则不执行
docker-compose pull
# 强制重建容器(使用新配置)
docker compose up -d --force-recreate
# 查看启动日志
docker-compose logs -f --tail=100

此外,在执行完上面的步骤之后,建议到 WSL 下去执行Docker容器的启动,因为有一些映射的绝对路径仍然必须使用 Ubuntu 下的绝对路径,比如使用 cifs-utils 挂载了 SMB 硬盘的路径以及 docker的套接字 /var/run/docker.sock等等。

3. 数据备份

在上一步把所有的 docker 配置及数据都存储在一个地方之后,就可以利用各种网盘的同步功能进行备份了,也可以用restic等开源项目来备份。

4. 数据清理

日志

镜像

常用的Docker项目

portainer-ce:docker管理工具,汉化版

containrrr/watchtower:自动更新Docker镜像

jeessy2/ddns-go:自动解析DNS,绑定域名

whyour/qinglong):青龙面板

golang-reverseproxy :Jrebel破解

自建服务

漫画:komga

音乐:navidrome

影视:Plexjellyfinjellyfin特供版

IPTV:youshandefeiyang/allinone+FanchangWang/allinone_format

系统相关

zzsrv/openwrt:PassWall & OpenClash,基于ImmortalWrt OpenWrt-23.05(每日更新)。

piaoyizy/openwrt-x86:基于Lean-X86最新源码编译,集成ssrplus+,openclash,passwall,

updatedupdated2025-02-122025-02-12
加载评论