🚀 5分钟征服 Docker:从零到容器化的极速之旅

61 阅读14分钟

一键安装,开箱即用 | 国内网络环境优化 | 适合所有开发者

无论你是容器化新手还是经验丰富的开发者,这份指南都能让你在 5 分钟内完成 Docker 的完整部署,并立即投入生产使用。告别繁琐的配置过程,告别网络超时的烦恼,让我们开始这场极速之旅!


📖 目录


🎯 为什么选择这份指南?

🌟 核心优势

特性说明收益
⚡ 一键安装单条命令完成全部部署节省 95% 配置时间
🇨🇳 国内优化自动配置阿里云镜像源下载速度提升 10-50 倍
🛡️ 生产级配置内置安全与性能最佳实践开箱即用于生产环境
🔍 智能检测自动识别系统并处理冲突零人工干预
📊 实时反馈彩色日志与进度提示清晰掌握安装状态
✅ 自动验证安装后立即运行测试确保环境可靠性

🎁 你将获得

Docker Engine 最新稳定版
Docker Compose V2(新一代编排工具)
Docker Buildx(多平台构建支持)
三层镜像加速(中科大 + 网易 + 百度云)
日志轮转配置(自动管理磁盘空间)
开机自启动(服务器重启后自动恢复)

🚫 告别痛点

❌ 不再因 GitHub/Docker Hub 网络超时而抓狂
❌ 不再为复杂的 GPG 密钥配置而困惑
❌ 不再担心下载的版本不是最新的
❌ 不再手动配置镜像加速器
❌ 不再重复执行一堆命令


💻 系统要求

支持的操作系统

操作系统最低版本推荐版本状态
Debian11 (Bullseye)12 (Bookworm)✅ 完全支持
Ubuntu20.04 LTS22.04 LTS✅ 完全支持
Ubuntu24.04 LTS-✅ 完全支持

硬件要求

  • CPU 架构:x86_64 (amd64) / ARM64
  • 内存:至少 2GB RAM(推荐 4GB+)
  • 磁盘空间:至少 20GB 可用空间
  • 网络:能够访问互联网

权限要求

  • Root 权限:必须以 root 用户或使用 sudo 执行
  • 防火墙:确保能访问 APT 仓库和 Docker Hub

快速检查

# 检查系统版本
cat /etc/os-release

# 检查内核版本(需要 3.10+)
uname -r

# 检查磁盘空间
df -h /

# 检查内存
free -h

⚡ 极速安装

方式一:在线一键安装(最推荐)

直接从 GitHub 执行(自动下载并运行):

curl -fsSL https://raw.githubusercontent.com/langgenius/dify/main/scripts/install-docker.sh | bash

如果 GitHub 访问较慢,使用国内镜像加速:

curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/langgenius/dify/main/scripts/install-docker.sh | bash

方式二:下载后执行(更安全,推荐生产环境)

# 下载安装脚本到当前目录
curl -fsSL https://raw.githubusercontent.com/langgenius/dify/main/scripts/install-docker.sh -o install-docker.sh

# 检查脚本内容(可选,建议)
cat install-docker.sh

# 赋予执行权限
chmod +x install-docker.sh

# 执行安装
./install-docker.sh

使用国内镜像加速下载:

curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/langgenius/dify/main/scripts/install-docker.sh -o install-docker.sh
chmod +x install-docker.sh
./install-docker.sh

方式三:使用本文档附带的完整脚本

直接复制本文档末尾的 完整安装脚本 到服务器:

# 创建脚本文件
cat > install-docker.sh << 'EOF'
# 这里粘贴本文档末尾的完整脚本内容
EOF

# 赋予执行权限
chmod +x install-docker.sh

# 执行安装
./install-docker.sh

方式四:离线安装

如果目标服务器无法访问互联网:

# 在有网络的机器上下载脚本
curl -fsSL https://raw.githubusercontent.com/langgenius/dify/main/scripts/install-docker.sh -o install-docker.sh

# 通过 U 盘、SCP 或其他方式传输到目标服务器
scp install-docker.sh root@target-host:/root/

# 登录目标服务器并执行
ssh root@target-host
chmod +x /root/install-docker.sh
/root/install-docker.sh

⏱️ 安装时间

  • 优质网络环境:2-3 分钟
  • 一般网络环境:3-5 分钟
  • 较慢网络环境:5-10 分钟

