Skip to content

docker-compose 常用命令

Docker Compose 是一个定义和运行多容器应用程序的工具
在单个 YAML 配置文件中管理启动所有服务
官网地址:https://docs.docker.com/compose/

升级警告

  • 现在 compose 已经升级到 V2 版本了,作为 docker 的一个子命令而非单独的 docker-compose 命令
  • 命令使用方式改为了 docker compose;中间不再有 -

安装

  • 新版V2:安装了最新版的 docker 即可直接使用 docker compose 命令了
  • 旧版V1:需要单独安装 docker-compose

基础命令

命令含义
docker compose up启动并构建容器;--build 可以强制重新构建,-d 启动后在后台运行
docker compose down关闭所有内容,并完全删除容器
docker compose start/stop/restart容器组中容器的启停方式;可加上容器名字,对单个容器操作
docker compose ps查看所有服务运行状态
docker compose run {name} {cmd}在指定容器中运行命令
docker compose logs查看日志;-f 持续查看,与 tail -f 一样

YAML 配置文件常用元素

https://docs.docker.com/compose/compose-file/

元素含义
restart指定容器意外停止后的策略
command覆盖容器镜像声明的默认命令
ports端口映射
volumes挂载
working_dir指定工作目录
environment环境变量
depends_on设置启动顺序
watch自动加载文件变动,而无需重新启动服务
include包含引用其它 yaml 文件,可用于拆分服务
secrets加密信息
image指定镜像
build使用 Dockerfile 构建镜像
networks使用的网络

YAML 文件示例

yaml
services:
  mysql:
    image: mysql
    restart: always
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    environment:
        MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      - "/data/mysql:/var/lib/mysql"
yaml
services:
  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    volumes:
      - /data/mongo:/data/db
    ports:
      - 27017:27017
yaml
services:
  redis:
    image: redis
    restart: always
    command: redis-server --requirepass 123456
    volumes:
      - /data/redis:/data
    ports:
      - 6379:6379
  • 文件名:compose.yaml(首选)或 compose.yml
  • 多个服务之间的调用访问使用服务名进行,而不是使用 127.0.0.1 或 localhost

资源限制

https://docs.docker.com/compose/compose-file/deploy/#resources

yaml
services:
  python:
    # ...
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1024M
  • compose v3 版本通过 deploy.resources.limits 来进行配置资源限制
  • 官方文档说这个只有在 Swarm 模式下才起作用;实测是通过 docker compose up 启动之后,通过 docker stats 查询,能看到内存限制,但是好像在超过限制后没有自动重启服务
  • 还有顶级元素可以考虑,比如 mem_limit