Docker Compose是什么?如何使用Docker Compose?

2021年11月19日22:39:10 发表评论 1,762 次浏览

Docker Compose用法介绍

如何使用Docker Compose?在处理多个服务和容器时,使用Docker开发应用程序可能变得具有挑战性。了解 Docker Compose,该工具将帮助你运行多容器应用程序环境。

在本教程中,你将了解有关 Docker Compose 的所有信息、使用此工具的好处、其用例和功能。

Docker Compose是什么?

一个应用程序可以由多个运行不同服务的容器组成。手动启动和管理容器可能很乏味,因此 Docker 创建了一个有用的工具来帮助加快进程——Docker Compose。

Docker Compose 是用于定义和运行多容器 Docker 应用程序的软件。它可以在生产、登台、开发、测试和 CI 环境中同时处理多个容器。因此,使用 Docker Compose 来管理整个软件开发生命周期 (SDLC)

Docker Compose 通过应用docker-compose.yaml文件中定义的规则来工作。在YAML文件中配置应用程序的服务,包括规则,指定你想怎么他们跑。文件就位后,你可以使用单个命令启动、停止或重建所有服务。此外,你可以检查服务的状态、显示日志输出和运行一次性命令。

安装 Docker Compose 很简单。有关分步说明,请查看:如何在 Ubuntu 18.04 上安装 Docker Compose如何在 CentOS 7 上安装 Docker Compose如何在 Ubuntu 20.04 上安装 Docker Compose

Docker Compose用法示例

如何使用Docker Compose?Docker Compose 的常见用例包括:

  • 自动化测试环境。Compose 支持自动化测试,这是 CI/CD 的重要组成部分,因为它可以轻松创建和破坏所需的测试环境。开发人员可以使用适当的 Docker Compose 文件定义和配置运行自动化端到端测试所需的环境。
  • 单主机部署。在 Docker Compose 中,容器被设计为在单个主机上运行,​​因为它们传统上专注于开发和测试工作流。
  • 开发环境。Compose 是一种快速而简单的项目启动方式,因为它可以快速启动新的隔离开发环境。该软件记录并配置应用程序的所有服务依赖项(包括数据库、缓存、Web 服务 API 等)。它允许你使用单个命令为每个依赖项创建和启动一个或多个容器。

Docker Compose 的好处

以下是使用 Docker Compose 的一些主要好处:

  • 快速简单的配置。借助 YAML 脚本和环境变量,你可以轻松配置或修改应用服务。
  • 安全的 内部通信。Compose 创建一个供所有服务共享的网络。这为应用程序增加了额外的安全层,因为这些服务无法从外部访问。
  • 可移植性和 CI/CD 支持。由于所有服务都在 docker-compose 文件中定义,开发人员可以轻松访问和共享整个配置。通过拉取 YAML 文件和源代码,他们可以在几分钟内启动环境。这有助于建立和启用高效的CI/CD管道。
  • 有效利用资源。Docker Compose 允许你在一台主机上托管多个隔离的环境。在单个硬件上运行所有内容可让你节省大量资源。它的功能使其能够缓存配置并重用现有容器,这也有助于提高资源效率。
Docker Compose是什么?如何使用Docker Compose?

注意: Docker Compose 支持CI/CD 管道,这是 DevOps 的一个重要实践。如果你正在为你的 DevOps 团队寻找最佳服务器解决方案,请查看Bare Metal Cloud。

BMC 是云原生专用服务器,支持IaC 工具和简单的API、CLI 和 SDK 交互

Docker Compose 功能

Docker Compose是什么?有几个突出的 Docker Compose 特性可以提供上述好处。

在单个主机上托管多个隔离环境

Docker Compose用法示例:Compose 使用项目名称使单个主机上的环境彼此隔离。

默认情况下,项目名称是项目目录的基名,而项目目录是 docker-compose 文件的基目录。你可以更改默认值:

  • 使用命令行选项或环境变量设置项目名称-pCOMPOSE_PROJECT_NAME
  • 使用环境变量设置项目目录--project-directory

你可以在开发主机上利用此功能,通过在不同名称下创建多个环境副本来运行项目每个功能分支的稳定副本。

如果你在 CI 服务器或共享主机上工作,你需要确保构建不会相互干扰。为此,请将项目名称设置为唯一的内部版本号。

支持环境变量

如何使用Docker Compose?你可以通过在 docker-compose 文件中添加环境变量来为不同的环境或用户自定义容器。这为你在使用 Compose 设置容器时提供了更大的灵活性,因为变量值没有在配置中进行硬编码。

可以在 shell 环境(从中运行docker-compose)或 .env 文件(存储在项目目录中)中设置变量值。默认情况下,Docker compose 应用 .env 文件中指定的值。但是,在 shell 环境中设置的值会覆盖 .env 文件中的值。

你可以将此功能用于从安全提供密码到指定软件版本的任何事情。

保留卷数据

Docker Compose 的另一个很棒的特性是它保存了服务使用的数据。因此,你不必担心丢失在容器中创建的数据。如果有之前运行的容器,Compose 会找到它们并将它们的卷复制到新的运行中。

重用现有容器

Compose 仅​​重新创建自上次运行以来已更改的容器。如果没有变化,它会重新使用现有的容器。

此功能依赖于软件缓存容器配置的能力,让你可以更快地设置服务。

Docker Compose 基本命令

Docker Compose是什么?运行 Docker Compose 命令的基本语法是:

docker-compose [command]

注意:如果你以 sudo 用户身份工作,请在命令sudo前添加前缀。

你将在下面找到一些最基本的 Docker Compose 命令及其用途。

命令描述
docker-compose --help显示 docker-compose 命令的帮助、使用说明和参数
docker-compose buildbuild: 在 docker-compose.yml 文件中查找包含该语句的所有服务 并docker build 为每个服务运行 一个
docker-compose run对服务运行一次性命令
docker-compose up为服务构建、(重新)创建、启动和附加到容器
docker-compose -f [command]通过添加 -f 标志指定 docker-compose 配置文件的位置
docker-compose start为服务启动现有容器
docker-compose stop停止运行容器(不删除它们)
docker-compose pause暂停正在运行的服务容器
docker-compose unpause取消暂停服务的暂停容器
docker-compose down停止容器(并删除容器、网络、卷和图像)
docker-compose ps列出 docker-compose 配置文件中的容器
docker-compose images列出创建的容器使用的图像
docker-compose ls列出正在运行的 Compose 项目

如何使用Docker Compose?

Docker Compose是什么?如何使用Docker Compose?
Docker Compose用法示例

使用 Compose 分为三个步骤:

1. 第一步是创建一个Dockerfile来定义应用环境。该文件构建 Docker 镜像,它将用作容器的基础。

注意:要了解有关创建镜像的更多信息,请查看如何使用 Dockerfile 创建 Docker 镜像。

2. Docker Compose用法示例 - 接下来,你需要在 Compose 文件中定义服务。在项目目录中创建一个名为docker-compose.yml的新文件,并使用 YAML 语法定义你的服务。此类文件的示例将包括以下内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

3. 最后,使用 Docker Compose CLI 运行和管理应用程序。你可以运行单个docker-compose up命令来启动实例中的整个应用程序。

结论

Docker Compose是什么?阅读本文后,你应该知道 Docker Compose 是什么、它是如何工作的以及使用这个方便的 Docker 工具有什么好处。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: