介绍
容器化近年来在软件技术领域势头强劲。这可以归功于Docker,它是一个简化容器内进程管理的容器平台。
容器是轻量级、虚拟化、便携式、软件定义的标准化环境,允许软件与物理宿主机上运行的其他软件隔离运行。这种便携性特征允许开发人员将其应用程序模块化为隔离的服务。此外,它还可以独立提供服务,从而为扩展提供了空间。
虽然将应用程序拆分为多个服务确实很棒,但它也带来了管理多个容器的开销。您必须确保它们能够通信、同时启动和关闭。多亏了一个名为Docker Compose的工具,这变得轻而易举。Docker Compose 允许开发人员使用定义在YAML文件中的规则来运行多容器 Docker 应用程序。该 YAML 文件包含应用程序服务的定义,以及它们如何共享数据卷和网络。一旦定义了服务,您就可以使用单个命令启动所有服务。在本教程中,我们将向您展示如何在 Ubuntu 20.04 上安装、配置和开始使用 Docker Compose。
前提条件
-
由于这是一个动手实践教程,您应该安装 Ubuntu 20.04 作为初始运行环境。您还应该拥有一个具有 sudo 特权的非 root 用户。这里有一个分步教程,帮助您设置 Ubuntu 服务器。按照本教程来配置您的 sudoers 文件.
-
。您还需要安装 Docker。请参考这篇关于如何在 Ubuntu 18.04 上安装和操作 Docker.
步骤 1:安装 Docker Compose
我们将从其官方 GitHub 仓库下载最新稳定版本的 Docker Compose。您可以从发布页面了解最新版本,在撰写本教程时,最新版本是1.28.5.
首先,使用非 root sudo 用户登录您的 Ubuntu 服务器并输入以下命令。它会下载最新版本 (1.28.5) 并将可执行文件保存到/usr/local/bin/docker-compose目录中。这使得它可以在全局作为 docker-compose 访问:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
下载完成后,输入以下命令为 docker-compose 命令设置适当的权限以使其可执行:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
现在,通过运行以下命令来验证安装是否成功以及该命令是否可以被调用:
|
1 |
docker-compose –version |
您应该会得到类似以下的输出:

这确认了 Docker Compose 已成功安装在您的系统上。
步骤 2:创建 docker-compose.yml 文件
为了帮助您理解如何使用docker-compose.yml,,我们将使用来自Nginx 镜像的官方Docker Hub配置一个 Web 服务器环境。部署完成后,我们应该能够从容器中提供一个基本的 HTML 页面。
我们将在主文件夹中创建我们的工作目录,我们将在其中进行工作。输入以下命令创建该目录:
|
1 |
mkdir ~/compose-example |
接下来,进入该目录:
|
1 |
cd ~/compose-example |
进入目录后,创建一个应用程序文件夹,该文件夹将作为Nginx环境的文档根目录。我们可以将此文件夹命名为app:
|
1 |
mkdir app |
- 创建 HTML 页面
让我们使用nano文本编辑器在 app 文件夹中创建 index.html文件:
|
1 |
nano app/index.html |
接下来,将以下 HTML 代码添加到文件中:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Compose 示例</title> <!-- Bootstrap 核心 CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Awesome Docker Compose Example with CloudSigma</h1> <p class="h4"> 这是一个基础的静态 HTML 页面。 </p> <p class="lead text-muted"> 此页面服务自一个 Nginx Docker 容器,其构建基于 <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
要保存文件,请按 CTRL +O,然后按回车键(ENTER)。接着,使用 CTRL +X 关闭。接下来,我们将在项目根目录下创建 docker-compose.yml 文件。
- 使用 docker-compose 托管 HTML 页面
接下来,输入以下命令以使用 nano 编辑器打开文件:
|
1 |
nano docker-compose.yml |
之后,在文件中添加以下代码片段:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
该 docker-compose.yml 文件以版本号开始,该版本号告诉 Docker Compose 我们正在使用哪个配置版本。请点击此链接以了解更多关于 Docker Compose 版本控制.
在版本号之后,我们有 services 块,其中包含构成环境的服务。在本教程中,我们只指定了一个名为 webserver 的服务。 webserver 服务将使用 nginx:alpine 镜像。我们还定义了端口重定向 8000:80。这意味着来自宿主机上端口 8000 的所有请求都将被重定向到 webserver 容器的端口 80,Nginx 正在该端口上运行。
volumes 指令允许您在宿主机和容器之间创建一个 共享数据卷,我们可以使用它来持久化数据。在我们的 yml 代码片段中,我们将本地的 app 文件夹与容器共享。在容器内部,它将被放置在 /usr/share/nginx/html 位置。因此,它覆盖了 Nginx 的默认文档根目录。您现在可以保存并关闭该文件了。
到目前为止,您已经创建了示例 HTML 网页和 docker-compose.yml file 文件,其中包含构建容器化 Web 服务器环境的指令。让我们在下一步中看看如何启动此设置。
第 3 步:执行 Docker Compose 命令
在这一步中,我们将运行命令来启动我们的容器化环境。以下是初始化 Docker 镜像下载过程、为 webserver 服务创建容器并在后台启动容器化环境的单个命令:
|
1 |
docker-compose up -d |
Docker 的设计旨在快速高效,因此,当您运行上述命令时,它首先会检查您的本地系统是否存在定义的镜像。如果缺失,它将从 Docker Hub 仓库中获取。它应该显示类似于以下内容的输出:

