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

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

对于依赖多个服务的应用程序,统筹所有容器一起启动、通信和关闭可能会很复杂。而 Docker Compose 是一个不错的解决方案,它可以根据 YAML 文件中的自定义设置,来运行多容器应用程序环境。它用服务定义来构建完全可定制的环境,其中包含可以共享网络和数据的多个容器。

在本文中,我们将介绍如何在 Ubuntu 20.04 服务器上安装 Docker Compose,以及如何使用它。

先决条件

本文的操作示例,基于以下先决条件:

  • 以具有 sudo 权限的非 root 用户身份登录 Ubuntu 20.04 服务器。

第 1 步 — 安装 Docker Compose

为确保安装的 Docker Compose 版本为最新稳定版本,请从官方 Github 存储库下载该软件。

首先,在 Docker Compose 的发布页面中,确认可用的最新版本。在撰写本文时,最新的稳定版本是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

将会返回类似下面的输出内容:

Output
Docker Compose version v2.3.3

经检验,Docker Compose 现在已成功安装在当前系统中。在下一节中,我们将介绍如何设置docker-compose.yml文件并使用此工具启动和运行容器化环境。

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

为了演示如何设置docker-compose.yml文件以及如何使用 Docker Compose,这里使用来自Docker Hub的官方Nginx 映像创建一个 Web 服务器环境。此容器化环境只提供单个静态 HTML 文件。

首先,在你的 home 目录中创建一个新目录,然后进入该目录:

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

在该目录中,创建一个应用程序文件夹,作为 Nginx 环境的文档根目录:

mkdir app

使用文本编辑器在app文件夹中创建一个index.html文件:

nano app/index.html

将以下内容复制到该 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、 然后按Y,最后按ENTER来确认。

接下来,创建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指令设置端口重定向。主机 8000 端口(运行 Docker Compose 的系统)上的所有请求,都将重定向到运行 80 端口的 web 容器上。

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

保存并关闭文件。

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

第 3 步 — 运行 Docker Compose

准备好docker-compose.yml文件后,可以执行 Docker Compose 来启动容器化 Web 服务器环境。以下命令将下载必要的 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

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

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 Compose ,并基于 Nginx Web 服务器映像设置容器化环境。

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-install-and-use-docker-compose-on-ubuntu-22-04/

(0)
牛奇网牛奇网
上一篇 2022年10月11日 下午6:53
下一篇 2022年10月16日 下午10:19

相关推荐

发表回复

登录后才能评论