🔍 安装过程详解

🎬 安装流程可视化

┌─────────────────────────────────────────────────────────┐
│  Step 1: 环境检测                                        │
│  ├─ 检查 root 权限                                      │
│  ├─ 识别操作系统(Debian/Ubuntu)                       │
│  └─ 检测已安装的 Docker 版本                            │
├─────────────────────────────────────────────────────────┤
│  Step 2: 系统准备                                        │
│  ├─ 更新 APT 包索引                                     │
│  ├─ 安装必要依赖(curl、gnupg 等)                      │
│  └─ 清理旧版本 Docker(如果存在)                       │
├─────────────────────────────────────────────────────────┤
│  Step 3: 仓库配置                                        │
│  ├─ 添加 Docker GPG 密钥(优先阿里云)                  │
│  ├─ 配置 Docker APT 仓库                                │
│  └─ 刷新包索引                                          │
├─────────────────────────────────────────────────────────┤
│  Step 4: Docker 安装                                     │
│  ├─ 安装 docker-ce(Docker 引擎)                       │
│  ├─ 安装 docker-ce-cli(命令行工具)                    │
│  ├─ 安装 containerd.io(容器运行时)                    │
│  ├─ 安装 docker-buildx-plugin(构建插件)               │
│  └─ 安装 docker-compose-plugin(编排插件)              │
├─────────────────────────────────────────────────────────┤
│  Step 5: 镜像加速                                        │
│  ├─ 创建 /etc/docker/daemon.json                        │
│  ├─ 配置三层镜像源                                      │
│  └─ 配置日志轮转与存储驱动                              │
├─────────────────────────────────────────────────────────┤
│  Step 6: 服务启动                                        │
│  ├─ 重载 systemd 配置                                   │
│  ├─ 启动 Docker 服务                                    │
│  └─ 设置开机自启动                                      │
├─────────────────────────────────────────────────────────┤
│  Step 7: 验证测试                                        │
│  ├─ 检查 Docker 版本                                    │
│  ├─ 检查 Docker Compose 版本                            │
│  ├─ 验证服务状态                                        │
│  ├─ 检查镜像加速配置                                    │
│  └─ 运行 hello-world 测试容器                           │
└─────────────────────────────────────────────────────────┘

📺 实际运行示例

$ bash install-docker.sh

============================================
 Docker & Docker Compose 一键安装脚本
 国内网络优化版
============================================

[INFO] 检测到操作系统: Debian GNU/Linux 12 (bookworm)
[INFO] 更新系统包索引...
[INFO] 安装必要的依赖包...
[INFO] 添加 Docker GPG 密钥(使用阿里云镜像)...
[INFO] 使用阿里云 Docker 镜像源
[INFO] 添加 Docker APT 仓库...
[INFO] 安装 Docker Engine 和相关组件...
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
以下软件包将被安装:
  containerd.io docker-buildx-plugin docker-ce docker-ce-cli
  docker-compose-plugin
[INFO] Docker 安装完成!
[INFO] 配置 Docker 镜像加速器(国内优化)...
[INFO] 镜像加速配置完成
[INFO] 使用的镜像源:
  - 中科大:https://docker.mirrors.ustc.edu.cn
  - 网易:https://hub-mirror.c.163.com
  - 百度云:https://mirror.baidubce.com
[INFO] 启动 Docker 服务...
[INFO] Docker 服务已启动并设置为开机自启

[INFO] 验证 Docker 安装...
[INFO] ✓ Docker 版本: Docker version 24.0.7, build afdd53b
[INFO] ✓ Docker Compose 版本: Docker Compose version v2.23.3
[INFO] ✓ Docker 服务运行中
[INFO] 检查镜像加速配置...
 Registry Mirrors:
  https://docker.mirrors.ustc.edu.cn/
  https://hub-mirror.c.163.com/
  https://mirror.baidubce.com/

[INFO] 运行测试容器 hello-world...
[INFO] ✓ 测试容器运行成功

============================================
[INFO] Docker 安装完成!
============================================

Docker 版本:Docker version 24.0.7, build afdd53b
Docker Compose 版本:Docker Compose version v2.23.3

常用命令:
  docker ps              # 查看运行中的容器
  docker images          # 查看镜像列表
  docker compose up -d   # 启动 docker-compose 项目
  docker system df       # 查看磁盘使用
  docker system prune    # 清理未使用资源

