Docker Compose入门指南

该文章的作者(我们今天将发表其翻译)说,该文章供那些想要学习Docker Compose并打算使用Docker创建其第一个客户端-服务器应用程序的开发人员使用。 读者应该熟悉Docker的基础知识。 如果不是这种情况,那么您可以看一下这一系列材料, 出版物,其中讨论了Docker的基础知识以及Kubernetes的基础知识,以及这篇针对初学者的文章。

图片

什么是Docker Compose?


Docker Compose是Docker随附的工具。 它旨在解决与项目部署相关的问题。

学习Docker的基础知识,您可能会遇到创建独立于外部数据源或某些服务而独立运行的简单应用程序的情况。 实际上,这种应用很少见。 实际项目通常包括一整套协作应用程序。

您如何知道在部署项目时是否需要使用Docker Compose? 实际上-非常简单。 如果使用多种服务来确保该项目的正常运行,那么Doc​​ker Compose可能会派上用场。 例如,在他们创建一个网站以验证用户身份的情况下,需要连接到数据库。 一个相似的项目可以包括两个服务-一个提供站点,另一个负责维护数据库。

如果简单描述,则Docker Compose技术允许使用一个命令来启动许多服务。

Docker和Docker Compose之间的区别


Docker用于管理组成应用程序的各个容器(服务)。

Docker Compose用于同时管理组成应用程序的多个容器。 该工具提供与Docker相同的功能,但允许您使用更复杂的应用程序。


Docker(单个容器)和Docker Compose(多个容器)

典型的Docker撰写用例


在正确的方面,Docker Compose是一个非常强大的工具,可让您快速部署具有复杂架构的应用程序。 现在,我们来看一个实际使用Docker Compose的示例,对该示例的分析将使您能够评估使用Docker Compose的优势。

假设您是一个Web项目的开发人员。 该项目包括两个网站。 第一个功能使商务人士只需单击几下即可创建在线商店。 第二个目标是客户支持。 这两个站点与同一个数据库交互。

您的项目变得越来越受欢迎,事实证明,运行该项目的服务器的功能已不再足够。 结果,您决定将整个项目转移到另一台机器上。

不幸的是,您没有使用Docker Compose之类的东西。 因此,您将不得不一次传输和重新配置服务,希望您在此过程中不会忘记任何事情。

如果使用Docker Compose,则可以通过执行多个命令来解决将项目转移到新服务器的问题。 为了完成项目到新位置的传输,您仅需要执行一些设置并将数据库的备份副本上载到新服务器。

使用Docker Compose开发客户端-服务器应用程序


既然您知道我们将使用Docker Compose做什么了,那么该使用该工具创建第一个客户端-服务器应用程序的时候了。 也就是说,我们正在谈论使用Python开发小型网站(服务器),该网站可以生成带有文本片段的文件。 该文件是由程序(客户端)从服务器请求的,该程序也是用Python编写的。 从服务器接收文件后,程序将在屏幕上显示存储在其中的文本。

请注意,我们希望您拥有Docker的基础知识,并且您已经安装了Docker平台。

让我们开始研究这个项目。

▍1。 项目创建


为了构建您的第一个客户端服务器应用程序,建议从创建项目文件夹开始。 它应包含以下文件和文件夹:

  • docker-compose.yml 。 这是一个Docker Compose文件,其中包含启动和配置服务所需的说明。
  • server文件夹。 它将包含确保服务器运行所必需的文件。
  • 文件夹client 。 这将是客户端应用程序的文件。

因此,项目主文件夹的内容应如下所示:

 . ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file 

▍2。 服务器创建


在这里,我们在创建服务器的过程中,将介绍有关Docker的一些基本知识。

2a。 文件创建


转到server文件夹并在其中创建以下文件:

  • server.py文件。 它将包含服务器代码。
  • index.html文件。 该文件将包含客户端应用程序应显示的一段文本。
  • Dockerfile文件。 这是一个Docker文件,其中包含创建服务器环境所需的说明。

这是您的server/文件夹的内容应如下所示:

 . ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files 

2b。 编辑Python文件。


将以下代码添加到server.py文件:

 #!/usr/bin/env python3 #    python. #       -. #     - ,      Python. import http.server import socketserver #         . handler = http.server.SimpleHTTPRequestHandler #   ,        1234. #    ,        ,    docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd:   #       ,    .  httpd.serve_forever() 

此代码使您可以创建一个简单的Web服务器。 它将为客户提供index.html文件,其内容稍后将显示在网页上。

2c。 HTML文件编辑


将以下文本添加到index.html文件:

 Docker-Compose is magic! 

该文本将被传输到客户端。

2d。 编辑Dockerfile


现在,我们将创建一个简单的Dockerfile ,它将负责组织Python服务器的运行时。 我们将使用旨在执行以Python编写的程序的正式映像作为创建映像的基础。 以下是Dockerfile的内容:

 #    ,  Dockerfile       . #      'FROM'. #      python ( DockerHub). #   ,    ,  'python',     - 'latest'. FROM python:latest #       ,   Python,     'server.py'  'index.html'. #     ,     'ADD'. #  , 'server.py',    ,   . #  , '/server/',  ,        . #        '/server/'. ADD server.py /server/ ADD index.html /server/ #     'WORKDIR', ,   . #      . #    ,      ,   '/server/'. WORKDIR /server/ 

