Rocky Linux 8 Docker Compose 安装与使用:完整指南
引言
Docker简化了在容器中管理应用程序进程的过程。虽然容器在某些方面与虚拟机类似,但它们更加轻量级且资源友好。这使得开发人员可以将应用环境拆分为多个隔离的服务。
对于依赖多种服务的应用程序而言,协调所有容器一起启动、通信和关闭很快变得难以管理。Docker Compose是一种工具,允许您基于在一个YAML文件中设置的定义来运行多容器应用环境。它使用服务定义来构建完全可定制的环境,其中包含多个容器,可以共享网络和数据卷。
在本指南中,您将学习如何在Rocky Linux 8服务器上安装Docker Compose以及如何开始使用这个工具。
先决条件
阅读本文需要以下内容:
- 以非root用户身份,拥有sudo权限,访问Rocky Linux 8本地机器或开发服务器。如果您使用的是远程服务器,建议安装并启用防火墙。要进行这些设置,请参考我们的Rocky Linux 8初始服务器设置指南。
- 您的服务器或本地机器上已安装Docker,请按照如何在Rocky Linux 8上安装和使用Docker的步骤1和步骤2进行操作。
第一步 – 安装Docker Compose
为了确保您获得最新稳定版本的Docker Compose,您需要从官方Docker仓库下载此软件。
首先,让我们更新软件包数据库。
sudo dnf check-update
接下来,如果您在安装Docker时还未添加官方Docker存储库,请进行添加。
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
虽然Docker没有针对Rocky Linux的特定软件库,但Rocky Linux基于CentOS,并且可以使用相同的软件库。现在您可以安装Docker Compose,这是Docker的一个插件。
sudo dnf install docker-compose-plugin
要验证安装是否成功,可以运行以下命令:
docker compose version
您会看到类似于这样的输出:
Docker Compose version v2.10.2
Docker Compose已成功安装在您的系统上。在接下来的部分,您将学习如何设置一个docker-compose.yml
文件,并通过这个工具创建并运行一个容器化环境。
第二步 – 设置一个docker-compose.yml文件
为了演示如何设置docker-compose.yml
文件并使用Docker Compose工作,您将使用来自Docker Hub的官方Nginx镜像创建一个网络服务器环境,这是公共Docker注册表。这个容器化环境将提供一个静态HTML文件。
首先,在您的家目录中创建一个新目录,然后进入该目录。
mkdir ~/compose-demo
cd ~/compose-demo
在此目录下,设置一个应用文件夹作为您的Nginx环境的文档根目录。
mkdir app
请使用您喜欢的文本编辑器,在应用程序文件夹中创建一个新的index.html
文件。
nano app/index.html
将以下内容放入这个文件中:
这是文章《如何在Rocky Linux 8上安装和使用Docker Compose》的第2部分(共4部分)。
内容片段:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Docker Compose 演示</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>这是一个 Docker Compose 演示页面。</h1>
<p>此内容由 Nginx 容器提供服务。</p>
</body>
</html>
完成后保存并关闭文件。如果你使用的是nano,可以通过按下CTRL+X
,然后按Y
并按下回车键进行确认。
接下来,创建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
文件以版本定义开头,这会告诉 Docker Compose 您正在使用的配置版本。
接下来是 services
块,您可以在其中设置属于此环境的服务。在本例中,您有一个名为 web
的单个服务。此服务使用 nginx:alpine
镜像,并使用 ports
指令设置端口重定向。主机(即您运行 Docker Compose 的系统)上端口 8000 的所有请求将被重定向到 web
容器上的端口 80,Nginx 将在此端口运行。
volumes
指令将在主机和容器之间创建一个共享卷。这将把本地 app
文件夹与容器共享,并且该卷将位于容器内的 /usr/share/nginx/html
目录下,从而覆盖了 Nginx 的默认文档根目录。
保存并关闭文件。
您已经设置了一个演示页面和一个 docker-compose.yml
文件,以创建一个容器化的网页服务器环境来提供它。在接下来的步骤中,您将使用 Docker Compose 启动这个环境。
第三步——运行 Docker Compose
有了 docker-compose.yml
文件,您现在可以执行 Docker Compose 来启动您的环境。以下命令将下载所需的 Docker 镜像,为 Web 服务创建一个容器,并以后台模式运行容器化的环境。
- docker compose up -d
Docker Compose 首先会在您本地系统上查找定义的镜像,如果找不到镜像,它将从 Docker Hub 下载该镜像。您将会看到类似这样的输出:
创建网络 “compose-demo_default” 使用默认驱动程序
拉取 web (nginx:alpine)…
alpine: 从 library/nginx 拉取
cbdbe7a5bc2a: 拉取完成
10c113fb0c77: 拉取完成
9ba64393807b: 拉取完成
c829a9c40ab2: 拉取完成
61d685417b2f: 拉取完成
摘要: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
状态: 已下载 nginx:alpine 的新镜像
创建 compose-demo_web_1 … 完成
注意:如果在 Rocky Linux 8 上安装和使用 Docker 的步骤 2 中遇到有关 Docker 套接字权限错误,这意味着您跳过了这一步。回到并完成这一步将使您能够以非 sudo 方式运行 Docker 命令。
您的环境已在后台运行。要验证容器是否处于活动状态,您可以运行:
- docker compose ps
这个命令会显示正在运行的容器及其状态的信息,以及当前设置的任何端口重定向。
名称 命令 状态 端口
———————————————————————————-
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
文件中设置的共享卷会将您的应用文件夹与容器的文档根目录保持同步。如果您对 index.html
文件进行任何更改,容器会自动捕捉到这些更改,因此在您重新加载页面时会反映在您的浏览器上。
在接下来的步骤中,您将会看到如何使用 Docker Compose 命令来管理您的容器化环境。
第四步 — 熟悉 Docker Compose 命令
您已经了解了如何设置 docker-compose.yml
文件,并使用 docker compose up
命令启动您的环境。现在,您将看到如何使用 Docker Compose 命令来管理和交互您的容器化环境。
要检查您的 Nginx 容器生成的日志,您可以使用 logs
命令进行查看。
- docker compose logs
您会看到类似于这样的输出。
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
Pausing compose-demo_web_1 … done
在暂停后恢复执行:
- docker compose unpause
Unpausing compose-demo_web_1 … done
停止命令将终止容器的执行,但它不会销毁与您的容器关联的任何数据。
- docker compose stop
Stopping compose-demo_web_1 … done
如果您想要移除与此容器化环境相关联的容器、网络和卷,请使用下方的 `down` 命令。
- docker compose down
Removing compose-demo_web_1 … done Removing network compose-demo_default
请注意,这不会删除 Docker Compose 用于启动您的环境(在本例中是 `nginx:alpine`)所使用的基础镜像。这样,每当您使用 `docker compose up` 再次启动环境时,由于镜像已经存在于您的系统中,整个过程将更快。
如果您想从系统中删除基础镜像,您可以使用以下方法:
- docker image rm nginx:alpine
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 命令的更详细参考。
结论
在本指南中,您学习了如何在 Rocky Linux 8 上安装 Docker Compose 并基于 Nginx Web 服务器镜像设置容器化环境。您还了解了如何使用 Compose 命令来管理此环境。
要获取所有可用的 Docker Compose 命令的完整参考,请查阅官方文档。