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

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

介绍

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

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

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

先决条件

要阅读本文,您将需要:

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

Note: Starting with Docker Compose v2, Docker has migrated towards using the compose CLI plugin command, and away from the original docker-compose as documented in our previous Ubuntu 20.04 version of this tutorial. 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 存储库 下载此软件。

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

使用以下命令下载:

mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

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

chmod +x ~/.docker/cli-plugins/docker-compose

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

docker compose version

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

OutputDocker Compose version v2.3.3

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 22.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 命令的完整参考,请查看 官方文档