现在,让我们在客户端上工作。

▍3。 客户创造


创建项目的客户端部分,我们将同时回顾一些Docker基础知识。

3a。 文件创建


转到client项目的文件夹并在其中创建以下文件:

  • 文件client.py 。 这将是客户端代码。
  • Dockerfile文件。 该文件与服务器文件夹中的类似文件具有相同的作用。 即,它包含描述用于执行客户端代码的环境的创建的指令。

因此,在此工作阶段的client/文件夹应如下所示:

 . ├── client.py └── Dockerfile 0 directories, 2 files 

3b。 Python文件编辑


将以下代码添加到client.py文件:

 #!/usr/bin/env python3 #    Python. #      'index.html'  . #     ,      Python. import urllib.request #      'http://localhost:1234/'. # ,      ,   'http://localhost:1234'. # localhost   ,      . # 1234 -   ,        . fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent'     ('index.html'). # 'decodedContent'     (  ,      ). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") #   ,    ('index.html'). print(decodedContent) #    . fp.close() 

借助此代码,客户端应用程序可以从服务器下载数据并将其显示在屏幕上。

3c。 编辑Dockerfile


与服务器一样,我们为客户端创建一个简单的Dockerfile ,负责创建客户端Python应用程序将在其中运行的环境。 这是客户端Dockerfile代码:

 #   ,     Dockerfile. FROM python:latest #  'client.py'   '/client/'. ADD client.py /client/ #      '/client/'. WORKDIR /client/ 

▍4。 Docker撰写


您可能已经注意到,我们创建了两个不同的项目:服务器和客户端。 它们每个都有自己的Dockerfile 。 到目前为止,发生的所有事情都没有超出使用Docker的基础知识。 现在我们开始使用Docker Compose。 为此,我们转到位于项目根文件夹中的docker-compose.yml文件。

请注意,这里我们并不是要绝对考虑可以在docker-compose.yml使用的所有命令。 我们的主要目标是为您提供一个实用的示例,为您提供Docker Compose的基本知识。

这是放置在docker-compose.yml的代码:

 #  docker-compose     . #   "3"    -        . version: "3" #  ,  docker-composes   . # 1  = 1 . #    , ,   ... # ,     ,   'services'. services: #    ,       . #  ,     . #   (): . #    ,   . #       . #  ,    ,    'server'. server:   #   "build"     #    Dockerfile,      ,   #    .   #  'server/'     ,   #    Dockerfile.   build: server/   # ,      .   #     "python ./server.py".   command: python ./server.py   #   ,      'server/server.py'   1234.   #          (   ),   #         .   #       'ports'.   #      : [ ]:[ ]   #        1234         # 1234  (         #   ).   ports:     - 1234:1234 #   (): . #    'client'. client:   #  'client/    ,     #  Dockerfile    .   build: client/   # ,      .   #     "python ./client.py".   command: python ./client.py   #   'network_mode'     .   #    ,      'localhost' .   network_mode: host   #   'depends_on'  ,   ,   #   , ,       .   #  ,   'client'       'server'.   depends_on:     - server 

5英镑 项目组装


docker-compose.yml中包含所有必要的指令后,需要组装项目。 我们工作的这一步骤类似于docker build ,但是相应的命令与以下几个服务相关:

 $ docker-compose build 

▍6。 项目启动


现在该项目已经完成,是时候启动它了。 我们的工作步骤与在使用单个容器时执行docker run命令的步骤相对应:

 $ docker-compose up 

执行完此命令后,终端应显示客户端从服务器下载的文本: Docker-Compose is magic!

如前所述,服务器使用计算机端口1234服务客户端请求。 因此,如果您通过http:// localhost:1234 /进入浏览器,则会在其中显示带有Docker-Compose is magic!文本的页面Docker-Compose is magic!

有用的命令


让我们看一些在使用Docker Compose时可能会发现有用的命令。

该命令允许您停止和删除docker-compose up创建的容器和其他资源:

 $ docker-compose down 

此命令显示服务日志:

 $ docker-compose logs -f [service name] 

例如,在我们的项目中,可以按以下格式使用它: $ docker-compose logs -f [service name]

使用此命令,您可以列出容器:

 $ docker-compose ps 

此命令使您可以在执行容器中执行命令:

 $ docker-compose exec [service name] [command] 

例如,它可能看起来像这样: docker-compose exec server ls

此命令允许您显示图像列表:

 $ docker-compose images 

总结


我们研究了使用Docker Compose技术的基础知识,该知识将使您可以使用该技术,并在需要时开始更深入的研究。 这是我们这里审查过的带有项目代码存储库。

亲爱的读者们! 您是否在项目中使用Docker Compose?

Source: https://habr.com/ru/post/zh-CN450312/


All Articles