Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。以下是一些常用的 Docker Compose 命令:

创建(自动创建容器)

  1. docker-compose up:启动容器,创建并运行Compose文件中定义的服务。
  2. docker-compose up -d:以后台模式启动容器。
  3. docker-compose -f docker-compose-prod.yml up -d:指定 compose 文件启动,默认使用当前目录中的 docker-compose.yml。
  4. docker-compose -f docker-compose-prod.yml up mqtt -d:指定 compose 文件启动,并指定启动 mqtt 服务。

销毁(删除创建的容器)慎用

  1. docker-compose down:停止并移除Compose文件中定义的服务及相关容器、网络、卷等资源。
  2. docker-compose ps:列出Compose文件中定义的服务的状态。
  3. docker-compose logs:查看Compose文件中定义的服务的日志输出。
  4. docker-compose build:构建Compose文件中定义的服务的镜像。
  5. docker-compose pull:拉取Compose文件中定义的服务所需的镜像。
  6. docker-compose exec <service-name> <command>:在指定服务中执行一个命令。
  7. docker-compose stop:停止Compose文件中定义的服务,但不移除容器。
  8. docker-compose start:启动Compose文件中定义的服务,如果之前已停止。
  9. docker-compose restart:重启Compose文件中定义的服务。
  10. docker-compose down -v:停止并移除Compose文件中定义的服务,同时移除相关的卷。

这些命令允许你轻松管理使用 Docker Compose 定义的多容器应用。根据你的需要,你可以使用这些命令来启动、停止、构建、查看日志等。

Docker Compose常用命令

  • 安装docker-comose
  • docker-compose配置文件及常用指令
  • yaml 文件级
  • docker-compose.yml配置文件示例
  • docker compose常用命令
  • 启动服务
  • 停止服务
  • 重启服务
  • 查看运行容器列表
  • 查看服务日志
  • 构建镜像
  • docker-compose rm删除

安装docker-comose

# 声明版本
VER=2.35.1

# 下载二进制程序
wget -c https://github.com/docker/compose/releases/download/v$VER/docker-compose-linux-x86_64

# 创建bin目录
mkdir -p $HOME/bin

# 移动到bin
mv docker-compose-linux-x86_64 ./bin/docker-compose

# 授予执行权限
chmod +x ./bin/docker-compose

# 查看docker-compose版本
docker-compose -v

docker-compose配置文件及常用指令

Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用JSON。

Docker Compose 默认使用文件名 

docker-compose.yml

。当然,也可以使用 -f 参数指定具体文件。

yaml 文件级

Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

  • version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。
  • services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。
  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。
  • volumes 用于指引 Docker 来创建新的卷。

docker-compose.yml配置文件示例

services: # 定义服务
  confluence: # 定义 confluence 服务
    #  8.5.19 长期维护版本
    #  9.2.1 最新版本
    image: omaidb/confluence:8.5.19 # 使用的confluence长期维护版 镜像及其版本
    container_name: confluence-srv # 容器名称
    environment: # 设置环境变量
      - TZ=Asia/Shanghai # 设置时区为上海
    #      - JVM_MINIMUM_MEMORY=1g # JVM 最小内存
    #      - JVM_MAXIMUM_MEMORY=12g # JVM 最大内存
    #      - JVM_CODE_CACHE_ARGS='-XX:InitialCodeCacheSize=1g -XX:ReservedCodeCacheSize=8g' # JVM 代码缓存参数

    # 定义服务依赖
    depends_on:
      - postgres # 依赖 postgres 服务
    ports: # 映射端口
      - "80:8090" # 将宿主机的 8090 端口映射到容器的 8090 端口
    volumes: # 定义数据卷
      - home_data:/var/confluence # 将数据卷挂载到容器的 /var/confluence 目录
    restart: always # 设置容器始终重启策略
    networks: # 指定网络
      - network-bridge # 使用 network-bridge 网络

  # 定义名为 postgres 的服务
  postgres:
    image: postgres:15.4 # 使用 postgres 15.4 版本的镜像
    container_name: postgres-confluence # 容器名称
    healthcheck: # 健康检查配置
      test: ["CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root"] # 检查 PostgreSQL 服务是否可用
      timeout: 45s # 健康检查的超时时间为 45 秒
      interval: 10s # 健康检查的间隔时间为 10 秒
      retries: 10 # 健康检查失败后重试的次数为 10 次

    environment: # 定义环境变量
      - TZ=Asia/Shanghai # 设置时区为上海
      - POSTGRES_USER=root # PostgreSQL 的默认用户名为 root
      - POSTGRES_PASSWORD=123456 # PostgreSQL 的默认密码为 123456
      - APP_DB_USER=confluence # 应用程序的数据库用户名为 confluence
      - APP_DB_PASS=123456 # 应用程序的数据库密码为 123456
      - APP_DB_NAME=confluence # 应用程序的数据库名称为 confluence
    volumes: # 定义数据卷
      # - ./db:/docker-entrypoint-initdb.d/ # 将本地 ./db 目录挂载到容器的 /docker-entrypoint-initdb.d/ 目录
      - postgres_data:/var/lib/postgresql/data # 将本地 /data/postgres 目录挂载到容器的 /var/lib/postgresql/data 目录
    ports: # 定义端口映射
      - 5432:5432 # 将本地的 5432 端口映射到容器的 5432 端口
    restart: always # 服务失败时总是重启
    networks: # 指定网络
      - network-bridge # 使用 network-bridge 网络

