如何在 Ubuntu 20.04 上安装和使用 Docker Compose

介绍

Docker 简化了在容器中管理应用程序进程的过程。虽然容器在某些方面类似于虚拟机,但它们更轻量级和资源友好。这允许开发人员将应用程序环境分解为多个独立的服务。

对于依赖于多个服务的应用程序,编排所有容器以一起启动、通信和关闭可能很快变得笨拙。Docker Compose是一种工具,允许您根据 YAML 文件中设置的定义运行多容器应用程序环境。它使用服务定义来构建具有多个容器的完全可定制的环境,这些容器可以共享网络和数据量。

在本指南中,我们将演示如何在 Ubuntu 20.04 服务器上安装 Docker Compose 以及如何开始使用此工具。

先决条件

要阅读本文,您需要:

第 1 步 – 安装 Docker Compose

为了确保我们获得 Docker Compose 的最新稳定版本,我们将从其官方 Github 存储库下载该软件

首先,在他们的发布页面确认可用的最新版本在撰写本文时,最新的稳定版本是1.27.4.

以下命令将下载1.27.4发行版并将可执行文件保存在/usr/local/bin/docker-compose,这将使该软件可全局访问为docker-compose

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

接下来,设置正确的权限,以便docker-compose命令可执行:

  • sudo chmod +x /usr/local/bin/docker-compose

要验证安装是否成功,您可以运行:

  • docker-compose --version

你会看到类似这样的输出:

Output
docker-compose version 1.27.4, build 40524192

Docker Compose 现在已成功安装在您的系统上。在下一节中,我们将看到如何docker-compose.yml使用此工具设置文件并启动和运行容器化环境。

步骤 2 — 设置docker-compose.yml文件

为了演示如何设置docker-compose.yml文件并使用 Docker Compose,我们将使用来自Docker Hub(公共 Docker 注册表)的官方Nginx 映像创建一个 Web 服务器环境此容器化环境将提供单个静态 HTML 文件。

首先在您的主文件夹中创建一个新目录,然后进入该目录:

  • mkdir ~/compose-demo
  • cd ~/compose-demo

在此目录中,设置一个应用程序文件夹作为 Nginx 环境的文档根目录:

  • mkdir app

使用您喜欢的文本编辑器,index.htmlapp文件夹中创建一个新文件

  • nano app/index.html

将以下内容放入此文件中:

~/compose-demo/app/index.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>

    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>

</body>
</html>

完成后保存并关闭文件。如果您正在使用nano,则可以通过键入CTRL+X、 然后YENTER进行确认。

接下来,创建docker-compose.yml文件:

  • nano docker-compose.yml

在您的docker-compose.yml文件中插入以下内容

docker-compose.yml
version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

docker-compose.yml文件通常从version定义开始这将告诉 Docker Compose 我们使用的是哪个配置版本。

然后我们有services块,我们在其中设置作为此环境一部分的服务。在我们的例子中,我们有一个名为 的服务web此服务使用nginx:alpine图像并使用ports指令设置端口重定向主机(运行 Docker Compose 的系统)端口8000上的所有请求都将重定向到端口上的容器,Nginx 将在其中运行。web80

volumes指令将在主机和容器之间创建一个共享卷这将app与容器共享本地文件夹,卷将位于/usr/share/nginx/html容器内部,然后将覆盖 Nginx 的默认文档根目录。

保存并关闭文件。

我们已经设置了一个演示页面和一个docker-compose.yml文件来创建一个容器化的 Web 服务器环境来为其提供服务。在下一步中,我们将使用 Docker Compose 提供此环境。

第 3 步 – 运行 Docker Compose

随着docker-compose.yml到位文件中,我们现在可以执行多克撰写,使我们的环境了。以下命令将下载必要的 Docker 镜像,为web服务创建一个容器,并在后台模式下运行容器化环境:

  • docker-compose up -d

Docker Compose 将首先在您的本地系统上查找定义的镜像,如果找不到该镜像,它将从 Docker Hub 下载该镜像。你会看到这样的输出:

Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done

您的环境现已启动并在后台运行。要验证容器是否处于活动状态,您可以运行:

  • docker-compose ps

此命令将显示有关正在运行的容器及其状态的信息,以及当前存在的任何端口重定向:

Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp

localhost:8000如果您在本地机器上运行此演示,或者your_server_domain_or_IP:8000如果您在远程服务器上运行此演示,您现在可以通过将浏览器指向来访问演示应用程序

你会看到一个这样的页面:

Docker Compose 演示页面

因为您在docker-compose.yml文件中设置的共享卷使您的app文件夹文件与容器的文档根目录保持同步。如果您对index.html文件进行任何更改,它们将被容器自动选取,从而在您重新加载页面时反映在您的浏览器上。

在下一步中,您将看到如何使用 Docker Compose 命令管理您的容器化环境。

第 4 步 – 熟悉 Docker Compose 命令

您已经了解了如何设置docker-compose.yml文件并使用docker-compose up. 您现在将看到如何使用 Docker Compose 命令来管理您的容器化环境并与之交互。

要检查 Nginx 容器生成的日志,您可以使用以下logs命令:

  • docker-compose logs

你会看到类似这样的输出:

Output
Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

如果要暂停环境执行而不更改容器的当前状态,可以使用:

  • docker-compose pause
Output
Pausing compose-demo_web_1 ... done

在发出暂停后恢复执行:

  • docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done

stop命令将终止容器执行,但不会破坏与容器相关的任何数据:

  • docker-compose stop
Output
Stopping compose-demo_web_1 ... done

如果要删除与此容器化环境关联的容器、网络和卷,请使用以下down命令:

  • docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

请注意,这不会删除 Docker Compose 用来启动您的环境的基本映像(在我们的示例中为nginx:alpine)。这样,每当您使用 重新启动您的环境时docker-compose up,该过程都会快得多,因为该映像已经在您的系统上。

如果您还想从系统中删除基本映像,您可以使用:

  • docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

注意:请参阅我们关于如何安装和使用 Docker 的指南,获取有关 Docker 命令的更详细参考。

结论

在本指南中,我们已经了解了如何安装 Docker Compose 并基于 Nginx Web 服务器映像设置容器化环境。我们还看到了如何使用 Compose 命令管理这个环境。

有关所有可用docker-compose命令的完整参考,请查看官方文档

觉得文章有用?

点个广告表达一下你的爱意吧 !😁