Skip to content
← 返回Docker列表
知识专题公司适用

公司适用 · 请结合本文的项目背景与团队约定使用。

Docker 安装、权限与代理配置 · Docker 安装与基础配置 ​

返回分篇目录

Docker 安装、权限与代理配置 ​

Docker 安装与基础配置 ​

1. 安装方式选择 ​

场景推荐方式
Linux 服务器Docker 官方 apt/dnf 仓库中的 Engine
macOS/Windows 开发机Docker Desktop
无 root 权限的 LinuxRootless Docker,先确认功能限制
固定、离线或受控环境下载并校验官方包,放入内部仓库
临时测试官方 convenience script,仅用于非生产快速验证

不要混装发行版的 docker.io、Docker 官方 docker-ce、独立 containerd 和其他兼容 CLI 包。包来源混杂会造成 daemon、CLI 插件和运行时版本错配。

2. Ubuntu 官方仓库安装 ​

以下流程基于 Docker 官方 Ubuntu 安装文档。截至 2026-08-12,官方页面列出的 64 位 Ubuntu 包括 26.04 LTS、25.10、24.04 LTS 和 22.04 LTS;衍生发行版不属于官方验证范围。

2.1 清点已有环境 ​

bash
command -v docker || true
docker version 2>/dev/null || true
dpkg -l | grep -E 'docker|containerd|runc'
sudo systemctl status docker --no-pager || true
sudo du -sh /var/lib/docker /var/lib/containerd 2>/dev/null || true

如果机器已有业务容器,先阅读维护、备份与升级,不要直接卸载。

2.2 安装官方 GPG key 与仓库 ​

bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME:-$VERSION_CODENAME} stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null

sudo apt-get update

在受控环境中,应先审查仓库域名、代理和 GPG key 管理策略。不要从未知镜像站复制 curl-pipe-shell 命令。

2.3 查看可用版本并安装 ​

bash
apt-cache madison docker-ce

sudo apt-get install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

需要锁定版本时,从 apt-cache madison docker-ce 复制完整版本字符串:

bash
DOCKER_VERSION_STRING='5:29.7.2-1~ubuntu.24.04~noble'
sudo apt-get install -y \
  "docker-ce=$DOCKER_VERSION_STRING" \
  "docker-ce-cli=$DOCKER_VERSION_STRING" \
  containerd.io docker-buildx-plugin docker-compose-plugin

示例版本字符串会随发行版和仓库修订变化,不能盲目照抄。

2.4 验证 ​

bash
sudo systemctl is-enabled docker
sudo systemctl is-active docker
sudo docker version
sudo docker info
sudo docker run --rm hello-world
sudo docker compose version
sudo docker buildx version

验证结束后可删除测试镜像:

bash
sudo docker image rm hello-world

3. 服务管理 ​

bash
sudo systemctl status docker --no-pager
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker
sudo systemctl enable docker
sudo journalctl -u docker --since '30 min ago' --no-pager

生产机器重启 daemon 前:

  1. 确认是否启用 live restore。
  2. 检查容器 restart policy。
  3. 确认有维护窗口和回退方案。
  4. 保存 docker info、daemon 日志和当前配置。

4. 非 root 使用与权限 ​

常见做法是把用户加入 docker 组:

bash
sudo usermod -aG docker "$USER"
newgrp docker
docker version

安全警告: docker 组成员可挂载宿主机文件并以高权限启动容器,实质上接近 root。只给受信任管理员授权,并纳入账号审计。

检查 socket:

bash
ls -l /var/run/docker.sock
getent group docker

不要通过 chmod 666 /var/run/docker.sock 解决权限问题。

5. daemon.json ​

Linux 常用路径是 /etc/docker/daemon.json。下面是字段示意,未执行;地址池按实际网络规划核对,已有主机不要仅为复制模板切换 image store:

json
{
  "log-driver": "local",
  "log-opts": {
    "max-size": "20m",
    "max-file": "5"
  },
  "live-restore": true,
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    }
  ]
}

字段必须按当前 Engine 官方参考确认。修改流程:

bash
sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl reload docker
sudo systemctl status docker --no-pager
docker info

如果字段只能在重启时生效,安排维护窗口后使用 systemctl restart docker。不要在未验证 JSON 的情况下直接重启。

5.1 常见配置 ​

