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

介绍

Docker 简化了集装箱中的应用程序流程管理过程,虽然集装箱在某些方面类似于虚拟机,但它们更轻,更易于资源使用,这使开发人员能够将应用程序环境分解为多个孤立服务。

对于依赖于多个服务的应用程序,对所有容器进行编排,以便一起启动、通信和关闭,可以很快变得不便。 Docker Compose是一个工具,允许您基于YAML文件中设置的定义运行多容器应用环境。

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

前提条件

为了遵循这篇文章,您将需要:

<$>[注] 注: 从Docker Compose v2开始,Docker已经迁移到使用构成CLI插件命令,并远离原始的docker-compose,如我们(本教程的以前的Ubuntu 20.04版本)所记录的(https://andsky.com/tech/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04)。虽然安装不同,但实际使用通常涉及从docker-compose呼叫中放下混音变成docker compose

步骤 1 – 安装 Docker Compose

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

首先,确认在其 发布页面中可用的最新版本)。

使用以下命令下载:

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

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

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

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

1docker compose version

你会看到类似于此的输出:

1[secondary_label Output]
2Docker Compose version v2.3.3

Docker Compose 现在已成功安装在您的系统上. 在下一节中,您将看到如何设置一个 docker-compose.yml 文件,并使用此工具获得一个集装箱化环境。

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

要展示如何设置docker-compose.yml 文件并使用 Docker Compose 工作,您将使用官方的 Nginx 图像Docker Hub创建 Web 服务器环境,这是公共 Docker 注册表。

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

1mkdir ~/compose-demo
2cd ~/compose-demo

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

1mkdir app

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

1nano app/index.html

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

 1[label ~/compose-demo/app/index.html]
 2<!doctype html>
 3<html lang="en">
 4<head>
 5    <meta charset="utf-8">
 6    <title>Docker Compose Demo</title>
 7    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
 8</head>
 9<body>
10
11    <h1>This is a Docker Compose Demo Page.</h1>
12    <p>This content is being served by an Nginx container.</p>
13
14</body>
15</html>

如果您正在使用nano,您可以通过键入CTRL+X,然后YENTER来确认。

然后创建docker-compose.yml文件:

1nano docker-compose.yml

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

1[label docker-compose.yml]
2version: '3.7'
3services:
4  web:
5    image: nginx:alpine
6    ports:
7      - "8000:80"
8    volumes:
9      - ./app:/usr/share/nginx/html

docker-compose.yml文件通常以版本定义开始,这会告诉Docker Compose您正在使用的配置版本。

然后你有服务块,在那里你设置了属于这个环境的服务。在你的情况下,你有一个名为Web的单一服务。这个服务使用了nginx:alpine图像,并设置了port指令的端口重定向。 host 机器(您正在运行Docker Compose的系统)的端口8000上的所有请求将被重定向到端口80上的web容器,在那里 Nginx将运行。

指令将在主机和容器之间创建一个共享卷(https://docs.docker.com/compose/compose-file/# volumes)。这将与容器共享本地应用文件夹,容量将位于容器内部的/usr/share/nginx/html,然后重写 Nginx 的默认文档根。

保存并关闭文件。

您已设置了一个演示页面和一个docker-compose.yml文件,以创建一个容器化 Web 服务器环境,以便为其服务。

步骤 3 – 运行 Docker 组成

有了「docker-compose.yml」檔案,您現在可以執行 Docker Compose 來將您的環境帶回來. 以下命令將下載必要的 Docker 影像,為「Web」服務創建容器,並在背景模式下執行集裝環境:

1docker compose up -d

Docker Compose 会首先在本地系统上搜索定义的图像,如果无法找到图像,则会从 Docker Hub 下载图像。

 1[secondary_label Output]
 2Creating network "compose-demo_default" with the default driver
 3Pulling web (nginx:alpine)...
 4alpine: Pulling from library/nginx
 5cbdbe7a5bc2a: Pull complete
 610c113fb0c77: Pull complete
 79ba64393807b: Pull complete
 8c829a9c40ab2: Pull complete
 961d685417b2f: Pull complete
10Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
11Status: Downloaded newer image for nginx:alpine
12Creating compose-demo_web_1 ... done

<$>[注] 注: 如果您遇到有关 Docker 插件的权限错误,这意味着您跳过了 如何在 Ubuntu 22.04 上安装和使用 Docker 的步骤 2

您的环境现在在背景中运行. 若要验证容器是否活跃,您可以运行:

1docker compose ps

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

1[secondary_label Output]
2       Name Command State Ports        
3----------------------------------------------------------------------------------
4compose-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 Demo Page

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

在下一步中,您将看到如何使用 Docker Compose 命令来管理您的集装箱环境。

步骤 4 – 熟悉 Docker 组成命令

您已经看到如何设置docker-compose.yml文件,并将您的环境带来docker compose up

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

1docker compose logs

你会看到类似于此的输出:

 1[secondary_label Output]
 2Attaching to compose-demo_web_1
 3web_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
 4web_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
 5web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
 6web_1  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
 7web_1  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
 8web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
 9web_1  | /docker-entrypoint.sh: Configuration complete; ready for start up
10web_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" "-"

如果您想暂停环境运行而不改变容器的当前状态,您可以使用:

1docker compose pause
1[secondary_label Output]
2Pausing compose-demo_web_1 ... done

暂停后恢复执行:

1docker compose unpause
1[secondary_label Output]
2Unpausing compose-demo_web_1 ... done

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

1docker compose stop
1[secondary_label Output]
2Stopping compose-demo_web_1 ... done

如果要移除与此集装箱环境相关的容器、网络和卷,请使用命令:

1docker compose down
1[secondary_label Output]
2Removing compose-demo_web_1 ... done
3Removing network compose-demo_default

请注意,这不会删除 Docker Compose 用于旋转环境的基本图像(在您的情况下,nginx:alpine)。

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

1docker image rm nginx:alpine
1[secondary_label Output]
2Untagged: nginx:alpine
3Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
4Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
5Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
6Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
7Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
8Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
9Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

<$>[注] :请参阅我们在 如何安装和使用Docker的指南,以获得有关Docker命令的更详细的参考。

结论

在本指南中,您已经看到如何安装 Docker Compose 并设置基于 Nginx 网页服务器图像的集装环境。

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

Published At
Categories with 技术
comments powered by Disqus