Update from Sync Service

This commit is contained in:
FNS Service
2026-04-21 11:24:29 +08:00
parent 8b26b39957
commit 1e60ef9d28

View File

@@ -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
```
## 安装 DockerLinux
```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 <container>` 查看日志 |
| 端口冲突 | 检查宿主机端口占用 `netstat -tlnp` |
| 权限不足 | 确保用户在 docker 组 `groups $USER` |
| 镜像拉取慢 | 配置国内镜像加速 |
| TUN 不工作 | 确认 host 模式 + `/dev/net/tun` 挂载 |