介绍

Docker简化了在容器中管理应用程序流程的过程。尽管容器在某些方面类似于虚拟机,但它们更轻便且对资源友好。这使开发人员可以将应用程序环境分解为多个隔离的服务。

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

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



先决条件

要阅读本文,您将需要:

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


第1步-安装Docker Compose

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

首先,在其发行页面中确认可用的最新版本。在撰写本文时,最新的稳定版本是1.26.0

以下命令将下载该1.26.0发行版并将可执行文件保存在/usr/local/bin/docker-compose,这将使该软件可全局访问为docker-compose



 


sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)"

复制



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



 


sudo chmod

复制



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



 


docker-compose --version

复制



您将看到类似于以下的输出:



 



Output


docker-compose version 1.26.0, build 8a1c60f6


Docker Compose现在已成功安装在您的系统上。在下一节中,我们将看到如何设置docker-compose.yml文件以及如何使用此工具启动并运行容器化环境。



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

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

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



 


mkdir ~/compose-democd ~/compose-demo

复制



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



 


mkdir app

复制



使用您喜欢的文本编辑器,index.htmlapp文件夹中创建一个新文件:



 


nano

复制



将以下内容放入此文件:



〜/ compose-demo / app / index.html



<span style="color:#333333"><span style="color:#545454"><code class="language-bash"><span style="color:#666a71"><</span><span style="color:#666a71">!</span>doctype html<span style="color:#666a71">></span>
<span style="color:#666a71"><</span>html <span style="color:#08966b">lang</span><span style="color:#666a71">=</span><span style="color:#08966b">"en"</span><span style="color:#666a71">></span>
<span style="color:#666a71"><</span>head<span style="color:#666a71">></span>
    <span style="color:#666a71"><</span>meta <span style="color:#08966b">charset</span><span style="color:#666a71">=</span><span style="color:#08966b">"utf-8"</span><span style="color:#666a71">></span>
    <span style="color:#666a71"><</span>title<span style="color:#666a71">></span>Docker Compose Demo<span style="color:#666a71"><</span>/title<span style="color:#666a71">></span>
    <span style="color:#666a71"><</span>link <span style="color:#08966b">rel</span><span style="color:#666a71">=</span><span style="color:#08966b">"stylesheet"</span> <span style="color:#08966b">href</span><span style="color:#666a71">=</span><span style="color:#08966b">"https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"</span><span style="color:#666a71">></span>
<span style="color:#666a71"><</span>/head<span style="color:#666a71">></span>
<span style="color:#666a71"><</span>body<span style="color:#666a71">></span>

    <span style="color:#666a71"><</span>h<span style="color:#666a71"><span style="color:#225196"><strong>1</strong></span>></span>This is a Docker Compose Demo Page.<span style="color:#666a71"><</span>/h<span style="color:#666a71"><span style="color:#225196"><strong>1</strong></span>></span>
    <span style="color:#666a71"><</span>p<span style="color:#666a71">></span>This content is being served by an Nginx container.<span style="color:#666a71"><</span>/p<span style="color:#666a71">></span>

<span style="color:#666a71"><</span>/body<span style="color:#666a71">></span>
<span style="color:#666a71"><</span>/html<span style="color:#666a71">></span></code></span></span>



复制



完成后,保存并关闭文件。如果使用nano,则可以通过键入CTRL+XYENTER进行确认。

接下来,创建docker-compose.yml文件:



 


nano

复制



docker-compose.yml文件中插入以下内容:



docker-compose.yml



<span style="color:#333333"><span style="color:#545454"><code class="language-bash">version: <span style="color:#08966b">'3.7'</span>
services:
  web:
    image: nginx:alpine
    ports:
      - <span style="color:#08966b">"8000:80"</span>
    volumes:
      - ./app:/usr/share/nginx/html</code></span></span>



复制



docker-compose.yml文件通常从version定义开始。这将告诉Docker Compose我们正在使用哪个配置版本。

然后services,我们有一个块,我们在其中设置了该环境一部分的服务。在我们的例子中,我们有一个名为的服务web。该服务使用nginx:alpine映像,并使用ports伪指令设置端口重定向。主机(运行Docker Compose的系统)端口8000上的所有请求都将重定向到port上的容器,Nginx将在该容器上运行。web80

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

保存并关闭文件。

我们已经设置了一个演示页面和一个docker-compose.yml文件,以创建将为其提供服务的容器化Web服务器环境。在下一步中,我们将使用Docker Compose搭建此环境。



