Docker 安装、权限与代理配置 · Docker 安装与基础配置
Docker 安装、权限与代理配置
Docker 安装与基础配置
1. 安装方式选择
| 场景 | 推荐方式 |
|---|---|
| Linux 服务器 | Docker 官方 apt/dnf 仓库中的 Engine |
| macOS/Windows 开发机 | Docker Desktop |
| 无 root 权限的 Linux | Rootless 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 清点已有环境
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 与仓库
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 查看可用版本并安装
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 复制完整版本字符串:
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 验证
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验证结束后可删除测试镜像:
sudo docker image rm hello-world3. 服务管理
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 前:
- 确认是否启用 live restore。
- 检查容器 restart policy。
- 确认有维护窗口和回退方案。
- 保存
docker info、daemon 日志和当前配置。
4. 非 root 使用与权限
常见做法是把用户加入 docker 组:
sudo usermod -aG docker "$USER"
newgrp docker
docker version安全警告:
docker组成员可挂载宿主机文件并以高权限启动容器,实质上接近 root。只给受信任管理员授权,并纳入账号审计。
检查 socket:
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:
{
"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 官方参考确认。修改流程:
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 restore | live-restore: true | daemon 升级时尽量保持容器,但不是完整高可用 |
5.2 不安全配置
避免:
{
"hosts": ["tcp://0.0.0.0:2375"]
}2375 明文 daemon API 相当于向网络暴露宿主机控制权。远程访问应优先使用 SSH Context,或在必须使用 TCP 时启用双向 TLS 和网络访问控制。
6. Docker Context
Context 保存 endpoint、TLS 和 orchestrator 元数据:
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,并在破坏性操作前打印目标:
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 前置检查
command -v newuidmap
command -v newgidmap
grep "^$(whoami):" /etc/subuid
grep "^$(whoami):" /etc/subgid每个用户通常需要至少 65536 个 subordinate UID/GID。通过官方包安装额外组件:
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。
然后:
systemctl --user status docker
docker context use rootless
docker info | sed -n '/Security Options/,+8p'如需用户退出登录后仍运行:
sudo loginctl enable-linger "$USER"Rootless 在低端口、cgroup、网络、存储驱动和某些特权工作负载方面可能有限制。采用前阅读官方 Rootless 文档并进行真实负载测试。
8. Docker Desktop
Desktop 适合本地开发,提供 Linux VM、GUI、CLI 插件、文件共享和可选 Kubernetes。它不等同于在生产 Linux 服务器直接安装 Engine。
安装或升级后检查:
docker version
docker info --format '{{.OperatingSystem}}'
docker compose version
docker buildx version
docker context lsDesktop 更新采取逐步发布,最新版本可能一周内才在客户端出现。企业还需核对 Docker Desktop 许可条款、设置管理和数据共享策略。
9. 防火墙与端口
Docker 官方特别提醒:在 Ubuntu 上发布容器端口可能绕过 ufw/firewalld 的直观规则。需要:
- 在外部安全组或宿主机
DOCKER-USERchain 实施入口控制。 - 发布端口时显式绑定地址,例如
127.0.0.1:8080:80。 - 核验真实可达性,而不是只看 ufw 状态。
docker run -d --name local-web -p 127.0.0.1:8080:80 nginx:alpine
ss -lntp | grep ':8080'10. 代理配置
daemon 拉取镜像的代理与 CLI/容器内代理不是同一层。systemd drop-in 示例:
[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 后:
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker代理 URL 中如果含凭据,注意 systemd 配置和诊断输出的读取权限。
11. Shell 补全与输出格式
不同安装包可能已提供补全。确认 CLI 插件:
docker help
docker compose help
docker buildx help脚本不要解析面向人的表格,使用 --format:
docker ps --format '{{.ID}}\t{{.Names}}\t{{.Status}}'
docker image ls --format '{{json .}}'继续阅读
- 知识专题Docker 安装、权限与代理配置 · 公司适用
- 知识专题
- 知识专题