Docker 相关知识笔记

Docker DockerCompose Linux 部署 MeetYou
创建于 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. 自测题

  1. Image 和 Container 的区别是什么?
  2. -p 8080:80 哪个是宿主机端口?
  3. 为什么数据库容器必须认真处理 volume?
  4. docker compose downdocker compose restart 的差异是什么?

我的新增记录


反向链接:00-MOC-命令行与部署知识库总览03-Linux-命令笔记06-MeetYou-Core-部署运维手册07-常见排错与小点整合