docker的编排运行

将复杂的参数(端口、挂载卷、网络)持久化在 YAML 文件中(astrbot 示例)

services:
astrbot:
image: soulter/astrbot:latest
container_name: astrbot
restart: always
ports:
- "6185:6185" # Web 控制台端口
- "6199:6199" # 消息监听端口(根据需要开启)
volumes:
- ./data:/AstrBot/data
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
- TZ=Asia/Shanghai
# 启动命令: 
docker compose up -d ## 根据配置文件构建镜像(如有必要)、创建并启动所有服务(没有-d: 前台运行. -d: 后台运行)。
# 停止
docker compose down ## 停止并删除所有由 up 创建的容器、网络,默认也会删除默认的匿名数据卷(需注意数据丢失风险)。

docker compose stop ## 仅停止运行中的容器,但不删除它们(可以通过 start 再次启动)

docker compose start ## 启动已停止的服务容器

docker compose restart ## 重启所有服务或指定服务

docker compose pause/unpause ## 暂停 / 恢复指定服务的容器

### 日志和状态
docker compose ps ## 查看当前正在运行(或已停止)的服务容器状态、端口映射等信息

docker compose logs ## 查看所有服务的日志输出。通常配合 -f(实时跟踪)使用,如:docker compose logs -f web

docker compose top ## 查看各个服务容器内正在运行的进程

# docker stop rustdesk-api
# docker rm rustdesk-api
# docker rm -f rustdesk-api // -f 强制删除

### 容器内交互与执行
docker compose exec SERVICE COMMAND ## 在一个已经在运行的服务容器中执行一条命令(常用于进入运行中的容器:docker compose exec web bash)

### 构建与镜像管理

docker compose build ## 构建或重新构建服务中定义的镜像。如果修改了 Dockerfile,必须重新执行此命令

docker compose pull ## 拉取配置文件中各服务所依赖的基础镜像或最新镜像


docker compose run ## 在服务中临时运行一个一次性容器
# 常用参数(Options):
# -d, --detach:后台运行容器并打印容器 ID(通常用于需要长时间运行但又是通过 run 启动的场景)。
# --rm:非常常用。容器运行完毕并退出后,自动删除该容器。这能避免宿主机上积聚大量无用的已停止容器。
# -p, --publish=[]:暴露容器端口到宿主机(例如 -p 8080:80)。
# -e, --env=[]:设置环境变量(例如 -e RAILS_ENV=development)。
# --service-ports:允许将服务配置中定义的端口映射到宿主机上。
# --no-deps:默认情况下,run 会自动启动该服务所依赖的其他服务(例如运行 web 服务前先启动 db 数据库)。使用该参数可以跳过依赖服务的启动。