安装

参考: docker 从入门到实践

1、win

1.1、docker安装
  1. 环境配置
    • 启用 WSL 相关功能
      • 按下 Win + R,输入 optionalfeatures 打开「Windows 功能」窗口,勾选选项: 适用于 Linux 的 Windows 子系统
      • 命令行操作(管理员权限 PowerShell): wsl --install
    • WSL 功能升级(如有)
      • 命令行操作(管理员权限 PowerShell): winget install Docker.DockerDesktop
  2. 下载安装
    • 手动下载安装:点击以下 下载链接 下载 Docker Desktop for Windows
    • 命令行操作(管理员权限 PowerShell):
1.2、配置镜像加速

Settings -> Docker Engine 添加

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://mirror.gcr.io",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://dockerproxy.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn"
  ]
}

点击 Apply & Restart 保存

1.3、配置中文
  1. 下载对应版本中文语言包
  2. 关闭Docker Desktop
  3. 在Docker安装目录找到app.asar文件并将其备份,防止出现意外。
    • Windows下默认为C:\Program Files\Docker\Docker\frontend\resources
    • Macos下默认为/Applications/Docker.app/Contents/MacOS/Docker Desktop.app/Contents/Resources
    • Ubuntu/Debian下默认为/opt/docker-desktop/resources
  4. 将从仓库下载的asar文件改名为app.asar后替换原文件

2、Linux

2.1、卸载旧版本
# ubuntu / Debian
sudo apt-get remove docker \
               docker-engine \
               docker.io
############################################################
############################################################
# Fedora
sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
############################################################
############################################################
# CentOS
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
2.2、直接安装
2.2.1、安装必要依赖
# ubuntu / Debian
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
############################################################
############################################################
# Fedora
sudo dnf -y install dnf-plugins-core
############################################################
############################################################
# CentOS
sudo yum install -y yum-utils
############################################################
############################################################
# Raspberry Pi
sudo apt-get update
sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     lsb-release \
     software-properties-common
2.2.2、安装
  1. 添加 Docker 官方 GPG Key

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
    | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    如果 IPv6 网络不稳定,可强制 IPv4:

    sudo sh -c 'echo "Acquire::ForceIPv4 \"true\";" > /etc/apt/apt.conf.d/99force-ipv4'
    
  2. 添加 Docker 软件源

    echo \
      "deb [arch=$(dpkg --print-architecture) \
      signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
      https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" \
    | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. 安装 Docker 引擎

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
    
  4. 验证 Docker 是否正常运行

    检查服务状态:

    sudo systemctl status docker
    

    运行测试容器:

    sudo docker run hello-world
    

    出现 Hello from Docker! 表示安装成功 ✅

  5. 用户配置

    # 建立 docker 用户组
    sudo groupadd docker
    # 将当前用户加入 docker 组
    sudo usermod -aG docker $USER && newgrp docker
    
2.3、国内源安装
# ubuntu 
# 添加软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 向 sources.list 中添加 Docker 软件源
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# echo \
#   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
#   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# apt直接安装
sudo apt-get update 
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Debian 
# 添加软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 向 sources.list 中添加 Docker 软件源
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# echo \
#   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
#   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# apt直接安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Fedora 
# 添加 dnf 软件源
sudo dnf config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/fedora/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo dnf config-manager \
#    --add-repo \
#    https://download.docker.com/linux/fedora/docker-ce.repo

# 需要测试版本的 Docker 请使用以下命令
sudo dnf config-manager --set-enabled docker-ce-test
# 禁用测试版本的 Docker
sudo dnf config-manager --set-disabled docker-ce-test

# dnf 直接安装
sudo dnf update
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装指定版本的 Docker
dnf list docker-ce  --showduplicates | sort -r
# docker-ce.x86_64          18.06.1.ce-3.fc28                     docker-ce-stable
sudo dnf -y install docker-ce-18.06.1.ce

# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# CentOS
# 添加 yum 软件源
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
#     --add-repo \
#     https://download.docker.com/linux/centos/docker-ce.repo
# 如果需要测试版本的 Docker 请执行以下命令
sudo yum-config-manager --enable docker-ce-test