镜像加速配置文件:
  /etc/docker/daemon.json

如需允许非 root 用户使用 Docker,执行:
  usermod -aG docker <username>

[INFO] 安装日志已保存
============================================

🎨 日志颜色说明

  • 🟢 绿色 [INFO]:正常信息,表示操作成功
  • 🟡 黄色 [WARN]:警告信息,需要注意但不影响继续
  • 🔴 红色 [ERROR]:错误信息,安装失败需要人工处理

🔧 脚本核心功能解析

1. 智能系统检测

# 自动识别 Debian/Ubuntu 系统
detect_os() {
    . /etc/os-release
    OS=$ID  # debian 或 ubuntu
    VER=$VERSION_ID  # 版本号
}

2. 冲突处理

# 检测已安装的 Docker 并询问处理方式
check_docker_installed() {
    if command -v docker &> /dev/null; then
        # 提示用户选择:重装 或 仅配置加速
        read -p "是否重新安装?(y/N): "
    fi
}

3. 镜像源自动切换

# 优先使用阿里云,失败则切换到官方源
if curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/$OS/gpg ...; then
    DOCKER_MIRROR="https://mirrors.aliyun.com/docker-ce"
else
    DOCKER_MIRROR="https://download.docker.com"
fi

4. 生产级配置

生成的 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "live-restore": true
}

配置说明:

  • registry-mirrors:三层镜像加速,自动故障转移
  • log-opts:每个容器日志最大 100MB,保留 3 个归档文件
  • storage-driver:使用 overlay2(性能最优)
  • live-restore:Docker 进程重启时容器保持运行

✅ 验证安装

1️⃣ 检查版本信息

# 查看 Docker 版本
docker --version
# 输出:Docker version 24.0.7, build afdd53b

# 查看 Docker Compose 版本
docker compose version
# 输出:Docker Compose version v2.23.3

# 查看完整信息
docker version

2️⃣ 检查服务状态

# 查看 Docker 服务状态
systemctl status docker

# 应该看到:
# ● docker.service - Docker Application Container Engine
#    Loaded: loaded (/lib/systemd/system/docker.service; enabled)
#    Active: active (running) since ...

3️⃣ 验证镜像加速

# 查看镜像加速配置
docker info | grep -A 5 "Registry Mirrors"

# 输出应包含:
# Registry Mirrors:
#  https://docker.mirrors.ustc.edu.cn/
#  https://hub-mirror.c.163.com/
#  https://mirror.baidubce.com/

4️⃣ 运行测试容器

# 运行 hello-world
docker run hello-world

# 成功输出:
# Hello from Docker!
# This message shows that your installation appears to be working correctly.

5️⃣ 测试镜像拉取速度

# 测试拉取一个常用镜像
time docker pull nginx:alpine

# 应该在几秒到十几秒内完成(国内加速)
# 对比官方源可能需要几分钟

6️⃣ 测试 Docker Compose

创建测试文件 test-compose.yml

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"

运行测试:

# 启动服务
docker compose -f test-compose.yml up -d

# 检查容器
docker ps

# 访问测试
curl http://localhost:8080

# 清理
docker compose -f test-compose.yml down

🎓 快速上手

🐳 Docker 基础命令

容器操作

# 运行容器
docker run -d --name mynginx -p 80:80 nginx:alpine

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop mynginx

# 启动已停止的容器
docker start mynginx

# 重启容器
docker restart mynginx

# 删除容器
docker rm mynginx

# 强制删除运行中的容器
docker rm -f mynginx

# 查看容器日志
docker logs mynginx
docker logs -f mynginx  # 实时查看

# 进入容器
docker exec -it mynginx sh

# 查看容器详细信息
docker inspect mynginx

# 查看容器资源使用
docker stats mynginx

镜像操作

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:alpine

# 列出本地镜像
docker images

# 删除镜像
docker rmi nginx:alpine

# 构建镜像
docker build -t myapp:v1 .

# 标记镜像
docker tag myapp:v1 myregistry.com/myapp:v1

# 推送镜像
docker push myregistry.com/myapp:v1

# 导出镜像
docker save nginx:alpine -o nginx.tar

# 导入镜像
docker load -i nginx.tar

系统管理

# 查看 Docker 系统信息
docker info

# 查看磁盘使用情况
docker system df