networks: # 定义网络
  network-bridge: # 定义名为 network-bridge 的网络
    driver: bridge # 使用 bridge 驱动

volumes: # 定义数据卷
  home_data: # 定义名为 home_data 的数据卷
    external: false # 数据卷为内部创建
  postgres_data: # 定义名为 postgres_data 的数据卷
    external: false # 数据卷为内部创建

docker compose常用命令

命令 (Command)主要功能 (Description)常用选项 (Common Options)示例 (Example)
up构建、(重新)创建、启动并关联服务相关的容器。-d: 后台运行 (Detached mode) --build: 强制重新构建镜像 --force-recreate: 强制重新创建容器 --no-deps: 不启动链接的服务docker-compose up -d docker-compose up --build docker-compose up <service_name>
down停止并移除容器、网络、卷和镜像。-v--volumes: 同时移除数据卷 --rmi <type>: 移除镜像 (all 或 local--remove-orphans: 移除未在 compose 文件中定义的服务的容器docker-compose down docker-compose down -v
start启动已经存在的服务容器。docker-compose start <service_name> docker-compose start
stop停止正在运行的服务容器,但不删除它们。-t, --timeout <seconds>: 停止超时时间 (默认 10s)docker-compose stop <service_name> docker-compose stop
restart重启服务容器。-t, --timeout <seconds>: 重启/停止超时时间docker-compose restart <service_name> docker-compose restart
ps列出 Compose 项目中的容器。-q: 只显示容器 ID --services: 只列出服务名称 -a--all: 显示所有容器 (包括已停止的)docker-compose ps docker-compose ps -q
logs查看服务容器的日志输出。-f--follow: 持续跟踪日志输出 --tail <N>: 显示最后 N 行日志 -t--timestamps: 显示时间戳docker-compose logs -f <service_name> docker-compose logs --tail 50
build构建或重新构建服务的镜像。--no-cache: 构建镜像时不使用缓存 --pull: 始终尝试拉取更新的基础镜像docker-compose build <service_name> docker-compose build --no-cache
pull拉取服务依赖的镜像。--ignore-pull-failures: 拉取失败时继续 -q--quiet: 只显示进度,不输出详细信息docker-compose pull docker-compose pull <service_name>
exec在正在运行的容器中执行命令。-d: 分离模式运行 -T: 禁用伪 TTY 分配 (例如用于管道) -u--user <user>: 指定用户docker-compose exec <service_name> bash docker-compose exec -T db psql -U user -d dbname
run在新容器中运行一次性命令。--rm: 命令结束后移除容器 -e <KEY=VAL>: 设置环境变量 -v <host:cont>: 挂载卷 --service-ports: 映射服务端口docker-compose run --rm web python manage.py migrate docker-compose run -e DEBUG=1 web
config验证和查看 Compose 文件配置。-q--quiet: 只验证配置,无错误时不输出 --services: 打印服务名称列表 --volumes: 打印卷名称列表docker-compose config docker-compose config -q
rm删除已停止的服务容器。-f--force: 强制删除 -s--stop: 在删除前先停止容器 -v: 同时删除关联的匿名卷docker-compose rm docker-compose rm -fsv
pause暂停服务中的容器进程 (利用 cgroup freezer)。docker-compose pause <service_name>
unpause恢复服务中被暂停的容器进程。docker-compose unpause <service_name>
kill通过发送 SIGKILL 信号强制停止服务容器。-s <signal>: 指定发送的信号 (默认 SIGKILL)docker-compose kill <service_name> docker-compose kill -s SIGTERM web

通用选项 (Global Options):

  • -f, --file <filename>: 指定一个或多个 Compose 配置文件 (默认为 docker-compose.yml)。
  • -p, --project-name <name>: 指定项目名称 (默认为当前目录名)。
  • --profile <profile_name>: 激活指定配置文件的服务。

启动服务

# 启动服务

docker-compose up
  • 启动服务
docker-compose up -d
  • 启动服务
docker-compose start

停止服务

  • 停止服务
docker-compose down
  • 停止服务
docker-compose stop

重启服务

  • 重启服务
docker-compose restart

查看运行容器列表

  • 列出所有运行容器
# 列出所有运行容器
docker-compose ps

## -a 包括停止的容器
docker-compose ps

查看服务日志

  • 查看服务日志
docker-compose logs <服务名>

构建镜像

  • 构建或者重新构建服务
docker-compose build

docker-compose rm删除已停止的服务容器

docker compose rm
参数解释
-f, –force不要求确认删除
-s, –stop如果需要,请在删除之前停止容器
-v, –volumes删除附加到容器的所有匿名卷

作者 root

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注