如何在 CentOS 7 上安装和使用 Docker Compose如何在 CentOS 7 上安装和使用 Docker Compose如何在 CentOS 7 上安装和使用 Docker Compose如何在 CentOS 7 上安装和使用 Docker Compose
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 CentOS 7 上安装和使用 Docker Compose

介绍

Docker 是在软件容器内自动部署 Linux 应用程序的绝佳工具,但要真正充分利用其潜力,最好让应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器一起启动和关闭(更不用说彼此交谈)很快就会变得笨拙。

Docker 社区提出了一个名为 Fig 的流行解决方案,它允许您使用单个 YAML 文件来编排所有 Docker 容器和配置。这变得如此流行,以至于 Docker 团队决定根据 Fig 源制作 Docker Compose,该源现已弃用。 Docker Compose 使用户可以更轻松地编排 Docker 容器的进程,包括启动、关闭以及设置容器内链接和卷。

在本教程中,您将安装最新版本的 Docker Compose 以帮助您管理多容器应用程序,并将探索该软件的基本命令。

Docker 和 Docker Compose 概念

使用 Docker Compose 需要将一系列不同的 Docker 概念组合在一起,因此在我们开始之前,让我们花点时间回顾一下所涉及的各种概念。如果您已经熟悉卷、链接和端口转发等 Docker 概念,那么您可能想要继续并跳到下一节。

码头工人图像

每个 Docker 容器都是 Docker 映像的本地实例。您可以将 Docker 映像视为完整的 Linux 安装。通常最小安装只包含运行图像所需的最少的包。这些图像使用主机系统的内核,但由于它们在 Docker 容器内运行并且只能看到它们自己的文件系统,因此完全有可能在 Ubuntu 主机上运行像 CentOS 这样的发行版(反之亦然)。

大多数 Docker 镜像是通过 Docker Hub 分发的,该中心由 Docker 团队维护。大多数流行的开源项目都有相应的图像上传到 Docker Registry,您可以使用它来部署软件。如果可能,最好获取“官方”镜像,因为 Docker 团队保证它们遵循 Docker 最佳实践。

Docker 镜像之间的通信

Docker 容器与主机隔离,这意味着默认情况下主机无法访问 Docker 容器内的文件系统,也无法通过网络与其进行任何通信。这会使配置和使用在 Docker 容器内运行的图像变得困难。

Docker 有三种主要的方法来解决这个问题。第一个也是最常见的是让 Docker 指定将在 Docker 容器内设置的环境变量。在 Docker 容器内运行的代码将在启动时检查这些环境变量的值,并使用它们来正确配置自身。

另一种常用的方法是 Docker 数据卷。 Docker 卷有两种类型——内部和共享。

指定内部卷仅意味着对于您为特定 Docker 容器指定的文件夹,当容器被删除时数据将被保留。例如,如果您想确保您的日志文件持久存在,您可以指定一个内部 /var/log 卷。

共享卷将 Docker 容器内的文件夹映射到主机上的文件夹。这使您可以轻松地在 Docker 容器和主机之间共享文件。

与 Docker 容器通信的第三种方式是通过网络。 Docker 允许通过链接 以及端口转发在不同的 Docker 容器之间进行通信,允许您将端口从 Docker 容器内部转发到主机服务器上的端口。例如,您可以创建一个链接以允许您的 WordPress 和 MariaDB Docker 容器相互通信,并使用端口转发将 WordPress 暴露给外界,以便用户可以连接到它。

先决条件

要阅读本文,您需要具备以下条件:

    <李> CentOS 7 服务器,使用具有 sudo 权限的非根用户设置(有关详细信息,请参阅 CentOS 7 上的初始服务器设置) <李> 按照如何在 CentOS 7 上安装和使用 Docker 的第 1 步和第 2 步中的说明安装 Docker

一旦这些准备就绪,您就可以跟进了。

第 1 步 — 安装 Docker Compose

为了获得最新版本,请参考 Docker 文档并从 Docker 的 GitHub 存储库中的二进制文件安装 Docker Compose。

检查当前版本,如有必要,请在以下命令中更新它:

  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

接下来,设置权限以使二进制文件可执行:

  1. sudo chmod +x /usr/local/bin/docker-compose

然后,通过检查版本来验证安装是否成功:

  1. docker-compose --version

这将打印出您安装的版本:

Output
docker-compose version 1.23.2, build 1110ad01

现在您已经安装了 Docker Compose,您已准备好运行“Hello World”示例。

第 2 步 — 使用 Docker Compose 运行容器

公共 Docker 注册表 Docker Hub 包含一个简单的“Hello World”图像,用于演示和测试。它说明了使用 Docker Compose 运行容器所需的最低配置:一个调用单个图像的 YAML 文件。

首先,为我们的 YAML 文件创建一个目录:

  1. mkdir hello-world

然后进入目录:

  1. cd hello-world

现在使用您喜欢的文本编辑器创建 YAML 文件。本教程将使用 Vi:

  1. vi docker-compose.yml

进入插入模式,按i,然后将以下内容写入文件:

my-test:
  image: hello-world

第一行将是容器名称的一部分。第二行指定要使用哪个图像来创建容器。当您运行命令 docker-compose up 时,它将通过指定的名称 hello-world 查找本地图像。

设置好后,按 ESC 退出插入模式。输入 :x 然后输入 ENTER 保存并退出文件。

要手动查看系统上的图像,请使用 docker images 命令:

  1. docker images

当根本没有本地图像时,仅显示列标题:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

现在,仍然在 ~/hello-world 目录中,执行以下命令来创建容器:

  1. docker-compose up

