比较官方的说法:
docker-compose.yml
,extends
文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。docker-compose.yml
,可通过环境变量 COMPOSE_FILE
或 -f
参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。 使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose 允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。通俗一点的说法:
总而言之,Docker Compose 是一个简化多容器 Docker 应用程序管理的工具,它通过使用一个配置文件来定义和管理多个容器的运行方式,使得应用程序的部署和管理变得更加简单和高效。
# 要安装其他版本的 Compose,请替换 1.24.1
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注:直接使用上面这条命令的话,一方面,下载速度会非常慢;另一方面,可能文件下载到一部分会提示下载失败。所以综合上述原因,我们可以在浏览器中将上面的文件下载好,然后将文件传输到虚拟机(我这里是 Ubuntu)中,然后用下面这条命令将此文件改名:
mv /root/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
解释:上述命令中的 /root/docker-compose-linux-x86_64
是我的虚拟机中下载好的文件存放的路径,docker-compose-linux-x86_64
是下载的文件的名字。
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 查看 docker-compose 版本
docker-compose --version
rm /usr/local/bin/docker-compose
pip uninstall docker-compose
docker-compose --help
docker compose [OPTIONS] COMMAND
docker-compose.yml
)创建并运行多个容器,使它们协同工作。docker compose up [OPTIONS] [SERVICE...]
参数 | 说明 |
---|---|
-d | 在后台运行服务容器 |
–no-color | 不使用颜色来区分不同的服务的控制输出 |
–no-deps | 不启动服务所链接的容器 |
–force-recreate | 强制重新创建容器,不能与 –no-recreate 同时使用 |
–no-recreate | 如果容器已经存在,则不重新创建,不能与 –force-recreate 同时使用 |
–no-build | 不自动构建缺失的服务镜像 |
–build | 在启动容器前构建服务镜像 |
–abort-on-container-exit | 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 |
-t,-–timeout int | 停止容器时候的超时(默认为 10 秒) |
–remove-orphans | 删除服务中没有在 compose 文件中定义的容器 |
-f | 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定 |
# 启动所有服务
docker-compose up
# 在后台启动所有服务
docker-compose up -d
# 在后台所有启动服务,指定编排文件
docker-compose -f docker-compose.yml up -d
注:直接在某个目录输入命令 docker-compose ps
或 docker-compose up
,可能会报错:no configuration file provided: not found
。这个错误提示表明在当前目录下找不到 Docker Compose 的配置文件(docker-compose.yml
或 docker-compose.yaml
)。docker-compose
命令默认会在当前目录下查找配置文件来执行相应的操作。所以说,解决方式很简单:只要切换到 docker-compose 配置文件所在的目录(或者是 docker-compose 的安装目录)即可。
docker compose ps [OPTIONS] [SERVICE...]
# 基本用法
docker-compose ps
默认情况下,它会在当前目录下查找名为 docker-compose.yml 或 docker-compose.yaml 的配置文件,并显示与该文件中定义的服务相关联的容器的状态信息。
解释:如上图所示,直接在某个目录输入命令 docker-compose ps
或 docker-compose up
,可能会报错:no configuration file provided: not found
。这个错误提示表明在当前目录下找不到 Docker Compose 的配置文件(docker-compose.yml
或 docker-compose.yaml
)。docker-compose
命令默认会在当前目录下查找配置文件来执行相应的操作。所以说,解决方式很简单:只要切换到 docker-compose 配置文件所在的目录(或者是 docker-compose 的安装目录)即可。
# 指定配置文件
docker-compose -f <file> ps
使用 -f
选项可以指定要使用的配置文件。例如,要使用名为 my-compose.yml
的配置文件,可以运行 docker-compose -f my-compose.yml ps
。
# 显示详细信息
docker-compose ps -a
使用 -a
选项可以显示所有容器的详细信息,包括已停止的容器。默认情况下,它只显示正在运行的容器。
docker-compose start
再次启动。docker compose stop [OPTIONS] [SERVICE...]
docker-compose up
创建的容器、网络和卷。docker-compose down
命令会执行以下操作:
docker-compose up
启动的容器。docker compose down [OPTIONS]
参数 | 说明 |
---|---|
–rmi type |
移除关联的镜像。type 参数可以是 “all”(移除所有镜像)、“local”(仅移除本地镜像)或 “none”(不移除镜像)。默认情况下,不会删除镜像。 |
-v 或 --volumes |
除关联的卷。默认情况下,docker-compose down 不会删除卷,使用该选项可以移除关联的卷。 |
--remove-orphans |
移除孤立的容器。如果在 docker-compose.yml 文件中定义了服务,但它们不再运行,使用该选项可以移除这些孤立的容器。 |
docker-compose
启动的服务的日志。docker compose logs [OPTIONS] [SERVICE...]
参数 | 说明 |
---|---|
-f 或 --follow |
实时输出日志信息,类似于 tail -f 命令的功能。可以持续查看日志的输出,直到手动停止。 |
--tail |
仅显示最后 行的日志信息。可以使用正整数作为参数,例如 --tail 100 将只显示最后 100 行。 |
-t 或 --timestamps |
显示时间戳信息。 |
--no-color |
禁止输出颜色编码,以纯文本形式显示日志。 |
在项目目录中运行命令:打开终端,进入包含 docker-compose.yml
文件的项目目录,然后运行 docker-compose logs
命令。
cd /path/to/project
docker-compose logs
指定服务名称:默认情况下,docker-compose logs
会显示所有服务的日志。如果只想查看特定服务的日志,可以指定服务名称作为参数。
docker-compose logs <service1> <service2>
其中,
和
是要查看日志的服务的名称。
docker compose build [OPTIONS] [SERVICE...]
参数 | 说明 |
---|---|
-f 或 --file |
指定自定义的 Compose 文件,而不使用默认的 docker-compose.yml 文件。 |
在项目目录中运行命令:打开终端,进入包含 docker-compose.yml
文件的项目目录,然后运行 docker-compose build
命令。
cd /path/to/project
docker-compose build
指定服务名称:默认情况下,docker-compose build
会构建项目中的所有服务的镜像。如果只想构建特定服务的镜像,可以指定服务名称作为参数。
docker-compose build <service1> <service2>
其中,
和
是要构建镜像的服务的名称。
docker compose pull [OPTIONS] [SERVICE...]
参数 | 说明 |
---|---|
–ignore-pull-failures |
忽略拉取镜像过程中的错误 |
-q 或 --quiet |
只显示镜像拉取过程中的进度信息,不显示详细输出。 |
docker-compose
启动的服务容器。docker compose restart [OPTIONS] [SERVICE...]
docker compose rm [OPTIONS] [SERVICE...]
参数 | 说明 |
---|---|
-f 或 --force |
强制删除容器,即使它正在运行或附加到终端。 |
-s 或 --stop |
在删除容器之前停止它们。 |
-v |
删除容器所挂载的数据卷 |
docker-compose rm
删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop
命令来停止容器。docker-compose rm
命令删除容器将不会删除相关的镜像、网络或卷。要删除这些相关的资源,可以使用其他 Docker 命令,例如 docker image rm
来删除镜像,docker network rm
来删除网络,docker volume rm
来删除卷。docker-compose
管理的服务容器。docker compose start [SERVICE...]
docker-compose start
命令将会以后台模式启动服务容器,即容器将在后台运行并在终端中不会显示输出。如果要查看容器的日志输出,可以使用 docker-compose logs
命令。docker-compose stop
命令。docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]
在项目目录中运行命令:打开终端,进入包含 docker-compose.yml
文件的项目目录,然后运行 docker-compose run
命令。
cd /path/to/project
docker-compose run <service> <command>
其中,
是在 docker-compose.yml
文件中定义的服务名称,用于指定要在其中运行命令的容器。
是要在容器中执行的命令。
附加到终端:默认情况下,docker-compose run
命令会启动一个新容器并在其中运行命令,然后退出。如果想要在容器中进行交互操作,可以使用 -it
选项将命令附加到终端。
docker-compose run -it <service> <command>
在这种情况下,命令将在容器的交互模式下运行,并且可以与容器进行交互。
docker-compose scale
命令用于扩展或缩小 Docker Compose 中的服务实例数量。
使用 docker-compose scale
命令可以指定要启动的服务实例数量,从而创建多个容器实例来处理负载或增加服务的可用性。
用法示例:
在项目目录中运行命令:打开终端,进入包含 docker-compose.yml
文件的项目目录,然后运行 docker-compose scale
命令。
cd /path/to/project
docker-compose scale <service1>=<num1> <service2>=<num2> ...
其中,
、
是在 docker-compose.yml
文件中定义的服务名称,用于指定要扩展或缩小实例数量的服务。
、
是要设置的实例数量。
docker-compose scale web=3 worker=2
这个例子将会扩展 web
服务为 3 个实例,worker
服务为 2 个实例。
动态扩展:如果希望自动在扩大容器数量时调整负载均衡策略,可以在 docker-compose.yml
文件中为服务使用适当的负载均衡器(如 Nginx 或 Traefik)。
docker-compose.yml
文件中定义了多个容器,每个容器都将使用相同的镜像来创建与原始服务相同的副本。docker-compose pause
是一个 Docker Compose 命令,用于暂停运行中的服务容器。docker-compose pause
命令可以暂停正在运行的服务容器,使其停止执行。这将暂停容器中的所有进程,包括应用程序和服务。docker compose pause [SERVICE...]
docker-compose kill
是一个 Docker Compose 命令,用于停止运行中的服务容器。它会立即终止容器的运行,类似于强制执行 Ctrl+C 中断。docker-compose kill
命令可以强制终止正在运行的服务容器,即使容器内部的进程可能还没有完成或正在执行。docker compose kill [OPTIONS] [SERVICE...]
docker-compose config
是一个 Docker Compose 命令,用于验证和显示由 docker-compose.yml
文件定义的服务配置。docker-compose config
命令可以检查 Docker Compose 配置文件的语法正确性,并显示所定义的服务和它们的配置。它可以帮助你在运行 Docker Compose 之前查看配置是否正确。docker compose config [OPTIONS] [SERVICE...]
docker-compose create
命令用于创建在 Docker Compose 文件中定义的服务的容器,但不会启动这些容器。它主要用于预先创建容器,以便稍后通过 docker-compose start
或 docker-compose up
命令启动这些容器。docker compose create [OPTIONS] [SERVICE...]
docker-compose exec
命令可以进入指定的服务容器,并在容器的上下文中执行给定的命令。docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
# 这个例子将会进入名为 web 的服务容器,并在容器内执行 ls -l 命令来列出文件和目录。
docker-compose exec web ls -l
docker-compose port
命令可以方便地查看服务容器的端口映射,以便了解服务容器内部应用程序的可访问地址。docker compose port [OPTIONS] SERVICE PRIVATE_PORT
# 这个例子将会显示名为 web 的服务容器绑定到宿主机上的端口 80 的映射。
docker-compose port web 80
docker-compose push
命令可以方便地将镜像上传到注册表,以便在其他环境中部署和使用。docker compose push [OPTIONS] [SERVICE...]
# 这个例子将会推送名为 web 的服务的镜像到注册表。
docker-compose push web
docker-compose unpause
命令可以恢复被暂停的服务容器,使其继续执行应该执行的操作。docker compose unpause [SERVICE...]
# 这个例子将会取消暂停名为 web 和 db 的服务容器。
docker-compose unpause web db