From 1e60ef9d2831a85391a9b066143d1f8479e12566 Mon Sep 17 00:00:00 2001 From: FNS Service Date: Tue, 21 Apr 2026 11:24:29 +0800 Subject: [PATCH] Update from Sync Service --- Docker/Docker容器化部署指南.md | 246 +++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100755 Docker/Docker容器化部署指南.md diff --git a/Docker/Docker容器化部署指南.md b/Docker/Docker容器化部署指南.md new file mode 100755 index 0000000..a3e5c98 --- /dev/null +++ b/Docker/Docker容器化部署指南.md @@ -0,0 +1,246 @@ +--- +title: Docker 容器化部署指南 +tags: + - Docker + - DevOps + - 容器化 + - Linux +created: 2026-04-21 +--- + +# Docker 容器化部署指南 + +## 核心概念 + +| 概念 | 说明 | +|------|------| +| **镜像(Image)** | 只读模板,包含运行应用所需的文件系统 | +| **容器(Container)** | 镜像的运行实例,类似轻量级虚拟机 | +| **仓库(Registry)** | 存储和分发镜像的服务(Docker Hub、GHCR) | +| **Dockerfile** | 定义镜像构建步骤的脚本 | + +## 常用命令 + +### 镜像操作 + +```bash +# 查看本地镜像 +docker images + +# 拉取镜像 +docker pull nginx:latest + +# 构建镜像 +docker build -t myapp:1.0 . + +# 删除镜像 +docker rmi myapp:1.0 + +# 推送镜像 +docker push myrepo/myapp:1.0 +``` + +### 容器操作 + +```bash +# 运行容器 +docker run -d --name myapp -p 8080:80 nginx + +# 查看运行中的容器 +docker ps + +# 查看所有容器(包括停止的) +docker ps -a + +# 停止/启动容器 +docker stop myapp +docker start myapp + +# 进入容器 +docker exec -it myapp /bin/bash + +# 查看日志 +docker logs -f myapp + +# 删除容器 +docker rm myapp +``` + +### Docker Compose + +```bash +# 启动服务 +docker compose up -d + +# 查看服务状态 +docker compose ps + +# 重启服务 +docker compose restart + +# 查看日志 +docker compose logs -f + +# 停止服务 +docker compose down + +# 重新构建并启动 +docker compose up -d --build +``` + +## Dockerfile 最佳实践 + +```dockerfile +# 1. 使用多阶段构建减小镜像体积 +FROM node:20-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production +COPY . . +RUN npm run build + +# 2. 生产镜像使用非 root 用户 +FROM node:20-alpine AS production +WORKDIR /app +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules ./node_modules +USER node +EXPOSE 3000 +CMD ["node", "dist/index.js"] + +# 3. 使用 .dockerignore 排除不必要的文件 +# .git +# node_modules +# *.log +# .env +``` + +## 常用 Docker Compose 示例 + +### 基础 Web 应用 + +```yaml +version: '3.8' + +services: + web: + image: nginx:alpine + ports: + - "80:80" + volumes: + - ./html:/usr/share/nginx/html:ro + restart: unless-stopped + + app: + build: . + ports: + - "3000:3000" + environment: + - NODE_ENV=production + depends_on: + - db + restart: unless-stopped + + db: + image: postgres:15-alpine + volumes: + - postgres_data:/var/lib/postgresql/data + environment: + POSTGRES_DB: myapp + POSTGRES_USER: user + POSTGRES_PASSWORD: ${DB_PASSWORD} + restart: unless-stopped + +volumes: + postgres_data: +``` + +### Clash + metacubexd(代理面板) + +```yaml +version: '3.8' + +services: + clash: + container_name: clash + image: metacubex/mihomo:Alpha + restart: unless-stopped + network_mode: host + pid: host + cap_add: + - ALL + volumes: + - ./config:/root/.config/mihomo + - /dev/net/tun:/dev/net/tun + + dashboard: + container_name: dashboard + image: ghcr.io/metacubex/metacubexd:latest + restart: unless-stopped + network_mode: host +``` + +## 安装 Docker(Linux) + +```bash +# Ubuntu/Debian +curl -fsSL https://get.docker.com | sudo sh +sudo usermod -aG docker $USER + +# Docker Compose(独立安装) +sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \ + -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +``` + +## 网络模式选择 + +| 模式 | 说明 | 适用场景 | +|------|------|----------| +| **bridge(默认)** | NAT 网络,端口需映射 | 单容器简单应用 | +| **host** | 共享宿主机网络栈 | TUN/透明代理、性能敏感应用 | +| **overlay** | 跨主机容器网络 | Docker Swarm 集群 | +| **none** | 禁用网络 | 隔离安全环境 | + +## 常用参数 + +| 参数 | 说明 | +|------|------| +| `-d` | 后台运行(detached) | +| `-p 8080:80` | 端口映射(宿主机:容器) | +| `-v ./data:/data` | 卷挂载 | +| `-e KEY=val` | 环境变量 | +| `--name myapp` | 容器命名 | +| `--restart unless-stopped` | 自动重启策略 | +| `--network mynet` | 加入指定网络 | +| `-it` | 交互式终端 | +| `--rm` | 容器停止后自动删除 | + +## 清理命令 + +```bash +# 删除已停止的容器 +docker container prune + +# 删除悬空镜像(无 tag) +docker image prune + +# 删除所有未使用的镜像 +docker image prune -a + +# 删除已停止的容器和未使用的镜像 +docker system prune + +# 完全清理(包括卷) +docker system prune -a --volumes +``` + +## 故障排查 + +| 问题 | 解决方案 | +|------|---------| +| 容器无法启动 | `docker logs ` 查看日志 | +| 端口冲突 | 检查宿主机端口占用 `netstat -tlnp` | +| 权限不足 | 确保用户在 docker 组 `groups $USER` | +| 镜像拉取慢 | 配置国内镜像加速 | +| TUN 不工作 | 确认 host 模式 + `/dev/net/tun` 挂载 |