第一次运行命令时,如果没有名为 hello-world 的本地镜像,Docker Compose 将从 Docker Hub 公共存储库中拉取它:

Output
Pulling my-test (hello-world:)... latest: Pulling from library/hello-world 1b930d010525: Pull complete . . .

拉取镜像后,docker-compose 创建一个容器,附加并运行 hello 程序,这反过来确认安装似乎正在运行:

Output
. . . Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | . . .

然后它将打印它做了什么的解释:

Output
. . . my-test_1 | To generate this message, Docker took the following steps: my-test_1 | 1. The Docker client contacted the Docker daemon. my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. my-test_1 | (amd64) my-test_1 | 3. The Docker daemon created a new container from that image which runs the my-test_1 | executable that produces the output you are currently reading. my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it my-test_1 | to your terminal. . . .

Docker 容器仅在命令处于活动状态时运行,因此一旦 hello 完成运行,容器就会停止。因此,当您查看活动进程时,会出现列标题,但不会列出 hello-world 容器,因为它没有运行:

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

使用 -a 标志显示所有容器,而不仅仅是活动容器:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50a99a0beebd hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago hello-world_my-test_1

现在您已经测试了运行一个容器,您可以继续探索一些基本的 Docker Compose 命令。

第 3 步 - 学习 Docker Compose 命令

为了让您开始使用 Docker Compose,本节将介绍 docker-compose 工具支持的一般命令。

docker-compose 命令在每个目录的基础上工作。您可以在一台机器上运行多组 Docker 容器——只需为每个容器创建一个目录,并为每个目录创建一个 docker-compose.yml 文件。

到目前为止,您一直在自己运行 docker-compose up,您可以使用 CTRL-C 关闭容器。这允许在终端窗口中显示调试消息。但这并不理想;在生产环境中运行时,让 docker-compose 更像一个服务会更稳健。一种简单的方法是在 up 会话时添加 -d 选项:

docker-compose up -d

docker-compose 现在将分叉到后台。

要显示您的 Docker 容器组(已停止和正在运行),请使用以下命令:

docker-compose ps -a

如果容器停止,State 将列为 Exited,如以下示例所示:

Output
Name Command State Ports ------------------------------------------------ hello-world_my-test_1 /hello Exit 0

正在运行的容器将显示 Up:

Output
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp

要停止应用程序组所有正在运行的 Docker 容器,请在与用于启动 Docker 组的 docker-compose.yml 文件相同的目录中发出以下命令:

docker-compose stop

注意:docker-compose kill 如果您需要更有力地关闭东西,也可以使用。

在某些情况下,Docker 容器会将它们的旧信息存储在一个内部卷中。如果您想从头开始,可以使用 rm 命令完全删除构成容器组的所有容器:

docker-compose rm 

如果您从包含 Docker 容器和 .yml 文件的目录以外的目录尝试这些命令中的任何一个,它将返回错误:

Output
ERROR: Can't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml

本节介绍了如何使用 Docker Compose 操作容器的基础知识。如果您需要更好地控制您的容器,您可以访问 Docker 容器的文件系统并在容器内的命令提示符下工作,这一过程将在下一节中描述。

第 4 步 - 访问 Docker 容器文件系统

为了在容器内的命令提示符下工作并访问其文件系统,您可以使用 docker exec 命令。

\Hello World 示例在运行后退出,因此要测试 docker exec,请启动一个将继续运行的容器。出于本教程的目的,请使用来自 Docker Hub 的 Nginx 映像。

创建一个名为 nginx 的新目录并移入其中:

  1. mkdir ~/nginx
  2. cd ~/nginx

接下来,在新目录中创建一个 docker-compose.yml 文件,并在文本编辑器中打开它:

  1. vi docker-compose.yml

接下来,将以下行添加到文件中:

nginx:
  image: nginx

保存文件并退出。使用以下命令将 Nginx 容器作为后台进程启动:

  1. docker-compose up -d

Docker Compose 将下载 Nginx 镜像,容器将在后台启动。

现在您需要容器的 CONTAINER ID。使用以下命令列出所有正在运行的容器:

  1. docker ps

您将看到类似于以下内容的内容:

Output of `docker ps`
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86b6699714c nginx "nginx -g 'daemon of…" 20 seconds ago Up 19 seconds 80/tcp nginx_nginx_1

如果您想更改此容器内的文件系统,您需要获取其 ID(在此示例中为 b86b6699714c)并使用 docker exec 在容器内启动一个 shell容器:

  1. docker exec -it b86b6699714c /bin/bash

-t 选项打开一个终端,-i 选项使其具有交互性。 /bin/bash 为正在运行的容器打开一个 bash shell。

然后,您将看到容器的 bash 提示,类似于:

root@b86b6699714c:/#

从这里,您可以在容器内的命令提示符下工作。但是请记住,除非您位于作为数据卷的一部分保存的目录中,否则您的更改将在容器重新启动后立即消失。另外,请记住,大多数 Docker 镜像都是在安装非常少的 Linux 的情况下创建的,因此您习惯使用的一些命令行实用程序和工具可能不存在。

结论

您现在已经安装了 Docker Compose,通过运行“Hello World”示例测试了您的安装,并探索了一些基本命令。

虽然“Hello World”示例确认了您的安装,但简单的配置并没有显示 Docker Compose 的主要优势之一——能够同时启动和关闭一组 Docker 容器。要了解 Docker 的强大功能Docker Compose 的实际应用,查看如何在 Ubuntu 16.04 上使用 Docker 和 Docker Compose 配置持续集成测试环境。虽然这些教程适用于 Ubuntu 16.04 和 18.04,但这些步骤可以适用于 CentOS 7。

©2015-2025 艾丽卡 support@alaica.com