# 清理未使用的资源
docker system prune

# 清理所有未使用的资源(包括镜像)
docker system prune -a

# 清理卷
docker volume prune

# 查看 Docker 事件
docker events

📦 Docker Compose 实战

示例 1:部署 WordPress

创建 docker-compose.yml

version: '3.8'

services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data:

操作命令:

# 启动服务
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f

# 停止服务
docker compose stop

# 启动服务
docker compose start

# 重启服务
docker compose restart

# 删除服务(保留数据卷)
docker compose down

# 删除服务和数据卷
docker compose down -v

示例 2:部署 Nginx + PHP

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./www:/var/www/html
    depends_on:
      - php

  php:
    image: php:8.1-fpm-alpine
    volumes:
      - ./www:/var/www/html

🎯 实战场景:部署 Dify

# 克隆 Dify 仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 复制环境变量配置
cp .env.example .env

# 编辑配置(可选)
nano .env

# 启动所有服务
docker compose up -d

# 查看服务状态
docker compose ps

# 访问 Dify
# http://localhost:3000

🔧 进阶配置

1. 允许非 Root 用户使用 Docker

# 创建 docker 用户组(通常已存在)
groupadd docker

# 将用户添加到 docker 组
usermod -aG docker $USER

# 或者添加特定用户
usermod -aG docker username

# 刷新用户组(或重新登录)
newgrp docker

# 验证
docker ps  # 无需 sudo

2. 自定义 Docker 数据目录

如果系统盘空间不足,可以将 Docker 数据迁移到其他分区:

# 停止 Docker
systemctl stop docker

# 编辑配置
nano /etc/docker/daemon.json

添加:

{
  "data-root": "/mnt/docker-data",
  "registry-mirrors": [...],
  ...
}
# 迁移现有数据(可选)
rsync -aP /var/lib/docker/ /mnt/docker-data/

# 启动 Docker
systemctl start docker

# 验证
docker info | grep "Docker Root Dir"

3. 配置 Docker 网络

# 创建自定义网络
docker network create --driver bridge my-network

# 指定子网
docker network create \
  --driver bridge \
  --subnet 172.20.0.0/16 \
  --gateway 172.20.0.1 \
  my-custom-network

# 查看网络
docker network ls

# 查看网络详情
docker network inspect my-network

4. 配置资源限制

编辑 /etc/docker/daemon.json

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    }
  },
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

5. 启用 IPv6

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

6. 配置 Docker 代理

如果需要通过代理访问外网:

# 创建 systemd 配置目录
mkdir -p /etc/systemd/system/docker.service.d

# 创建代理配置文件
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

# 重载配置
systemctl daemon-reload
systemctl restart docker

7. 配置阿里云专属加速器

访问 阿里云容器镜像服务 获取专属加速地址:

