如何在Ubuntu20.04上安装和使用DockerCompose

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

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

先决条件

要阅读本文,您将需要:

  • 以具有 sudo 权限的非 root 用户身份访问 Ubuntu 20.04 本地计算机或开发服务器。 如果您使用的是远程服务器,建议安装活动防火墙。 要设置这些,请参阅我们的 Ubuntu 20.04 初始服务器设置指南。
  • 按照 如何在 Ubuntu 20.04 上安装和使用 Docker 的 步骤 1 和 2 将 Docker 安装在您的服务器或本地计算机上。

Note: This tutorial will guide you through installing Docker Compose v1, which uses docker-compose. Starting with Docker Compose v2, Docker has migrated towards using the compose CLI plugin command as documented in our latest Ubuntu 22.04 version of this tutorial, and away from the original docker-compose. While the installation differs, in general the actual usage involves dropping the hyphen from docker-compose calls to become docker compose. For full compatibility details, check the official Docker documentation on command compatibility between the new compose and the old docker-compose.


第 1 步 — 安装 Docker Compose

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

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

The following command will download the 1.29.2 release and save the executable file at /usr/local/bin/docker-compose, which will make this software globally accessible as docker-compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/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

您将看到与此类似的输出:

Outputdocker-compose version 1.29.2, build 5becea4c

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

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

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

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

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

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

mkdir app

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

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 文件中插入以下内容:

码头工人-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 指令设置端口重定向。 host 机器(运行 Docker Compose 的系统)的端口 8000 上的所有请求都将重定向到端口 [ 上的 web 容器X172X],Nginx 将在其中运行。

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

保存并关闭文件。

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

第三步——运行 Docker Compose

有了 docker-compose.yml 文件,您现在可以执行 Docker Compose 来启动您的环境。 以下命令将下载必要的 Docker 镜像,为 web 服务创建容器,并在后台模式下运行容器化环境:

docker-compose up -d

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

OutputCreating 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 套接字的权限错误,这意味着您跳过了 如何在 Ubuntu 20.04 上安装和使用 Docker 的第 2 步。 返回并完成该步骤将启用在没有 sudo 的情况下运行 docker 命令的权限。


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

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.yml 文件中设置的共享卷使您的 app 文件夹文件与容器的文档根目录保持同步。 如果您对 index.html 文件进行任何更改,它们将被容器自动拾取,并在您重新加载页面时反映在您的浏览器上。

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

第 4 步 — 熟悉 Docker Compose 命令

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

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

docker-compose logs

您将看到与此类似的输出:

OutputAttaching 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
OutputPausing compose-demo_web_1 ... done

在发出暂停后恢复执行:

docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done

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

docker-compose stop
OutputStopping compose-demo_web_1 ... done

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

docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default

请注意,这不会删除 Docker Compose 用于启动您的环境的基本映像(在您的情况下为 nginx:alpine)。 这样,每当您使用 docker-compose up 再次启动您的环境时,该过程将快得多,因为图像已经在您的系统上。

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

docker image rm nginx:alpine
OutputUntagged: 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 命令的完整参考,请查看 官方文档

如果您对 Docker Compose 的更多用法感兴趣,请查看 如何使用 Docker Compose 安装 WordPress 以及 如何使用 Nginx、Let's Encrypt 和 Docker Compose 保护容器化的 Node.js 应用程序