# 更新 yum 软件源缓存,并安装 docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# CentOS8 额外设置
# 由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables
# 更改 /etc/firewalld/firewalld.conf
# FirewallBackend=nftables
FirewallBackend=iptables
# 或者执行如下命令:
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload

# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Raspberry Pi
# 软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/raspbian/gpg | sudo apt-key add -
# 官方源
# curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
# 向 sources.list 中添加 Docker 软件源
sudo add-apt-repository \
    "deb [arch=armhf] https://mirrors.aliyun.com/docker-ce/linux/raspbian \
    $(lsb_release -cs) \
    stable"
# 官方源
# sudo add-apt-repository \
#    "deb [arch=armhf] https://download.docker.com/linux/raspbian \
#    $(lsb_release -cs) \
#    stable"

# apt直接安装
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
2.4、设置镜像加速
# 配置镜像加速器
sudo vim /etc/docker/daemon.json
# 添加以下内容
{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://mirror.gcr.io",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://dockerproxy.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
    	"https://docker.mirrors.ustc.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://index.docker.io/v1/"
    ]
}
# 注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动 可以使用以下命令测试
python3 -m json.tool /etc/docker/daemon.json > /dev/null && echo "JSON 格式正确" || echo "JSON 格式错误!"
# 重新启动服务
sudo systemctl daemon-reload && sudo systemctl restart docker
2.5、启动及测试
# ubuntu / Debian / Fedora / CentOS
# 启动
sudo systemctl enable docker && sudo systemctl start docker
# 建立 docker 用户组
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER && newgrp docker
# 测试 Docker 是否安装正确
docker run --rm hello-world
# 测试 Docker 版本号
docker --version
docker compose version

3、卸载软件

# 卸载 Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io -y && sudo apt-get autoremove -y
# 删除残留文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

4、daemon.json 配置示例

4.1、Linux

​ 以下是完整且实用的基于Linux 环境的Docker daemon.json 配置示例,包含镜像加速、存储驱动、日志管理、安全设置等核心功能

{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://mirror.gcr.io",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://dockerproxy.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://index.docker.io/v1/"
    ],
    "storage-driver": "overlay2",
    "data-root": "/mnt/nvme/my-project/project-docker/docker-log",
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3",
        "compress": "true"
    },
    "default-shm-size": "64m",
    "icc": false,
    "live-restore": true,
    "experimental": true,
    "metrics-addr": "127.0.0.1:9323",
    "debug": false,
    "insecure-registries": [
        "my-private-registry:5000"
    ]
}

