用途
本技能提供 Docker 在 Windows、Linux、macOS 三大平台上的具体差异、注意事项和优化建议,帮助开发者在不同操作系统上正确配置和使用 Docker。适用于多平台开发、容器镜像跨架构构建以及生产部署前的平台适配参考。
使用约定
Docker 命令在各平台大致相同,但外围 shell 工具不同。本技能约定:在 docker exec / docker run 容器内,命令面向 Linux shell(容器本身运行 Linux);在宿主机(Linux / macOS / WSL2)示例使用 bash,配合 /dev/null、grep、sed、awk、apt-get、brew 等工具;在 Windows 原生 PowerShell 下需要替换写法,例如 /dev/null 改为 $null,grep pattern 改为 Select-String pattern,sed -i 's/a/b/' f 改为 (Get-Content f) -replace 'a','b' | Set-Content f,并且管道输出的是对象而非文本。Windows 上的 Docker Desktop 使用 WSL2 Linux 虚拟机,bash 示例可在 WSL 发行版内运行;PowerShell 用户仍可运行 docker CLI 本身,只需转换辅助的 Unix 工具。绑定挂载 Windows 路径时,需使用正斜杠或转义反斜杠,例如 -v C:/Users/me/code:/app 或 -v "C:\Users\me\code:/app",宿主机用 Windows 分隔符,容器路径始终为 Linux 风格。
Linux
优势包括:原生容器、无虚拟化层开销;最佳性能,直接使用内核特性(cgroups、namespaces);完整功能集;生产部署标准平台;支持多种发行版。
平台特性方面,容器技术使用 PID、network、IPC、mount、UTS、user 等命名空间,cgroups v1 与 v2 控制资源,推荐 overlay2 存储驱动,SELinux 与 AppArmor 提供强制访问控制。可通过 docker info | grep "Storage Driver" 查看当前驱动。
Daemon 配置(/etc/docker/daemon.json)可设置 storage-driver、log-driver、日志轮转(max-size、max-file)、live-restore、userland-proxy、userns-remap、icc、default-ulimits 等。启用用户命名空间重映射("userns-remap": "default")后,容器内 root 对应宿主机非特权用户,修改后需 sudo systemctl restart docker。
SELinux 集成:用 sestatus 检查状态,可用 --security-opt label=type:svirt_sandbox_file_t 运行容器,卷标签 :z 为私有、:Z 为共享。AppArmor 集成:用 sudo aa-status 检查,可用 --security-opt apparmor=docker-default 或自定义 profile(sudo aa-genprof)。
Systemd 集成:用 sudo systemctl status docker 查看状态,enable 开机启动,restart 重启,sudo journalctl -u docker -f 查看日志,sudo systemctl edit docker 配置服务。
cgroup 版本可通过 stat -fc %T /sys/fs/cgroup/ 检查;若使用 cgroup v2 需 Docker 版本不低于 20.10,可在 daemon.json 中设置 "exec-opts": ["native.cgroupdriver=systemd"]。
发行版安装方面,Ubuntu/Debian 通过官方 GPG key 与 apt 源安装 docker-ce、docker-ce-cli、containerd.io,并用 sudo usermod -aG docker $USER 支持非 root 用户;RHEL/CentOS/Fedora 通过 dnf 添加官方仓库并安装,然后用 systemctl 启动启用;Alpine 使用 apk add docker docker-compose 并配合 rc-update 与 service 命令启动。
macOS
架构上必须使用 Docker Desktop(macOS 无原生 Docker),虚拟化使用 HyperKit(Intel)或 Virtualization.framework(Apple Silicon),容器运行在轻量 Linux 虚拟机中,文件共享使用 osxfs 或 VirtioFS。
资源分配在 Docker Desktop → Preferences → Resources → Advanced 中设置,包括 CPU、内存(默认 2GB,建议 4-8GB)、Swap(至少 1GB)、磁盘镜像大小(开发建议 60GB 以上)。
文件共享性能方面,传统 osxfs 较慢,可启用 VirtioFS,并使用 delegated/cached 挂载:./src:/app/src:delegated 适合源代码,./build:/app/build:cached 适合构建输出,:consistent 最慢但最安全。容器访问宿主机可使用 host.docker.internal。
Apple Silicon(M1/M2/M3)为 ARM64 架构,部分镜像仅提供 AMD64 版本,可用 docker buildx build --platform linux/amd64,linux/arm64 构建多平台镜像,或用 --platform linux/amd64 以模拟方式运行 AMD64 镜像(较慢)。可在 Docker Desktop 中启用 Rosetta 2 加速 x86/amd64 模拟。Docker Desktop 建议设置包括登录时启动、使用 VirtioFS、使用 Virtualization framework,Docker Engine 可配置 builder gc、buildkit 等功能。
文件权限方面,macOS 用户 ID 通常为 501、组 ID 通常为 20,可在运行时用 --user 501:20 匹配,或在 Dockerfile 中创建对应用户。开发用 docker-compose 示例中,源代码使用 delegated 挂载,node_modules 使用命名卷以获得更好性能。常见问题包括文件同步慢(可启用 VirtioFS、使用 delegated/cached、依赖放入卷)、CPU 占用高(减少文件监视、排除大目录、增加资源)、端口占用(用 lsof -i :PORT 查找并 kill)。
Windows
Windows 具体细节(容器类型、WSL2、nanoserver / windowsservercore 镜像变体、授权、网络、挂载语义、Visual Studio 集成)参考 references/windows-platform-detail.md。要点包括:容器类型分为 Windows Server 容器(进程隔离)与 Hyper-V 容器(内核隔离);WSL2 后端是 Docker Desktop 默认选项,提供接近原生的 Linux 性能;镜像变体有 mcr.microsoft.com/windows/nanoserver(最小)与 windowsservercore(完整 API);挂载路径在 Git Bash 中需将 S: eposx 转换为 /s/repos/x,或设置 MSYS_NO_PATHCONV=1。
平台对比
性能:Linux 优秀(原生)、macOS 良好(有虚拟机开销)、Windows 从良好(WSL2)到一般(Hyper-V)。文件共享:Linux 原生,macOS 慢(VirtioFS 有所改善),Windows 慢(WSL2 更好)。资源效率 Linux 最佳,macOS 与 Windows(WSL2)良好。功能集三者均完整(Windows 通过 LCOW)。生产适用:Linux 为标准,macOS 与 Windows 主要用于开发。易用性:Linux 中等,macOS 与 Windows 借助 Docker Desktop 较为简单。成本方面资料列出均为免费(含 Docker Desktop Personal)。
跨平台最佳实践
多平台镜像:用 docker buildx create --name multiplatform --driver docker-container --use 创建构建器,再以 --platform linux/amd64,linux/arm64,linux/arm/v7 构建并 --push 推送。平台无关 Dockerfile:基于 node:20-alpine,使用 COPY --chmod=755(比 RUN chmod 更快),用环境变量管理路径,CMD/ENTRYPOINT 使用 exec 形式以兼容 Windows 容器。跨平台 Compose 文件使用相对路径与命名卷,并用环境变量(如 ${NODE_ENV:-development})。跨平台测试可用 buildx 分别构建 linux/amd64 与 linux/arm64 镜像并运行验证。
平台选择建议
Linux 适用于:生产部署、最佳性能、完整 Docker 功能、最小开销、CI/CD 流水线。macOS 适用于:在 Mac 硬件上开发、需要 macOS 工具、看重 Docker Desktop 易用性、M1/M2/M3 开发。Windows 适用于:在 Windows 硬件上开发、Windows 专用应用、团队使用 Windows 时,且建议用 WSL2 获得更好的 Linux 容器支持。
限制
本指南覆盖主要平台差异,上线生产前应始终在目标部署平台上测试。各平台的具体收费、价格与最新许可条款以官方为准,本文资料未提供详细收费信息。