Win11 Docker优化加固

📅 发布时间:2026/10/9 21:02:45
Win11 Docker优化加固
、Windows 11 下 Docker 通常是Docker Desktop WSL2 后端。优化加固的核心原则最小权限、最小镜像、最小暴露、资源限制、持续更新、审计备份。下面按“性能优化”和“安全加固”整理。一、基础环境保持更新Windows 11 更新。Docker Desktop 更新。WSL 更新wsl --update。更新 WSL 内核wsl --update --rollback可回滚谨慎。确认使用 WSL2 后端Docker Desktop → Settings → General → 勾选Use the WSL 2 based engine。不要使用已过时的 Hyper-V 后端除非有特殊兼容需求。不要启用危险选项不要勾选Expose daemon on tcp://localhost:2375 without TLS。不要随意勾选Allow the default Docker socket to be used。远程访问 Docker 必须走 SSH 或 TLS 认证。二、性能优化1. 配置 WSL2 资源在C:\Users\你的用户名\.wslconfig中配置[wsl2] memory8GB processors4 swap2GB localhostForwardingtrue # Windows 11 22H2 / WSL 2.0 可考虑 # networkingModemirrored # dnsTunnelingtrue # firewalltrue # autoProxytrue修改后执行wsl--shutdown注意memory、processors不要超过物理机资源的 50%~70%否则 Windows 本身会卡。2. 项目文件放在 WSL 文件系统内推荐\\wsl$\Ubuntu\home\user\project或直接在 WSL 内操作。避免把项目放在C:\Users\...再 bind mount 进容器跨文件系统 I/O 很慢。使用 VS Code Remote - WSL 或 Dev Containers。3. Docker Desktop 资源与磁盘Settings → Resources磁盘镜像放到 SSD。定期清理未使用数据。使用 named volume 代替大量 bind mount性能更好。如版本支持可尝试启用Use containerd for pulling and storing images但注意兼容性。4. 限制日志大小Docker Desktop → Settings → Docker Engine编辑daemon.json{log-driver:json-file,log-opts:{max-size:10m,max-file:3},no-new-privileges:true,default-ulimits:{nofile:{Name:nofile,Hard:65535,Soft:65535}}}保存后重启 Docker Desktop。5. 定期清理dockersystemdfdockersystem prune-adockervolume prunedockernetwork prune生产环境慎用-a和--volumes先确认无重要数据。6. 构建优化使用多阶段构建。使用.dockerignore排除.git、node_modules、日志、密钥。使用 BuildKitDOCKER_BUILDKIT1dockerbuild-tapp.缓存挂载RUN --mounttypecache,target/root/.cache pip install -r requirements.txt固定基础镜像版本避免latest。三、安全加固1. Docker Desktop 设置启用登录和团队管理企业建议 Docker Business。如订阅支持启用Enhanced Container Isolation (ECI)可防止容器提权到 Docker Desktop VM。如版本支持可启用Rootless Docker模式。限制文件共享范围不要共享整个 C 盘。关闭不需要的 Kubernetes、实验特性。2. 容器运行时最小权限运行容器时尽量使用dockerrun--rm-it\--user1000:1000\--read-only\--tmpfs/tmp:rw,noexec,nosuid,size64m\--cap-dropALL\--security-opt no-new-privileges:true\--pids-limit100\--memory512m\--cpus1\--network自定义网络\-p127.0.0.1:8080:8080\nginx:alpine要点--user非 root 运行。--read-only根文件系统只读。--tmpfs临时目录可写但禁止执行。--cap-dropALL删除所有 Linux capabilities需要时再--cap-add。--security-opt no-new-privileges:true禁止提权。--pids-limit、--memory、--cpus防止资源耗尽。-p 127.0.0.1:8080:8080只绑定本机不要暴露到0.0.0.0。Docker Compose 示例services:app:image:myapp:1.0.0user:1000:1000read_only:truetmpfs:-/tmp:noexec,nosuid,size64mcap_drop:-ALLsecurity_opt:-no-new-privileges:truepids_limit:100mem_limit:512mcpus:1.0ports:-127.0.0.1:8080:8080restart:unless-stopped3. 禁止高风险操作不要使用--privileged。不要挂载/var/run/docker.sock到容器这等于给容器宿主机 root 权限。不要挂载 Windows 敏感目录C:\、C:\Users、/mnt/c。不要使用--nethost除非明确需要且理解风险。不要以 root 运行容器。4. 镜像与供应链安全使用官方或可信镜像。固定版本或 digestFROM alpine:3.19sha256:...扫描漏洞dockerscout cves myapp:1.0.0 trivy image myapp:1.0.0 grype myapp:1.0.0生成 SBOMsyft myapp:1.0.0-ospdx-jsonsbom.json签名验证cosign sign myapp:1.0.0 cosign verify myapp:1.0.05. Secrets 管理不要把密钥写进 Dockerfile、镜像或环境变量。使用 Docker secretssecrets:db_password:file:./db_password.txtservices:app:secrets:-db_password构建时使用 BuildKit secretRUN --mounttypesecret,idmysecret cat /run/secrets/mysecret6. 网络加固使用自定义网络不要依赖默认 bridge。不需要网络的容器--network none。限制端口暴露只绑定127.0.0.1。如不需要容器间通信可考虑iccfalse但会破坏 Compose 默认网络需测试。企业环境使用网络策略、服务网格或防火墙限制。7. WSL 与 Windows 加固WSL 默认用户不要用 root# /etc/wsl.conf [user] defaultyouruser如不需要访问 Windows 文件可减少 automount[automount] enabledfalse但会影响 Docker Desktop 文件共享谨慎。Windows 启用BitLockerSecure BootTPMWindows Defender 防火墙受控文件夹访问日常使用标准用户不要一直用管理员。定期检查防火墙规则Docker Desktop 可能创建入站规则。8. 审计与监控查看容器资源dockerstatsdockereventsdockerlogscontainer集中日志Loki、ELK、Fluent Bit。监控cAdvisor Prometheus Grafana。Windows 日志事件查看器 → 应用程序和服务日志 → Docker。Docker Desktop 日志%AppData%\Docker\log。四、备份与恢复备份镜像dockersave myapp:1.0.0-omyapp.tardockerload-imyapp.tar备份卷dockerrun--rm-vmyvolume:/data-v${PWD}:/backup alpine\tarczf /backup/myvolume.tar.gz-C/data.备份 WSL 发行版wsl--list--verbose wsl--export docker-desktop-dataD:\backup\docker-desktop-data.tar注意 Docker Desktop 版本不同发行版名称可能变化。备份配置.wslconfigdaemon.jsonDocker Desktop 设置Compose 文件五、推荐检查清单Docker Desktop、WSL、Windows 均为最新。使用 WSL2 后端。未开启 2375 无 TLS 端口。项目在 WSL 文件系统内。配置了日志轮转和资源限制。容器非 root、只读根文件系统、cap-drop ALL。未挂载 docker.sock、未使用 privileged。端口只绑定 127.0.0.1。镜像固定版本并扫描漏洞。密钥使用 secrets不硬编码。定期清理和备份。企业环境启用 ECI、SSO、策略管理。总结性能靠 WSL2 资源调优、文件系统位置、日志轮转和构建缓存安全靠非 root、只读、cap-drop、no-new-privileges、资源限制、镜像扫描、网络最小暴露和持续更新。