{
  "registry-mirrors": [
    "https://your-id.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

❓ 常见问题

Q1: 提示权限被拒绝?

错误信息:

Got permission denied while trying to connect to the Docker daemon socket

解决方案:

# 将用户添加到 docker 组
usermod -aG docker $USER
newgrp docker

# 或者使用 sudo
sudo docker ps

Q2: 镜像拉取超时或失败?

错误信息:

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

解决方案:

  1. 检查镜像加速配置:
docker info | grep -A 5 "Registry Mirrors"
  1. 重新配置镜像加速:
bash scripts/install-docker.sh  # 选择 N 跳过安装,仅配置加速
  1. 使用阿里云专属加速器(推荐)

Q3: Docker 服务无法启动?

检查服务状态:

systemctl status docker
journalctl -u docker -n 50 --no-pager

常见原因:

  1. daemon.json 格式错误
# 验证 JSON 格式
cat /etc/docker/daemon.json | python3 -m json.tool
  1. 端口冲突
# 检查 2375/2376 端口
netstat -tlnp | grep docker
  1. 存储驱动不兼容
# 查看可用驱动
docker info | grep "Storage Driver"

Q4: 容器无法访问外网?

检查方法:

# 进入容器测试
docker run --rm alpine ping -c 3 8.8.8.8

解决方案:

# 检查 DNS 配置
cat /etc/docker/daemon.json

# 添加 DNS
{
  "dns": ["8.8.8.8", "114.114.114.114"]
}

# 重启 Docker
systemctl restart docker

Q5: 磁盘空间不足?

查看磁盘使用:

docker system df

清理方案:

# 清理未使用的容器
docker container prune

# 清理未使用的镜像
docker image prune

# 清理未使用的卷
docker volume prune

# 一键清理所有(慎用)
docker system prune -a --volumes

Q6: Docker Compose 命令找不到?

如果使用的是 V1:

# 安装 V1
apt install docker-compose

# 或通过 pip
pip3 install docker-compose

如果是 V2 插件未安装:

apt install docker-compose-plugin

Q7: 容器时间与宿主机不一致?

解决方案:

# 运行容器时挂载时区
docker run -v /etc/localtime:/etc/localtime:ro ...

# 或在 docker-compose.yml 中
services:
  app:
    volumes:
      - /etc/localtime:/etc/localtime:ro

Q8: 如何更新 Docker?

# 更新包索引
apt update

# 更新 Docker
apt upgrade docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# 重启服务
systemctl restart docker

⚡ 性能优化

1. 镜像优化

使用多阶段构建

# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/main.js"]

优化层缓存

# ❌ 不好的做法
COPY . /app

# ✅ 好的做法
COPY package.json /app/
RUN npm install
COPY . /app

2. 存储优化

使用卷而不是绑定挂载

# ❌ 性能较差
docker run -v /host/path:/container/path ...

# ✅ 性能更好
docker volume create mydata
docker run -v mydata:/container/path ...

定期清理

# 添加定时任务
crontab -e

# 每天凌晨 3 点清理
0 3 * * * docker system prune -af --volumes >> /var/log/docker-cleanup.log 2>&1

3. 网络优化

使用 host 网络(性能最优)

docker run --network host ...

自定义桥接网络

docker network create --driver bridge --opt com.docker.network.driver.mtu=1450 mynetwork

4. 日志优化

限制日志大小(已在脚本中配置)

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3",
    "compress": "true"
  }
}

使用其他日志驱动

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://192.168.0.42:123"
  }
}

🔒 安全最佳实践

1. 使用非 Root 用户运行容器

FROM node:18-alpine

# 创建非特权用户
RUN addgroup -g 1001 appuser && \
    adduser -D -u 1001 -G appuser appuser

# 切换用户
USER appuser

WORKDIR /app
COPY --chown=appuser:appuser . .
CMD ["node", "app.js"]

2. 扫描镜像漏洞

# 使用 Docker Scan(需要登录)
docker scan nginx:alpine

# 使用 Trivy
docker run aquasec/trivy image nginx:alpine

3. 限制容器资源

# 限制 CPU 和内存
docker run -d \
  --cpus="1.5" \
  --memory="1g" \
  --memory-swap="2g" \
  nginx:alpine

4. 使用只读根文件系统

docker run --read-only --tmpfs /tmp nginx:alpine

5. 启用 Docker 内容信任

# 启用内容信任
export DOCKER_CONTENT_TRUST=1

# 拉取镜像时会验证签名
docker pull nginx:alpine

6. 配置安全选项

docker run \
  --security-opt=no-new-privileges \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  nginx:alpine

🗑️ 卸载与重置

完全卸载 Docker

# 停止所有容器
docker stop $(docker ps -aq) 2>/dev/null || true

# 删除所有容器
docker rm $(docker ps -aq) 2>/dev/null || true

# 删除所有镜像
docker rmi $(docker images -q) 2>/dev/null || true

# 删除所有卷
docker volume rm $(docker volume ls -q) 2>/dev/null || true

# 卸载 Docker 包
apt purge -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# 自动清理依赖
apt autoremove -y

# 删除 Docker 数据目录
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
rm -rf /etc/docker

# 删除 APT 配置
rm /etc/apt/sources.list.d/docker.list
rm /etc/apt/keyrings/docker.gpg

# 删除用户组(可选)
groupdel docker 2>/dev/null || true

重置 Docker(保留镜像)

# 停止 Docker
systemctl stop docker