当命令执行完毕后,它将启动在后台运行的容器环境。您可以使用以下命令验证它是否正在运行:
|
1 |
docker-compose ps |
您应该会得到类似的输出:

如果您导航到服务器的 IP 地址或域名并加上端口 8000,即 server_domain_or_IP:8000 您应该能够看到我们创建的示例 HTML 页面:

如果您还记得,我们在容器和宿主机系统之间设置了一个共享数据卷。这使容器中的文件与宿主机系统中的文件保持同步。因此,如果您对 index.html 文件进行更改,它会自动与容器同步,并在您在浏览器中重新加载页面时反映出来。您可以使用 nano 编辑器进行尝试。让我们在下一步中学习更多命令。
第 4 步:用于管理容器环境的其他 Docker Compose 命令
现在您已经使用单个 docker-compose-up 命令成功部署了网页,让我们看看一些在管理容器化环境时可能有用的其他命令。
我们将从 logs 命令开始。在排查应用程序故障时,日志可能至关重要。首先,运行以下命令以查看 Nginx 容器生成的日志:
|
1 |
docker-compose logs |
以下是日志的示例输出:

您可以使用以下命令暂停环境执行,而无需更改容器的状态:
|
1 |
docker-compose pause |
![]()
接下来,要取消暂停或恢复执行,请使用以下命令:
|
1 |
docker-compose unpause |
![]()
您可能希望停止容器而不销毁其数据。为此,请使用以下命令:
|
1 |
docker-compose stop |
![]()
要销毁与容器化环境关联的容器、网络和数据卷,请使用以下命令:
|
1 |
docker-compose down |
![]()
请记住,上述命令不会删除 Docker Compose 用于启动环境的基础镜像。这可以确保在您启动环境时构建速度更快,因为它会检查本地计算机中是否存在匹配的镜像。如果您想完全删除基础镜像,必须在命令中指定它。在我们的示例中,我们可以删除 nginx:alpine 镜像,使用以下命令:
|
1 |
docker image rm nginx:alpine |

最后,您可以在官方的 Docker Compose 命令行参考 文档中找到更多命令。
总结
在本教程中,您在 Ubuntu 20.04 上安装了 Docker Compose,创建了一个基于 Nginx Web 服务器镜像的容器化环境,并学习了如何使用 Docker Compose 命令来管理各种服务。
如果您想了解如何部署一个依赖于多个容器的真实动态应用程序,请阅读我们的教程:使用 Docker Compose 部署 Laravel、Nginx 和 MySQL。您也可以从官方的 Docker Compose 文档.
中找到 docker-compose 命令的完整列表。祝您使用愉快!
评论
暂无评论。发表第一条评论吧。