本文目录
- 1. docker-compose 介绍
- 1. docker-compose 简介
- 2. docker-compose 安装
- 3. docker-compose 卸载
- 2. docker-compose 常用命令
- 1. docker-compose 命令格式
- 2. docker-compose up
- 3. docker-compose ps
- 4. docker-compose stop
- 5. docker-compose down
- 6. docker-compose logs
- 7. docker-compose build
- 8. docker-compose pull
- 9. docker-compose restart
- 10. docker-compose rm
- 11. docker-compose start
- 12. docker-compose run
- 13. docker-compose scale
- 14. docker-compose pause
- 15. docker-compose kill
- 16. dokcer-compose config
- 17. docker-compose create
- 18. docker-compose exec
- 19. docker-compose port
- 20. docker-compose push
- 21. docker-compose unpause
1. docker-compose 介绍
1. docker-compose 简介
比较官方的说法:
- Docker-Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。 Docker-Compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose 运行目录下的所有文件(
docker-compose.yml
,extends
文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。 - 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 来运行应用程序时,通常会涉及多个容器。例如,一个应用程序可能需要一个数据库容器、一个 Web 服务器容器和一个缓存容器。这些容器之间需要相互通信和协调工作。
- Docker Compose 就像是一个指挥官,它可以帮助我们一次性启动、停止和管理这些容器,确保它们能够协同工作。你可以将 Docker Compose 文件看作是一个规划图,告诉 Docker 如何构建和配置这个容器群。
- 比方说,你的应用程序需要一个数据库容器和一个 Web 服务器容器。你可以使用 Docker Compose 文件来描述这两个容器,指定它们使用的镜像、端口映射、环境变量等配置信息。然后,你只需要运行一个命令,Docker Compose 就会帮你自动创建和管理这两个容器。
- Docker Compose 文件使用一种叫做 YAML 的语言来编写,它非常简洁易懂。你只需要定义你需要的服务(容器),以及它们之间的关系和配置。Docker Compose 会根据这个文件来创建、连接和管理这些容器,确保它们可以相互通信并顺利运行。
- 这种方式让我们更容易管理复杂的应用程序环境,因为我们可以将所有容器的配置集中在一个文件中,并使用简单的命令来启动、停止和管理它们。而不需要手动一个个去运行 Docker 命令来管理每个容器。
总而言之,Docker Compose 是一个简化多容器 Docker 应用程序管理的工具,它通过使用一个配置文件来定义和管理多个容器的运行方式,使得应用程序的部署和管理变得更加简单和高效。
2. docker-compose 安装
- 运行以下命令安装 Docker Compose:
# 要安装其他版本的 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
3. docker-compose 卸载
- 如果是二进制包方式安装的,删除二进制文件即可:
rm /usr/local/bin/docker-compose
- 如果通过 Python pip 工具安装的,则执行如下命令删除:
pip uninstall docker-compose
2. docker-compose 常用命令
1. docker-compose 命令格式
- 我们可以使用下面的命令查看:
docker-compose --help
- 可以看到 docker-compose 的命令格式为:
docker compose [OPTIONS] COMMAND
2. docker-compose up
- 用于启动使用 Docker Compose 编排的多个容器。它会根据指定的配置文件(默认为
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 的安装目录)即可。
3. docker-compose ps
- 用于列出由 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
选项可以显示所有容器的详细信息,包括已停止的容器。默认情况下,它只显示正在运行的容器。
4. docker-compose stop
- 停止正在运行的容器,可以通过
docker-compose start
再次启动。
- 可以看到,命令格式为:
docker compose stop [OPTIONS] [SERVICE...]
5. docker-compose down
- 用于停止和移除由
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 文件中定义了服务,但它们不再运行,使用该选项可以移除这些孤立的容器。 |
6. docker-compose logs
- 用于查看由
docker-compose
启动的服务的日志。
- 可以看到,命令格式为:
docker compose logs [OPTIONS] [SERVICE...]
- 参数说明:
参数 | 说明 |
---|---|
-f 或 --follow | 实时输出日志信息,类似于 tail -f 命令的功能。可以持续查看日志的输出,直到手动停止。 |
--tail <num> | 仅显示最后 <num> 行的日志信息。可以使用正整数作为参数,例如 --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>
其中,<service1>
和 <service2>
是要查看日志的服务的名称。
7. docker-compose build
- 构建(重新构建)项目中的服务容器。
- 可以看到,命令格式为:
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>
其中,<service1>
和 <service2>
是要构建镜像的服务的名称。
8. docker-compose pull
- 拉取服务依赖的镜像。
- 可以看到,命令格式为:
docker compose pull [OPTIONS] [SERVICE...]
- 参数说明:
参数 | 说明 |
---|---|
–ignore-pull-failures | 忽略拉取镜像过程中的错误 |
-q 或 --quiet | 只显示镜像拉取过程中的进度信息,不显示详细输出。 |
9. docker-compose restart
- 用于重新启动由
docker-compose
启动的服务容器。
- 可以看到,命令格式为:
docker compose restart [OPTIONS] [SERVICE...]
10. docker-compose rm
- 删除所有(停止状态的)服务容器。
- 可以看到,命令格式为:
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
来删除卷。
11. docker-compose start
- 用于启动由
docker-compose
管理的服务容器。
- 可以看到,命令格式为:
docker compose start [SERVICE...]
docker-compose start
命令将会以后台模式启动服务容器,即容器将在后台运行并在终端中不会显示输出。如果要查看容器的日志输出,可以使用docker-compose logs
命令。- 此命令对于重新启动已经停止的服务容器是有用的,特别是在更新配置或镜像后使更改生效。如果只是想停止服务容器,而不需要重新加载配置或镜像,可以使用
docker-compose stop
命令。
12. docker-compose run
- 在指定服务上执行一个命令。
- 可以看到,命令格式为:
docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]
- 用法示例:
在项目目录中运行命令:打开终端,进入包含 docker-compose.yml
文件的项目目录,然后运行 docker-compose run
命令。
cd /path/to/project
docker-compose run <service> <command>
其中,<service>
是在 docker-compose.yml
文件中定义的服务名称,用于指定要在其中运行命令的容器。<command>
是要在容器中执行的命令。
附加到终端:默认情况下,docker-compose run
命令会启动一个新容器并在其中运行命令,然后退出。如果想要在容器中进行交互操作,可以使用 -it
选项将命令附加到终端。
docker-compose run -it <service> <command>
在这种情况下,命令将在容器的交互模式下运行,并且可以与容器进行交互。
13. docker-compose scale
-
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> ...
其中,<service1>
、<service2>
是在 docker-compose.yml
文件中定义的服务名称,用于指定要扩展或缩小实例数量的服务。<num1>
、<num2>
是要设置的实例数量。
docker-compose scale web=3 worker=2
这个例子将会扩展 web
服务为 3 个实例,worker
服务为 2 个实例。
动态扩展:如果希望自动在扩大容器数量时调整负载均衡策略,可以在 docker-compose.yml
文件中为服务使用适当的负载均衡器(如 Nginx 或 Traefik)。
- 需要注意的是,服务的扩展和缩小是基于启动配置中定义的服务容器镜像进行的。如果在
docker-compose.yml
文件中定义了多个容器,每个容器都将使用相同的镜像来创建与原始服务相同的副本。
14. docker-compose pause
docker-compose pause
是一个 Docker Compose 命令,用于暂停运行中的服务容器。- 使用
docker-compose pause
命令可以暂停正在运行的服务容器,使其停止执行。这将暂停容器中的所有进程,包括应用程序和服务。
- 可以看到,命令格式为:
docker compose pause [SERVICE...]
15. docker-compose kill
docker-compose kill
是一个 Docker Compose 命令,用于停止运行中的服务容器。它会立即终止容器的运行,类似于强制执行 Ctrl+C 中断。- 使用
docker-compose kill
命令可以强制终止正在运行的服务容器,即使容器内部的进程可能还没有完成或正在执行。
- 可以看到,命令格式为:
docker compose kill [OPTIONS] [SERVICE...]
16. dokcer-compose config
docker-compose config
是一个 Docker Compose 命令,用于验证和显示由docker-compose.yml
文件定义的服务配置。- 使用
docker-compose config
命令可以检查 Docker Compose 配置文件的语法正确性,并显示所定义的服务和它们的配置。它可以帮助你在运行 Docker Compose 之前查看配置是否正确。
- 可以看到,命令格式为:
docker compose config [OPTIONS] [SERVICE...]
17. docker-compose create
docker-compose create
命令用于创建在 Docker Compose 文件中定义的服务的容器,但不会启动这些容器。它主要用于预先创建容器,以便稍后通过docker-compose start
或docker-compose up
命令启动这些容器。
- 可以看到,命令格式为:
docker compose create [OPTIONS] [SERVICE...]
18. docker-compose exec
- 用于在运行中的服务容器中执行命令。它允许你与正在运行的容器进行交互并在其内部执行命令。
- 使用
docker-compose exec
命令可以进入指定的服务容器,并在容器的上下文中执行给定的命令。
- 可以看到,命令格式为:
docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
- 用法示例:
# 这个例子将会进入名为 web 的服务容器,并在容器内执行 ls -l 命令来列出文件和目录。
docker-compose exec web ls -l
19. docker-compose port
- 用于查看由 Docker Compose 管理的服务容器的端口映射情况。它允许你查看服务容器的公开端口与主机上的端口之间的映射关系。
- 使用
docker-compose port
命令可以方便地查看服务容器的端口映射,以便了解服务容器内部应用程序的可访问地址。
- 可以看到,命令格式为:
docker compose port [OPTIONS] SERVICE PRIVATE_PORT
- 用法示例:
# 这个例子将会显示名为 web 的服务容器绑定到宿主机上的端口 80 的映射。
docker-compose port web 80
20. docker-compose push
- 用于将 Docker Compose 文件中定义的服务的镜像推送到注册表(Registry)。它允许你将本地构建的镜像推送到远程注册表,供其他人或其他环境使用。
- 使用
docker-compose push
命令可以方便地将镜像上传到注册表,以便在其他环境中部署和使用。
- 可以看到,命令格式为:
docker compose push [OPTIONS] [SERVICE...]
- 用法示例:
# 这个例子将会推送名为 web 的服务的镜像到注册表。
docker-compose push web
21. docker-compose unpause
- 用于取消暂停一个或多个由 Docker Compose 管理的服务容器。它允许你恢复被暂停的服务容器的正常运行状态。
- 使用
docker-compose unpause
命令可以恢复被暂停的服务容器,使其继续执行应该执行的操作。
- 可以看到,命令格式为:
docker compose unpause [SERVICE...]
- 用法示例:
# 这个例子将会取消暂停名为 web 和 db 的服务容器。
docker-compose unpause web db