第3步—运行Docker Compose

有了docker-compose.yml文件之后,我们现在可以执行Docker Compose来启动环境。以下命令将下载必要的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


现在,您的环境已在后台启动并运行。要验证该容器是否处于活动状态,可以运行:



 


docker-compose ps

复制



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



 



Output


compose-demo_web_1


现在,localhost:8000如果您在本地计算机上运行此演示,或者your_server_domain_or_IP:8000在远程服务器上运行此演示,则可以通过将浏览器指向该演示应用程序来访问该演示应用程序。

您会看到这样的页面:

ubuntu 安装 docker 指定的版本 ubuntu安装docker compose_Docker

因为您在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


如果要暂停环境执行而不更改容器的当前状态,则可以使用:



 


docker-compose pause

复制



 



Output


Pausing compose-demo_web_1


要在发出暂停后恢复执行:



 


docker-compose unpause

复制



 



Output


Unpausing compose-demo_web_1


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



 


docker-compose stop

复制



 



Output


Stopping compose-demo_web_1


如果要删除与此容器化环境关联的容器,网络和卷,请使用以下down命令:



 


docker-compose down

复制



 



Output


Removing compose-demo_web_1 ... done Removing network compose-demo_default


请注意,这不会删除Docker Compose用来启动环境的基本映像(在我们的示例中为nginx:alpine)。这样,每当您使用再次启动环境时docker-compose up,由于映像已经在系统上,因此处理过程将更快。

如果您还想从系统中删除基本映像,则可以使用:



介绍 Docker简化了在容器中管理应用程序流程的过程。尽管容器在某些方面类似于虚拟机,但它们更轻便且对资源友好。这使开发人员可以将应用程序环境分解为多个隔离的服务。 对于依赖于几种服务的应用程序,将所有容器编排在一起以一起启动,通信和关闭可能很快变得很麻烦。Docker Compose是一个工具,可让您基于YAML文件中设置的定义运行多容器应用程序环境。它使用服务定义来构建具有多个可以共享网络和数据量的容器的完全可自定义的环境。 在本指南中,我们将演示如何在Ubuntu 20.04服务器上安装Docker Compose以及如何开始使用此工具。 先决条件 要阅读本文,您将需要: 以具有sudo特权的非root用户身份访问Ubuntu 20.04本地计算机或开发服务器。如果使用的是远程服务器,建议安装活动防火墙。要进行设置,请参阅我们的Ubuntu 20.04初始服务器设置指南。 遵循如何在Ubuntu 20.04上安装和使用Docker的步骤1和2,将Docker安装在服务器或本地计算机上。 第1步-安装Docker Compose 为了确保我们获得Docker Compose的最新稳定版本,我们将从其官方Github存储库中下载该软件。 首先,在其发行页面中确认可用的最新版本。在撰写本文时,最新的稳定版本是1.26.0。 以下命令将下载该1.26.0发行版并将可执行文件保存在/usr/local/bin/docker-compose,这将使该软件可全局访问为docker-compose: sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 接下来,设置正确的权限,以使该docker-compose命令可执行: sudo chmod +x /usr/local/bin/docker-compose 要验证安装是否成功,可以运行: docker-compose --version 您将看到类似于以下的输出: Output docker-compose version 1.26.0, build 8a1c60f6 Docker Compose现在已成功安装在您的系统上。在下一节中,我们将看到如何设置docker-compose.yml文件以及如何使用此工具启动并运行容器化环境。 第2步-设置docker-compose.yml文件 为了演示如何设置docker-compose.yml文件以及如何使用Docker Compose,我们将使用来自公共Docker注册表Docker Hub的官方Nginx映像创建一个Web服务器环境。此容器化环境将提供一个静态HTML文件。 首先在您的主文件夹中创建一个新目录,然后移入该目录: mkdir ~/compose-demo cd ~/compose-demo 在此目录中,设置一个应用程序文件夹作为您的Nginx环境的文档根目录: mkdir app 使用您喜欢的文本编辑器,index.html在app文件夹中创建一个新文件: 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>


docker image rm

复制



 



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指南》,以获取有关Docker命令的更详细的参考。



结论

在本指南中,我们已经了解了如何安装Docker Compose以及如何基于Nginx Web服务器映像设置容器化环境。我们还看到了如何使用Compose命令管理此环境。

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