配置说明:

  1. 镜像加速
    registry-mirrors:配置多个国内镜像源,提升拉取速度。

  2. 存储配置

    • storage-driver:存储驱动配置,指定 Docker 存储容器和镜像的驱动类型。

      • 配置值:

        • overlay2(推荐,适用于大多数 Linux 系统,基于分层存储,性能较好)。
        • aufs(旧版系统常用,现已逐渐被淘汰)。
        • btrfs/zfs(适用于特定文件系统场景)。
      • 注意事项:

        • 若内核版本低于 4.0,overlay2 可能需要开启内核参数 overlay2.override_kernel_check=true(通过 storage-opts 配置)。
        • 选择驱动前需确认系统文件系统支持(如 ext4/xfs 支持 overlay2)。
    • data-root:更改 Docker 数据存储位置,避免根分区空间不足。

      • 配置值:
        • 默认路径为 /var/lib/docker
      • 注意事项:
        • 建议配置到非系统盘(如独立分区或 SSD),避免占用根目录空间。
        • 修改后需确保目录存在且 Docker 服务有写入权限,首次修改需重启 Docker 服务。
  3. 日志管理

    • 限制单个容器日志大小,防止磁盘被占满。

    • log-driver:

      • 指定容器日志的驱动类型,json-file 为默认格式,将日志存储为 JSON 文件。
    • log-opts:

      • 配置日志文件的大小、数量和压缩策略。
    • 配置示例:

      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",    // 单个日志文件最大 10MB
        "max-file": "3",      // 保留最近 3 个日志文件
        "compress": "true"    // 启用日志压缩
      }
      
    • 注意事项:

      • 若容器日志量较大,建议调整 max-size 和 max-file 避免磁盘爆满。
      • 生产环境可改用syslog 或 gelf 等驱动,将日志转发到集中式日志系统(如 ELK)。
  4. 容器资源配置

    • default-shm-size:设置容器默认的 /dev/shm 共享内存大小,用于容器内进程间通信。

    • 配置示例:

      "default-shm-size": "64m"  // 64MB(默认值为 64MB,可根据应用需求调整)
      
    • 注意事项:

      • 若容器运行图形界面程序(如 Chrome)或大数据处理任务,需适当增大此值(如 256m 或 1g)。
  5. 安全增强

    • icc:控制容器间是否允许直接通信(icc 为 inter-container communication 的缩写)。

      • 配置示例:
        • false(默认值,禁止容器间直接通信,需通过网络别名或自定义网络实现通信,如通过 --network 显式配置)。
        • true(允许同一主机上的容器通过 IP 直接通信,存在安全风险)。
      • 注意事项:
        • 生产环境建议保持 false,并通过 docker network create 创建自定义网络(如 bridge 网络)实现可控通信。
    • live-restore:启用后,Docker 服务重启时会尝试恢复正在运行的容器(需配合 --restart 策略)。

      • 配置示例:

        "live-restore": true  // 建议生产环境开启,提升服务可用性
        
      • 注意事项:

        • 需确保容器配置了--restart unless-stopped等重启策略。
        • 部分存储驱动(如 devicemapper)可能不支持此功能。
  6. 用户命名空间映射

    • userns-remap:启用用户命名空间(User Namespace)映射,将容器内的 root 用户映射到宿主机的非 root 用户,增强安全性。

      • 配置示例:

        "userns-remap": "default"  // 使用默认映射规则(需提前在 `/etc/subuid` 和 `/etc/subgid` 配置用户范围)
        
      • 注意事项:

        • 配置前需通过 useradd 或文件配置创建非 root 用户范围(如 dockeruser:100000:65536)。
        • 启用后可能影响容器对宿主机文件的访问权限,需谨慎测试。
  7. 实验特性与调试

    • experimental:启用 Docker 的实验性特性(如 BuildKit 构建、新容器运行时等)。

      • 配置示例:

        "experimental": true  // 需配合 `DOCKER_CLI_EXPERIMENTAL=enabled` 环境变量使用
        
      • 注意事项:

        • 实验特性可能不稳定,生产环境不建议开启。
        • 部分特性需要 Docker 引擎和 CLI 版本均支持。
    • debug:启用 Docker 守护进程的调试模式,输出更详细的日志(用于排查问题)。

      • 配置示例:

        "debug": false  // 生产环境保持关闭,避免泄露敏感信息
        
  8. 私有仓库与监控

    • insecure-registries:配置非 HTTPS 的私有镜像仓库地址,允许 Docker 直接访问(存在安全风险)。

      • 配置示例:

        "insecure-registries": ["my-private-registry:5000"]  // 私有仓库 IP 或域名:端口
        
      • 注意事项:

        • 仅建议在可信的内部网络中使用,公网环境需配置 HTTPS 证书。
        • 若私有仓库使用自签名证书,需将证书复制到 /etc/docker/certs.d/ 目录
    • metrics-addr:配置 Docker 指标的暴露地址,用于监控工具(如 Prometheus)抓取数据。

      • 配置示例:

        "metrics-addr": "127.0.0.1:9323"  // 仅允许本地访问(推荐)
        
      • 注意事项:

        • 若需远程访问,需替换为 0.0.0.0:9323,但需注意防火墙和认证安全。
        • 指标格式符合 OpenMetrics 标准,可通过 curl http://127.0.0.1:9323/metrics 验证。

使用方法:

  1. 创建或编辑配置文件:

    sudo mkdir -p /etc/docker
    sudo vim /etc/docker/daemon.json
    

    粘贴上述配置内容,并保存退出。

  2. 重启 Docker 服务:

    sudo systemctl daemon-reload      # 重新加载 systemd 配置
    sudo systemctl restart docker     # 重启 Docker
    
  3. 验证配置是否生效:

    sudo systemctl status docker      # 查看 Docker 服务状态
    docker info                        # 验证配置是否生效
    
