Files
Hermes-Skills/devops/docker/SKILL.md
T
Hermes Skills Manager 6770bc9b9d Initial commit: Hermes Agent skills collection
- Trading skills (OKX, dividend, lottery, quantitative)
- Creative skills (ASCII art, diagrams, video)
- Development skills (GitHub, debugging, TDD)
- Research skills (arXiv, blog monitoring)
- Productivity skills (email, documents, notes)
- MCP integration skills
- Custom user skills
2026-07-05 02:31:15 -04:00

319 lines
5.8 KiB
Markdown

---
name: docker
description: Docker容器管理技能 - 镜像构建、容器运行、编排管理、日志查看、网络配置。当用户提到"docker"、"容器"、"镜像"、"docker-compose"时触发。
version: 1.0.0
tags: [docker, container, devops, infrastructure]
---
# Docker 管理技能
Docker容器管理技能 - 镜像构建、容器运行、编排管理、日志查看、网络配置。
## 触发条件
- 用户提到 "docker"、"容器"、"镜像"、"docker-compose"
- 用户要求 "部署"、"运行容器"、"构建镜像"
- 用户需要 "查看日志"、"容器状态"、"网络配置"
## 快速参考
### 镜像管理
```bash
# 列出镜像
docker images
# 拉取镜像
docker pull <image>:<tag>
# 构建镜像
docker build -t <name>:<tag> .
# 删除镜像
docker rmi <image>
# 清理未使用镜像
docker image prune -a
```
### 容器管理
```bash
# 运行容器
docker run -d --name <name> -p <host>:<container> <image>
# 列出运行中的容器
docker ps
# 列出所有容器
docker ps -a
# 停止容器
docker stop <container>
# 启动容器
docker start <container>
# 重启容器
docker restart <container>
# 删除容器
docker rm <container>
# 进入容器
docker exec -it <container> /bin/bash
# 查看日志
docker logs -f <container>
# 查看容器详情
docker inspect <container>
```
### Docker Compose
```bash
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重建并启动
docker-compose up -d --build
# 扩展服务
docker-compose up -d --scale <service>=<count>
```
### 网络管理
```bash
# 列出网络
docker network ls
# 创建网络
docker network create <name>
# 查看网络详情
docker network inspect <name>
# 连接容器到网络
docker network connect <network> <container>
# 断开网络
docker network disconnect <network> <container>
```
### 数据卷管理
```bash
# 列出卷
docker volume ls
# 创建卷
docker volume create <name>
# 查看卷详情
docker volume inspect <name>
# 删除卷
docker volume rm <name>
# 清理未使用卷
docker volume prune
```
### 系统管理
```bash
# 查看Docker信息
docker info
# 查看磁盘使用
docker system df
# 清理所有未使用资源
docker system prune -a
# 查看Docker版本
docker version
```
## 常见场景
### 1. 部署Web应用
```bash
# 运行Nginx
docker run -d --name web -p 80:80 -v ./html:/usr/share/nginx/html nginx:alpine
# 运行Node.js应用
docker run -d --name app -p 3000:3000 -e NODE_ENV=production node-app
```
### 2. 运行数据库
```bash
# MySQL
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=mydb \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
mysql:8
# PostgreSQL
docker run -d --name postgres \
-e POSTGRES_PASSWORD=root \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v pg-data:/var/lib/postgresql/data \
postgres:15
# Redis
docker run -d --name redis -p 6379:6379 redis:alpine
```
### 3. 运行OctoBot(量化交易)
```bash
docker run -d --name octobot \
-p 80:80 \
-v octobot-data:/octobot/user \
drakkarsoftware/octobot:stable
```
### 4. 运行Freqtrade
```bash
# 下载配置
mkdir freqtrade && cd freqtrade
curl https://raw.githubusercontent.com/freqtrade/freqtrade/main/docker-compose.yml -o docker-compose.yml
# 启动
docker-compose up -d
# 进入容器
docker exec -it freqtrade bash
```
## Dockerfile 最佳实践
```dockerfile
# 使用多阶段构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
```
## ghcr.io 镜像拉取(中国服务器)
ghcr.io (GitHub Container Registry) 在中国服务器上经常超时。`registry-mirrors` in `daemon.json` **只加速 Docker Hub,不加速 ghcr.io**。
### 方案:NJU 镜像代理
```bash
# 直接用 NJU 镜像拉取(替换 ghcr.io 前缀)
docker pull ghcr.nju.edu.cn/<owner>/<image>:<tag>
# Tag 回原始名称(让 docker-compose 识别)
docker tag ghcr.nju.edu.cn/<owner>/<image>:<tag> ghcr.io/<owner>/<image>:<tag>
```
### 其他 ghcr.io 镜像
- `ghcr.nju.edu.cn` — 南京大学镜像(已验证可用)
- `ghcr.mirrors.ustc.edu.cn` — 中科大镜像
- 不保证长期可用,失效时换一个试试
### Docker Daemon 代理(拉 Docker Hub 镜像)
如果 Docker Hub 也拉不动,配置 daemon 级代理:
```bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
⚠️ 代理配置会影响 ghcr.io 镜像拉取(可能变慢),拉完 ghcr.io 后建议移除代理配置再拉 Docker Hub 镜像。
## 故障排查
### 容器无法启动
```bash
# 查看日志
docker logs <container>
# 查看容器状态
docker inspect <container>
# 检查端口占用
netstat -tulpn | grep <port>
```
### 磁盘空间不足
```bash
# 查看磁盘使用
docker system df
# 清理未使用资源
docker system prune -a
# 清理构建缓存
docker builder prune
```
### 网络问题
```bash
# 检查容器网络
docker network inspect <network>
# 测试容器连通性
docker exec -it <container> ping <target>
# 查看端口映射
docker port <container>
```
## 快捷操作
```bash
# 停止所有容器
docker stop $(docker ps -q)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -q)
# 进入最近创建的容器
docker exec -it $(docker ps -lq) /bin/bash
```
## 免责声明
⚠️ 生产环境操作前请确认影响范围,谨慎使用 `prune` 和批量删除命令。