- 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
319 lines
5.8 KiB
Markdown
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` 和批量删除命令。
|