Update from Sync Service
This commit is contained in:
246
Docker/Docker容器化部署指南.md
Executable file
246
Docker/Docker容器化部署指南.md
Executable 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
|
||||
```
|
||||
|
||||
## 安装 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 <container>` 查看日志 |
|
||||
| 端口冲突 | 检查宿主机端口占用 `netstat -tlnp` |
|
||||
| 权限不足 | 确保用户在 docker 组 `groups $USER` |
|
||||
| 镜像拉取慢 | 配置国内镜像加速 |
|
||||
| TUN 不工作 | 确认 host 模式 + `/dev/net/tun` 挂载 |
|
||||
Reference in New Issue
Block a user