Docker 相关知识笔记
创建于 2026-05-09
Docker 相关知识笔记
Summary
Docker 的价值是把应用和依赖打包成可迁移、可重复启动的运行环境。对 MeetYou 来说,Docker 很适合部署 sidecar 服务、数据库、代理、WeChat bridge、信息源采集器等;Core 本体既可以用 systemd + venv 跑,也可以未来容器化。相关:00-MOC-命令行与部署知识库总览|03-Linux-命令笔记|06-MeetYou-Core-部署运维手册|07-常见排错与小点整合
1. 核心概念
| 概念 | 含义 | 类比 |
|---|---|---|
| Image 镜像 | 静态模板,包含程序和依赖 | 安装包/系统快照 |
| Container 容器 | 镜像运行起来后的实例 | 正在运行的程序 |
| Volume 卷 | 持久化数据 | 外接硬盘 |
| Network 网络 | 容器之间/容器与外部通信 | 虚拟交换机 |
| Dockerfile | 定义如何构建镜像 | 构建说明书 |
| Compose | 多容器编排 | 一键启动整套服务 |
2. Docker 适合和不适合
适合:
- 数据库、Redis、Nginx、Caddy。
- 代理/VPN/订阅服务。
- 微信 Linux bridge、爬虫、信息源采集器。
- 多服务组合,一键启动/停止。
不一定适合:
- 刚开始调试的 Python 项目,直接 venv + systemd 可能更直观。
- 强依赖本机 GUI/硬件权限的程序,容器配置会更复杂。
- 需要频繁改代码并马上热调的早期开发阶段。
3. 安装后检查
docker --version
docker compose version
sudo systemctl status docker
把当前用户加入 docker 组:
sudo usermod -aG docker $USER
newgrp docker
Warning
加入 `docker` 组等价于给用户很高权限。服务器上只给可信用户加。4. 容器生命周期命令
docker ps # 正在运行的容器
docker ps -a # 所有容器
docker images # 本地镜像
docker pull nginx:latest # 拉镜像
docker run --name web -p 8080:80 nginx:latest
停止/启动/删除:
docker stop web
docker start web
docker restart web
docker rm web
docker rmi nginx:latest
进入容器:
docker exec -it web bash
docker exec -it web sh # 有些镜像没有 bash
查看日志:
docker logs web
docker logs -f web
docker logs --tail 100 web
资源:
docker stats
docker inspect web
5. 端口映射
docker run -p 宿主机端口:容器端口 镜像
例子:
docker run --name nginx-demo -p 8080:80 nginx
访问:
curl http://127.0.0.1:8080
Note
`-p 8080:80` 表示“宿主机 8080 -> 容器 80”。不要反过来理解。6. 数据卷 Volume
匿名卷和命名卷:
docker volume ls
docker volume inspect volume_name
挂载目录:
docker run -v /opt/data:/data 镜像
含义:宿主机 /opt/data 映射到容器 /data。
Warning
删除容器不一定删除卷。数据库等数据通常保存在卷里,升级前要备份。7. Docker Compose 基础
文件:docker-compose.yml
services:
app:
image: nginx:latest
container_name: demo-nginx
ports:
- "8080:80"
restart: unless-stopped
启动:
docker compose up -d
查看:
docker compose ps
docker compose logs -f
docker compose logs --tail 100 app
停止:
docker compose down
重启:
docker compose restart app
更新镜像:
docker compose pull
docker compose up -d
8. Compose 常用字段
services:
service_name:
image: xxx:latest
container_name: xxx
restart: unless-stopped
ports:
- "宿主机端口:容器端口"
environment:
KEY: value
env_file:
- .env
volumes:
- ./data:/data
networks:
- app-net
networks:
app-net:
解释:
restart: unless-stopped:容器异常退出或服务器重启后自动恢复,除非你手动 stop。env_file:从.env读环境变量。volumes:持久化数据/配置。networks:让服务之间按服务名通信。
9. Dockerfile 最小认知
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
构建和运行:
docker build -t my-app:dev .
docker run --rm my-app:dev
.dockerignore:
.git
.venv
node_modules
__pycache__
.env
10. MeetYou 相关使用建议
10.1 Core 本体
当前阶段 Core 用:
Linux + Python venv + systemd + PostgreSQL
优点是排错直观、日志清楚、和现有部署路径一致。未来稳定后再容器化更合适。
10.2 适合 Docker 化的模块
- WeChat Linux Runtime + Bridge。
- 代理/订阅服务。
- 信息源采集器。
- 独立数据库或缓存。
- Nginx/Caddy 反向代理。
10.3 sidecar 思路
MeetYou Core
-> HTTP/WebSocket
-> Docker sidecar service
-> 外部服务/GUI/协议/硬件
这样可以把高风险、依赖复杂、需要单独权限的模块隔离出来。
11. 清理命令
docker system df # 查看占用
docker image prune # 清理悬空镜像
docker container prune # 清理停止容器
docker volume prune # 清理未使用卷,谨慎
docker system prune # 综合清理,谨慎
Danger
不要随便 `docker volume prune`。数据库、代理、订阅服务数据可能存在 volume 中。12. 常见排错
| 现象 | 排查命令 | 常见原因 |
|---|---|---|
| 容器起不来 | docker logs 容器名 |
配置/env/端口/权限错误 |
| 端口冲突 | ss -lntp |
宿主机端口已被占用 |
| 容器内访问不到外部 | docker exec -it 容器 sh |
DNS/代理/网络策略 |
| 数据没了 | docker volume ls |
没挂 volume 或误删卷 |
| 修改 compose 不生效 | docker compose up -d |
没重建/没重启 |
| 权限不足 | ls -la |
volume 挂载目录 owner 不对 |
13. 常用组合命令
13.1 看某个 Compose 项目状态
cd /opt/proxy
docker compose ps
docker compose logs --tail 100
13.2 重启某个服务
docker compose restart sub-server
13.3 查看容器内文件
docker exec -it container_name sh
ls -la /app
13.4 验证宿主机端口
ss -lntp | grep 6174
curl http://127.0.0.1:6174/health
14. 自测题
- Image 和 Container 的区别是什么?
-p 8080:80哪个是宿主机端口?- 为什么数据库容器必须认真处理 volume?
docker compose down和docker compose restart的差异是什么?
我的新增记录
反向链接:00-MOC-命令行与部署知识库总览|03-Linux-命令笔记|06-MeetYou-Core-部署运维手册|07-常见排错与小点整合