一键安装,开箱即用 | 国内网络环境优化 | 适合所有开发者
无论你是容器化新手还是经验丰富的开发者,这份指南都能让你在 5 分钟内完成 Docker 的完整部署,并立即投入生产使用。告别繁琐的配置过程,告别网络超时的烦恼,让我们开始这场极速之旅!
📖 目录
🎯 为什么选择这份指南?
🌟 核心优势
| 特性 | 说明 | 收益 |
|---|---|---|
| ⚡ 一键安装 | 单条命令完成全部部署 | 节省 95% 配置时间 |
| 🇨🇳 国内优化 | 自动配置阿里云镜像源 | 下载速度提升 10-50 倍 |
| 🛡️ 生产级配置 | 内置安全与性能最佳实践 | 开箱即用于生产环境 |
| 🔍 智能检测 | 自动识别系统并处理冲突 | 零人工干预 |
| 📊 实时反馈 | 彩色日志与进度提示 | 清晰掌握安装状态 |
| ✅ 自动验证 | 安装后立即运行测试 | 确保环境可靠性 |
🎁 你将获得
✅ Docker Engine 最新稳定版
✅ Docker Compose V2(新一代编排工具)
✅ Docker Buildx(多平台构建支持)
✅ 三层镜像加速(中科大 + 网易 + 百度云)
✅ 日志轮转配置(自动管理磁盘空间)
✅ 开机自启动(服务器重启后自动恢复)
🚫 告别痛点
❌ 不再因 GitHub/Docker Hub 网络超时而抓狂
❌ 不再为复杂的 GPG 密钥配置而困惑
❌ 不再担心下载的版本不是最新的
❌ 不再手动配置镜像加速器
❌ 不再重复执行一堆命令
💻 系统要求
支持的操作系统
| 操作系统 | 最低版本 | 推荐版本 | 状态 |
|---|---|---|---|
| Debian | 11 (Bullseye) | 12 (Bookworm) | ✅ 完全支持 |
| Ubuntu | 20.04 LTS | 22.04 LTS | ✅ 完全支持 |
| Ubuntu | 24.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
解决方案:
- 检查镜像加速配置:
docker info | grep -A 5 "Registry Mirrors"
- 重新配置镜像加速:
bash scripts/install-docker.sh # 选择 N 跳过安装,仅配置加速
- 使用阿里云专属加速器(推荐)
Q3: Docker 服务无法启动?
检查服务状态:
systemctl status docker
journalctl -u docker -n 50 --no-pager
常见原因:
- daemon.json 格式错误
# 验证 JSON 格式
cat /etc/docker/daemon.json | python3 -m json.tool
- 端口冲突
# 检查 2375/2376 端口
netstat -tlnp | grep docker
- 存储驱动不兼容
# 查看可用驱动
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 完整部署
✅ 国内网络环境的最佳实践
✅ 生产级别的配置方案
✅ 常见问题的快速解决
✅ 性能优化与安全加固
下一步建议
-
部署你的第一个应用
cd dify/docker docker compose up -d -
学习 Dockerfile 编写
- 创建自己的镜像
- 优化构建过程
-
探索 Docker Compose
- 编排多容器应用
- 管理复杂服务
-
进阶到 Kubernetes
- 学习容器编排
- 生产环境部署
获取帮助
- 问题反馈:GitHub Issues
- 社区讨论:Dify 社区
- 技术支持:查看 常见问题 章节
📝 更新日志
- 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:保存为本地文件
- 复制上面的完整脚本
- 在本地创建文件
install-docker.sh - 粘贴脚本内容并保存
- 上传到服务器并执行:
# 上传脚本
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