目标字段或做法注意
日志轮转log-driver、log-opts只影响新建容器;旧容器需重建
私有镜像加速registry-mirrors镜像源必须可信
代理systemd drop-in 为 daemon 设置 HTTP(S)_PROXY同时配置 NO_PROXY
地址池default-address-pools避免与办公网、VPC、Kubernetes CIDR 冲突
数据目录data-root迁移需停机、备份、校验权限
live restorelive-restore: truedaemon 升级时尽量保持容器,但不是完整高可用

5.2 不安全配置 ​

避免:

json
{
  "hosts": ["tcp://0.0.0.0:2375"]
}

2375 明文 daemon API 相当于向网络暴露宿主机控制权。远程访问应优先使用 SSH Context,或在必须使用 TCP 时启用双向 TLS 和网络访问控制。

6. Docker Context ​

Context 保存 endpoint、TLS 和 orchestrator 元数据:

bash
docker context ls
docker context inspect default

docker context create prod \
  --docker 'host=ssh://ops@example.internal'

docker --context prod ps
docker context use prod
docker context use default

生产脚本建议显式传 --context,并在破坏性操作前打印目标:

bash
docker context show
docker --context prod info --format '{{.Name}}'

不要把包含私钥或敏感 TLS 材料的 Context 导出包提交到 Git。

7. Rootless 模式 ​

Rootless 让 daemon 和容器都以非 root 用户运行,降低 daemon/runtime 漏洞带来的宿主机风险。它依赖 user namespace,并与仅启用 userns-remap 不同:后者的 daemon 仍以 root 运行。

7.1 前置检查 ​

bash
command -v newuidmap
command -v newgidmap
grep "^$(whoami):" /etc/subuid
grep "^$(whoami):" /etc/subgid

每个用户通常需要至少 65536 个 subordinate UID/GID。通过官方包安装额外组件:

bash
sudo apt-get install -y uidmap docker-ce-rootless-extras
dockerd-rootless-setuptool.sh install

如果系统级 rootful daemon 已在运行,应在专用环境停用它后安装 Rootless;确需二者共存时,先确认 socket、Context 和端口不会冲突,再按官方说明显式使用 dockerd-rootless-setuptool.sh install --force。

然后:

bash
systemctl --user status docker
docker context use rootless
docker info | sed -n '/Security Options/,+8p'

如需用户退出登录后仍运行:

bash
sudo loginctl enable-linger "$USER"

Rootless 在低端口、cgroup、网络、存储驱动和某些特权工作负载方面可能有限制。采用前阅读官方 Rootless 文档并进行真实负载测试。

8. Docker Desktop ​

Desktop 适合本地开发,提供 Linux VM、GUI、CLI 插件、文件共享和可选 Kubernetes。它不等同于在生产 Linux 服务器直接安装 Engine。

安装或升级后检查:

bash
docker version
docker info --format '{{.OperatingSystem}}'
docker compose version
docker buildx version
docker context ls

Desktop 更新采取逐步发布,最新版本可能一周内才在客户端出现。企业还需核对 Docker Desktop 许可条款、设置管理和数据共享策略。

9. 防火墙与端口 ​

Docker 官方特别提醒:在 Ubuntu 上发布容器端口可能绕过 ufw/firewalld 的直观规则。需要:

  • 在外部安全组或宿主机 DOCKER-USER chain 实施入口控制。
  • 发布端口时显式绑定地址,例如 127.0.0.1:8080:80。
  • 核验真实可达性,而不是只看 ufw 状态。
bash
docker run -d --name local-web -p 127.0.0.1:8080:80 nginx:alpine
ss -lntp | grep ':8080'

详见Docker 与 packet filtering。

10. 代理配置 ​

daemon 拉取镜像的代理与 CLI/容器内代理不是同一层。systemd drop-in 示例:

ini
[Service]
Environment="HTTP_PROXY=http://proxy.example.internal:3128"
Environment="HTTPS_PROXY=http://proxy.example.internal:3128"
Environment="NO_PROXY=localhost,127.0.0.1,.example.internal,registry.example.internal"

保存为 /etc/systemd/system/docker.service.d/http-proxy.conf 后:

bash
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker

代理 URL 中如果含凭据,注意 systemd 配置和诊断输出的读取权限。

11. Shell 补全与输出格式 ​

不同安装包可能已提供补全。确认 CLI 插件:

bash
docker help
docker compose help
docker buildx help

脚本不要解析面向人的表格,使用 --format:

bash
docker ps --format '{{.ID}}\t{{.Names}}\t{{.Status}}'
docker image ls --format '{{json .}}'

继续阅读