4.2、Windows

​ 以下是针对 Windows 系统的 Docker daemon.json 完整配置示例 及详细讲解,结合 Windows 平台特性和官方文档要求优化配置:

{
    // 国内镜像加速(推荐配置多个源)
    "registry-mirrors": [
        "https://registry.docker-cn.com",          // 阿里云
        "https://docker.mirrors.ustc.edu.cn",     // 中国科学技术大学
        "https://hub-mirror.c.163.com",           // 网易云
        "https://mirror.ccs.tencentyun.com",	// 腾讯云
        "https://index.docker.io/v1/"
    ],

    // 数据存储位置(默认C:\ProgramData\Docker)
    "data-root": "D:\\docker-data",

    // 日志配置(推荐使用local驱动实现日志轮换)
    "log-driver": "local",
    "log-opts": {
        "max-size": "10m",                        // 单个日志文件最大10MB
        "max-file": "3",                         // 最多保留3个日志文件
        "compress": "true"                       // 启用日志压缩
    },

    // 实验性功能(如buildx多架构构建)
    "experimental": true,

    // 监控指标暴露(Prometheus兼容接口)
    "metrics-addr": "0.0.0.0:9323",

    // 安全增强
    "live-restore": true,                      // Docker服务重启时容器不停止
    "debug": false,                            // 生产环境关闭调试模式

    // 私有仓库访问(HTTP协议需配置)
    "insecure-registries": [
    	"my-private-registry:5000"
    ],

    // 镜像拉取策略(默认优先本地镜像)
    "pull-policy": "always",

    // 容器资源限制(通过Docker Desktop界面配置更直观)
    "default-ulimit": {
        "nofile": {
            "Name": "nofile",
            "Hard": 65535,
            "Soft": 65535
        }
    },

    // 网络监听地址(支持TCP和命名管道)
    "hosts": [
        "tcp://0.0.0.0:2375",
        "npipe://"
    ]
}