# 删除容器和网络
rm -rf /var/lib/docker/containers/*
rm -rf /var/lib/docker/network/*

# 启动 Docker
systemctl start docker

重置配置(保留数据)

# 备份数据
cp -r /var/lib/docker /var/lib/docker.backup

# 重置配置
rm /etc/docker/daemon.json

# 重新运行安装脚本
bash scripts/install-docker.sh

📚 参考资源

官方文档

国内镜像源

学习资源


🎉 总结

通过本指南,你已经掌握了:

5 分钟完成 Docker 完整部署
国内网络环境的最佳实践
生产级别的配置方案
常见问题的快速解决
性能优化与安全加固

下一步建议

  1. 部署你的第一个应用

    cd dify/docker
    docker compose up -d
    
  2. 学习 Dockerfile 编写

    • 创建自己的镜像
    • 优化构建过程
  3. 探索 Docker Compose

    • 编排多容器应用
    • 管理复杂服务
  4. 进阶到 Kubernetes

    • 学习容器编排
    • 生产环境部署

获取帮助


📝 更新日志

  • 2024-12-02:初始版本发布
    • 提供一键安装脚本
    • 完整的安装指南
    • 国内网络优化方案


📜 完整安装脚本

以下是完整的 Docker 一键安装脚本源码,你可以直接复制使用:

#!/bin/bash
#
# Docker & Docker Compose 一键安装脚本(国内优化版)
# 适用于:Debian 11+ / Ubuntu 20.04+
# 执行方式:bash install-docker.sh
#
# 作者:Dify Team
# 更新日期:2024-12-02
#

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否为 root 用户
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log_error "请使用 root 用户运行此脚本"
        log_info "执行方式:sudo bash $0"
        exit 1
    fi
}

# 检测操作系统
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        VER=$VERSION_ID
        log_info "检测到操作系统: $PRETTY_NAME"
    else
        log_error "无法检测操作系统"
        exit 1
    fi

    # 检查是否为 Debian/Ubuntu
    if [[ "$OS" != "debian" && "$OS" != "ubuntu" ]]; then
        log_warn "此脚本主要为 Debian/Ubuntu 设计,当前系统: $OS"
        read -p "是否继续安装?(y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
}

# 检查是否已安装 Docker
check_docker_installed() {
    if command -v docker &> /dev/null; then
        DOCKER_VERSION=$(docker --version)
        log_warn "Docker 已安装: $DOCKER_VERSION"
        read -p "是否重新安装?(y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            log_info "跳过 Docker 安装,仅配置镜像加速..."
            return 1
        fi
        log_info "开始卸载旧版本..."
        apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true
    fi
    return 0
}

# 更新系统
update_system() {
    log_info "更新系统包索引..."
    apt update -qq
}

# 安装依赖
install_dependencies() {
    log_info "安装必要的依赖包..."
    apt install -y \
        ca-certificates \
        curl \
        gnupg \
        lsb-release \
        apt-transport-https \
        software-properties-common > /dev/null 2>&1
}

# 添加 Docker GPG 密钥(使用阿里云镜像)
add_docker_gpg_key() {
    log_info "添加 Docker GPG 密钥(使用阿里云镜像)..."
    mkdir -p /etc/apt/keyrings
    
    # 尝试使用阿里云镜像
    if curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/$OS/gpg -o /tmp/docker.gpg 2>/dev/null; then
        gpg --dearmor -o /etc/apt/keyrings/docker.gpg < /tmp/docker.gpg
        rm -f /tmp/docker.gpg
        DOCKER_MIRROR="https://mirrors.aliyun.com/docker-ce"
        log_info "使用阿里云 Docker 镜像源"
    else
        log_warn "阿里云镜像源不可用,使用官方源..."
        curl -fsSL https://download.docker.com/linux/$OS/gpg -o /tmp/docker.gpg
        gpg --dearmor -o /etc/apt/keyrings/docker.gpg < /tmp/docker.gpg
        rm -f /tmp/docker.gpg
        DOCKER_MIRROR="https://download.docker.com"
    fi
    
    chmod a+r /etc/apt/keyrings/docker.gpg
}

# 添加 Docker APT 仓库
add_docker_repo() {
    log_info "添加 Docker APT 仓库..."
    echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $DOCKER_MIRROR/linux/$OS \
        $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    apt update -qq
}

# 安装 Docker
install_docker() {
    log_info "安装 Docker Engine 和相关组件..."
    apt install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io \
        docker-buildx-plugin \
        docker-compose-plugin
    
    log_info "Docker 安装完成!"
}

# 配置国内镜像加速
configure_registry_mirrors() {
    log_info "配置 Docker 镜像加速器(国内优化)..."
    
    mkdir -p /etc/docker
    
    cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "live-restore": true
}
EOF

    log_info "镜像加速配置完成"
    log_info "使用的镜像源:"
    echo "  - 中科大:https://docker.mirrors.ustc.edu.cn"
    echo "  - 网易:https://hub-mirror.c.163.com"
    echo "  - 百度云:https://mirror.baidubce.com"
}

# 启动 Docker 服务
start_docker() {
    log_info "启动 Docker 服务..."
    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker
    
    log_info "Docker 服务已启动并设置为开机自启"
}

# 验证安装
verify_installation() {
    log_info "验证 Docker 安装..."
    
    # 检查 Docker 版本
    if docker --version > /dev/null 2>&1; then
        DOCKER_VERSION=$(docker --version)
        log_info "✓ Docker 版本: $DOCKER_VERSION"
    else
        log_error "Docker 安装失败"
        exit 1
    fi
    
    # 检查 Docker Compose
    if docker compose version > /dev/null 2>&1; then
        COMPOSE_VERSION=$(docker compose version)
        log_info "✓ Docker Compose 版本: $COMPOSE_VERSION"
    else
        log_warn "Docker Compose 插件未安装"
    fi
    
    # 检查 Docker 服务状态
    if systemctl is-active --quiet docker; then
        log_info "✓ Docker 服务运行中"
    else
        log_error "Docker 服务未运行"
        exit 1
    fi
    
    # 验证镜像加速
    log_info "检查镜像加速配置..."
    if docker info 2>/dev/null | grep -q "Registry Mirrors" ; then
        docker info 2>/dev/null | grep -A 3 "Registry Mirrors"
    fi
}

# 运行测试容器
run_test_container() {
    log_info "运行测试容器 hello-world..."
    if docker run --rm hello-world > /dev/null 2>&1; then
        log_info "✓ 测试容器运行成功"
    else
        log_warn "测试容器运行失败,但 Docker 已安装"
    fi
}

# 显示安装信息
show_info() {
    echo ""
    echo "============================================"
    log_info "Docker 安装完成!"
    echo "============================================"
    echo ""
    echo "Docker 版本:$(docker --version)"
    echo "Docker Compose 版本:$(docker compose version 2>/dev/null || echo 'N/A')"
    echo ""
    echo "常用命令:"
    echo "  docker ps              # 查看运行中的容器"
    echo "  docker images          # 查看镜像列表"
    echo "  docker compose up -d   # 启动 docker-compose 项目"
    echo "  docker system df       # 查看磁盘使用"
    echo "  docker system prune    # 清理未使用资源"
    echo ""
    echo "镜像加速配置文件:"
    echo "  /etc/docker/daemon.json"
    echo ""
    echo "如需允许非 root 用户使用 Docker,执行:"
    echo "  usermod -aG docker <username>"
    echo ""
    log_info "安装日志已保存"
    echo "============================================"
}

# 主函数
main() {
    echo "============================================"
    echo " Docker & Docker Compose 一键安装脚本"
    echo " 国内网络优化版"
    echo "============================================"
    echo ""
    
    check_root
    detect_os
    
    INSTALL_DOCKER=true
    if ! check_docker_installed; then
        INSTALL_DOCKER=false
    fi
    
    if [ "$INSTALL_DOCKER" = true ]; then
        update_system
        install_dependencies
        add_docker_gpg_key
        add_docker_repo
        install_docker
    fi
    
    configure_registry_mirrors
    start_docker
    
    echo ""
    verify_installation
    
    echo ""
    run_test_container
    
    echo ""
    show_info
}

# 执行主函数
main "$@"

使用方法

方法 1:直接复制到服务器

# 创建脚本文件并粘贴上面的完整内容
cat > install-docker.sh << 'EOF'
# [在这里粘贴上面的完整脚本]
EOF

# 赋予执行权限
chmod +x install-docker.sh

# 执行安装
./install-docker.sh

方法 2:保存为本地文件

  1. 复制上面的完整脚本
  2. 在本地创建文件 install-docker.sh
  3. 粘贴脚本内容并保存
  4. 上传到服务器并执行:
# 上传脚本
scp install-docker.sh root@your-server:/root/

# 登录服务器
ssh root@your-server

# 执行安装
chmod +x /root/install-docker.sh
/root/install-docker.sh

🌟 如果这份指南对你有帮助,请给我们一个 Star!🌟

Made with ❤️ by Dify Team