Skip to content

Docker运行环境配置指南 ​

目标: 在 Ubuntu Server (20.04/22.04/24.04) 上部署标准化的 Docker 运行环境,支持 Docker Compose V2,并针对国内网络环境进行优化。

1. 安装 Docker Engine (国内环境) ​

针对国内网络环境,我们提供两种安装方案。如果你是 Ubuntu 20.04 用户,请特别注意方案 A 中的修复步骤。

方案 A: 官方脚本 + 阿里云镜像 (快速) ​

这是最简单的方法,脚本会自动识别系统并配置源。

  1. 运行安装脚本:

    bash
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh --mirror Aliyun
  2. 🚑 故障修复 (Ubuntu 20.04/Focal): 如果脚本报错 E: Unable to locate package docker-model-plugin,说明软件源已配置成功,但镜像源中缺少该插件。无需重跑脚本,直接执行以下命令手动安装核心组件(已剔除问题插件):

    bash
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin

方案 B: 手动配置软件源 (高稳定性) ​

如果脚本执行失败,或者你希望对系统有完全的控制,请使用此方案。

  1. 安装必要工具:

    bash
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl gnupg
  2. 添加阿里云 GPG 密钥:

    bash
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
  3. 写入软件源列表:

    bash
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  4. 安装 Docker:

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

1.3 非 Root 用户运行配置 ​

配置当前用户直接运行 Docker 命令,避免每次输入 sudo。

bash
sudo usermod -aG docker $USER
# 注销重登或执行:
newgrp docker

1.4 验证安装 ​

bash
docker version
docker compose version

2. Docker Daemon 配置 (核心优化) ​

配置镜像加速 (Registry Mirrors) 和日志轮转 (Log Rotation)。

注意: 公共镜像源可能不稳定。推荐使用阿里云/腾讯云的个人专属加速器地址。

编辑 /etc/docker/daemon.json:

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

写入以下内容 (包含多个备用源):

json
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.nju.edu.cn"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

应用配置:

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

3. 目录结构规范 (Directory Standard) ​

采用 Linux 标准的 /srv 目录存放服务数据,便于统一备份。

3.1 目录规划 ​

text
/srv/
├── core/           # 基础设施 (Portainer, Nginx-Proxy, Watchtower)
├── hub/            # 家庭服务 (Nextcloud, Jellyfin)
├── app/            # 自研应用 (Neat, Demo)
├── site/           # 静态站点 (Home, Blog)
├── data/           # 持久化数据挂载点 (数据库, 大文件)
└── backup/         # 本地备份目录

3.2 初始化命令 ​

bash
# 创建目录结构
sudo mkdir -p /srv/{core,hub,app,site,data,backup}

# 将目录所有权赋予当前用户 (方便管理)
sudo chown -R $USER:$USER /srv

4. 可视化管理工具 (Portainer CE) ​

4.1 部署 ​

bash
mkdir -p /srv/core/portainer
cd /srv/core/portainer

# 创建 docker-compose.yml
cat > docker-compose.yml <<EOF
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer_data:/data
    ports:
      - "9000:9000"
EOF

# 启动
docker compose up -d
# 重启
docker compose restart
# 查看最新200行日志
docker compose logs -f --tail 200
# 查看容器状态
docker compose ps
# 停止
docker compose down

4.2 访问 ​

浏览器访问 http://<IP>:9000 http://192.168.1.200:9000 初始化管理员密码。


5. 常见问题 (Troubleshooting) ​

5.1 EOL 警告与 docker-model-plugin 缺失 ​

  • 现象: 脚本提示 ubuntu focal reached end-of-life 且报错 Unable to locate package docker-model-plugin。
  • 原因: Ubuntu 20.04 (Focal) 已过标准支持期,部分新插件(如 model-plugin)在镜像源中未提供或不支持该版本。
  • 解决: 参考本文 1.1 方案 A 中的修复命令,手动安装不含该插件的核心包即可。

5.2 镜像拉取失败 ​

如果配置了加速器仍然无法拉取镜像 (timeout 或 connection refused),请尝试配置 HTTP 代理:

  1. 创建目录: sudo mkdir -p /etc/systemd/system/docker.service.d

  2. 创建文件 http-proxy.conf:

    ini
    [Service]
    Environment="HTTP_PROXY=http://proxy-ip:port"
    Environment="HTTPS_PROXY=http://proxy-ip:port"
  3. 重启: sudo systemctl daemon-reload && sudo systemctl restart docker

方舟 · Ark