配置说明(Windows 平台特性)

  1. 镜像加速

    • 配置方式:与 Linux 完全一致,通过registry-mirrors指定国内镜像源,提升拉取速度。
    • 注意事项:如果使用 Docker Desktop,也可通过界面直接添加镜像源(Settings → Docker Engine → Registry mirrors)。
  2. 存储配置

    • 数据存储位置:
      • 默认路径为C:\ProgramData\Docker,建议修改到非系统盘(如D:\docker-data)以避免占用 C 盘空间。
      • 路径格式需使用双反斜杠(\\)或单斜杠(/),例如"data-root": "D:/docker-data"。
    • 存储驱动:
      • Windows 默认使用windowsfilter存储驱动,无需显式配置。
      • 若需调整存储大小,可添加"storage-opts": ["size=200GB"](默认 127GB)。
  3. 日志管理

    • 驱动选择:
      • 推荐使用local驱动替代默认的json-file,自动实现日志轮换和压缩。
      • json-file驱动在 Windows 下可能导致日志文件无限增长,需谨慎使用。
    • 日志压缩:
      compress: true可减少历史日志占用的磁盘空间。
  4. 资源限制

    • 文件描述符限制:
      • default-ulimit用于设置容器默认的文件描述符限制(nofile),避免容器内进程因资源不足崩溃。
      • 注意拼写为default-ulimit(单数),而非default-ulimits(复数)。
    • 内存 / CPU 限制:
      Windows 下更建议通过 Docker Desktop 界面(Settings → Resources)直观配置容器内存、CPU 配额。
  5. 安全配置

    • 容器持久化:
      live-restore: true可确保 Docker 服务重启时容器不停止,适用于生产环境。
    • 调试模式:
      debug: true会生成大量调试日志,仅在排查问题时启用。
  6. 实验性功能

    • 启用方式:
      需在 Docker Desktop 界面的Settings → Docker Engine中勾选Enable experimental features,并在daemon.json中添加"experimental": true。
    • 常见用途:
      启用docker buildx实现多架构镜像构建。
  7. 监控与网络

    • Prometheus 监控:

      • metrics-addr: "0.0.0.0:9323"暴露 Prometheus 兼容的监控接口,可通过http://localhost:9323/metrics访问。
      • 需在 Prometheus 配置中添加目标localhost:9323以采集指标。
    • 网络监听:
      hosts选项允许 Docker 监听 TCP 端口(如0.0.0.0:2375)和命名管道(npipe://),方便远程管理。

配置文件位置与生效方式:

  1. 文件路径:

    • Docker Desktop 用户:通常位于C:\ProgramData\Docker\config\daemon.json。

    • 手动安装用户:可能位于C:\Users\<用户名>\.docker\daemon.json。

    • 编辑工具:建议使用 Notepad++ 或 VS Code,避免格式错误。

  2. 生效步骤:
    保存文件后,重启 Docker 服务:

    Restart-Service Docker
    

    验证配置:

    docker info | Select-String -Pattern "Registry Mirrors|Logging Driver|Experimental"
    
4.3、配置格式对比

以下是 Windows 和 Linux 系统中Docker daemon.json配置的区别对比:

  1. 存储配置

    • Windows:默认存储路径为C:\ProgramData\Docker,可通过data-root配置项修改到其他盘。存储驱动默认是windowsfilter,一般无需手动配置,若要调整存储大小,可添加"storage-opts": ["size=200GB"]等相关配置。

    • Linux:默认存储路径为/var/lib/docker,可通过data-root指定其他路径,如/data/docker。存储驱动默认是overlay2,也可根据系统环境和需求选择aufs、btrfs、zfs等,通过storage-driver配置项指定,还可通过storage-opts配置驱动参数,如"storage-opts": ["overlay2.override_kernel_check=true"]。

  2. 日志管理

    • Windows:推荐使用local驱动替代默认的json - file,通过log - driver和log - opts配置日志驱动及参数,如设置单个日志文件大小和保留文件数量等。

    • Linux:默认使用json - file驱动记录容器日志,也可选择syslog、journald等其他日志驱动。同样通过log - driver和log - opts来配置,如"log - driver": "json - file", "log - opts": {"max - size": "10m", "max - file": "10"}。

  3. 安全配置

    • Windows:通过live - restore设置 Docker 服务重启时容器不停止,生产环境中通常关闭debug调试模式。

    • Linux:除了live - restore和debug配置外,还支持userns - remap进行用户空间重映射,提高安全性,但使用时需充分测试,因为可能导致一些假定uid 0用户拥有特殊能力的应用报错退出。

  4. 资源限制

    • Windows:可在daemon.json中通过default - ulimit设置容器默认的文件描述符限制等,不过内存和 CPU 限制更建议通过 Docker Desktop 界面配置。

    • Linux:可在daemon.json中通过default - ulimits配置文件描述符等资源限制,也可通过cgroup相关配置对容器进行更细致的资源控制,但通常也可结合系统工具进行配置。

  5. 网络监听

    • Windows:hosts选项支持 TCP 端口和命名管道监听,如"hosts": ["tcp://0.0.0.0:2375", "npipe://"]。

    • Linux:一般通过hosts配置监听地址,常见的是监听 TCP 端口,如"hosts": ["tcp://0.0.0.0:2375"],也可根据需要配置其他网络相关参数。

  6. 配置文件位置与生效方式

    • Windows:文件通常位于C:\ProgramData\Docker\config\daemon.json。保存文件后,通过重启 Docker 服务使配置生效,可使用Restart - Service Docker命令重启。

    • Linux:文件位于/etc/docker/daemon.json。修改配置后,需执行sudo systemctl daemon - reload重新加载配置,再执行sudo systemctl restart docker重启 Docker 服务使配置生效。


5、网络共享文件夹

​ 如果需要将容器的一部分数据放在网络共享文件夹中(Nas),比如音视频资源等,建议NFS格式挂载, NFS 是 Linux/Unix 原生的高性能网络文件共享协议,SMB(Samba)主打 Windows 兼容与跨平台协作。下面从核心维度详细对比:

对比项NFS (Network File System)SMB/CIFS (Server Message Block)
设计初衷Sun 为 Unix/Linux 打造的原生文件共享微软为 Windows 设计,Samba 实现跨平台
Linux 角色内核原生支持,标准共享方案需安装 Samba 服务,模拟 Windows 共享
Windows 支持需手动安装 NFS 客户端,配置繁琐原生支持,“网上邻居” 直接访问
核心优势轻量、低延迟、Linux 集群高性能跨平台无缝、精细权限、AD 域集成

选 NFS 更合适

  • 纯 Linux/Unix 集群(服务器、容器、HPC)
  • 追求极致性能、低延迟、高并发
  • 开发 / 编译环境、大数据共享、容器持久化存储
  • 内网信任环境,无需复杂用户管理

选 SMB 更合适

  • Windows 为主的办公 / 家庭网络
  • 混合 Windows+Linux 环境,Windows 是核心
  • 需精细权限、AD 域、文件锁定、打印共享
  • 桌面端直接访问、预览、协作编辑
5.1、 共享端配置

以威联通Nas为例:

  1. 在威联通 NAS 上开启 NFS 服务

    1. 登录 QTS 网页管理后台
    2. 进入 控制台 → 网络与文件服务 → Win/Mac/NFS/WebDAV
    3. 切换到 “NFS 服务” 标签页
    4. 勾选:
      • 激活 NFS v3 服务(兼容性最好,Linux 通用)
      • 可选:激活 NFS v4 服务(更安全、支持 Kerberos)
    5. 点击 应用,等待服务启动
  2. 给共享文件夹开启 NFS 访问权限

    1. 回到 控制台 → 权限 → 共享文件夹

    2. 找到你要共享的文件夹(如 Video、Public)

    3. 点击右侧 “编辑共享文件夹权限” 图标QNAP

    4. 在弹出窗口:

      • 选择权限类别:“NFS 主机访问”

      • 勾选 “启用 NFS 主机访问”

      • 点击 “加入”,添加允许访问的客户端:

        • 主机 / IP / 网络:填单个 IP(如 192.168.0.24)或网段(192.168.0.0/24),* 表示所有主机(不推荐)

        • 访问权限:“只读 / 读写”

        • Squash(权限映射):“无映射 / No mapping” (客户端传过去的 UID/GID 尽量按原样使用)

          选 Squash 权限(关键!):

          不推荐(最安全):选 Squash 所有用户到用户 nobody。

          • 解释:最高权限的 Root 用户会被限制,防止误删文件,适合绝大多数场景。

          🌀 进阶(Linux 开发常用):选 不映射任何用户 (No mapping)。

          • 解释:保持 Linux 账号的 UID/GID 一致。如果在电脑和 NAS 上都有 mo 这个账号,且 UID 都是 1000,选这个能完美解决文件权限错乱问题(比如创建文件后别人打不开)
    5. 点击 应用

5.2、 设备端配置
  1. 工具准备

    sudo apt install nfs-common nfs-kernel-server -y
    
  2. 查看 NAS 开放的 NFS 共享

    # 替换为实际的 NAS IP
    showmount -e 192.168.0.122
    
    # 输出示例:
    Export list for 192.168.0.122:
    /Nas_share 192.168.0.0/24
    
  3. 临时挂载

    sudo mkdir -p /mnt/nas_share
    sudo mount -t nfs 192.168.1.50:/nas_share /mnt/nas_share
    
  4. 开机自动挂载(写入 /etc/fstab)

    sudo mkdir -p /mnt/nas
    sudo nano /etc/fstab
    # 写入以下内容
    192.168.0.122:/Nas_share/my_folder /mnt/nas nfs defaults,_netdev,nofail,noauto,x-systemd.automount,timeo=600,retrans=5 0 0
    
  5. 测试

    # 测试挂载
    # Step 1:检查 fstab 是否有语法错误
    sudo mount -a  
    
    # Step 2:让 systemd 重新识别 fstab(关键)
    sudo systemctl daemon-reload
    
    # Step 3:检查 automount 是否生效  正常应看到: active (waiting)
    systemctl status mnt-nas.automount
    
    # Step 4:触发自动挂载(真正验证)
    ls /mnt/nas
    
    # Step 5:确认挂载成功
    mount | grep nas
    df -h | grep nas
    

更多推荐