当前位置:   article > 正文

Docker 初学者指南 — 如何使用 Docker-Compose 创建客户端/服务器端_docker服务器与客户端

docker服务器与客户端

您是一名开发人员并且想探索 docker-compose?这篇文章是为你而写的。在对 Docker-Compose 进行简短介绍后,您将能够使用 Docker 创建您的第一个客户端/服务器端应用程序。

注意:本文考虑到您了解 Docker 的基础知识。如果没有,请不要惊慌!我建议您阅读我的第一篇文章来了解 Docker 并学习如何创建您的第一个应用程序。

Docker 初学者指南 — 如何创建您的第一个 Docker 应用程序:如果您是开发人员并且想从 Docker 开始?这篇文章是为你而写的。

什么是 Docker-Compose?

Docker-Compose 是 Docker 提供的一个工具。为简单起见,实施此工具是为了解决项目中的架构问题。

您可能已经在我之前的文章中注意到,我们创建了一个显示“Docker is magic!”的简单程序。当它推出时。

不幸的是,当您是一名开发人员时,您很少会创建一个独立的程序(一个不需要任何其他服务即可运行的程序,例如数据库)。

但是,您如何知道是否需要 Docker-Compose?它非常简单——如果您的应用程序需要运行多个服务,您就需要这个工具。例如,如果您创建一个需要连接到您的数据库以验证用户身份的网站(这里有 2 个服务,网站和数据库)。

Docker-compose 为您提供了在单个命令中启动所有这些服务的可能性。

Docker 和 Docker-Compose 之间的区别

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

Docker-Compose 用于为同一个应用程序同时管理多个容器。此工具提供与 Docker 相同的功能,但允许您拥有更复杂的应用程序。

Docker(单个容器)VS Docker-Compose(多个容器)

一个典型的用例

该工具可以变得非常强大,并允许您非常快速地部署具有复杂架构的应用程序。我会给你一个具体的案例研究,证明你需要它。

想象一下,您是您的网络软件的骄傲创造者。

您的解决方案提供了两个网站。第一个允许商店只需点击几下就可以创建他们的在线商店。第二个致力于客户支持。这两个站点与同一个数据库交互。

你开始成功了,你的服务器已经不够用了。因此,您决定将整个软件迁移到另一台机器上。

不幸的是,您没有使用 docker-compose。因此,您将不得不一个接一个地迁移和重新配置您的服务,希望没有遗漏任何内容。

如果您使用了 docker-compose,只需几个命令,您就可以在新服务器上部署整个架构。您现在要做的就是进行一些配置并加载数据库备份以完成迁移。

现在让我们使用 Docker-Compose 创建您的第一个客户端/服务器端应用程序

现在您知道 docker-compose 的用途了,是时候创建您的第一个客户端/服务器端应用程序了!

本教程的目的是用 Python 创建一个包含句子的小型网站(服务器)。这句话必须由将显示该句子的 Python 程序(客户端)检索。

注意:本教程考虑到您已经在计算机上安装了 Docker 并且具备基础知识。如果不是这种情况,请您参考我之前的文章

1. 创建你的项目

要创建您的第一个客户端/服务器应用程序,我邀请您在您的计算机上创建一个文件夹。它必须在根目录中包含以下文件和文件夹:

  • 一个docker-compose.yml文件(包含创建不同服务的必要说明的 docker-compose 文件)。

  • 一个server文件夹(此文件夹将包含设置服务器所需的文件)。

  • 一个client文件夹(此文件夹将包含设置客户端所需的文件)。

通常你应该有这个文件夹架构:

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

2. 创建你的服务器

为了开始提醒 Docker 的基础知识,我们将从创建服务器开始。

2.1 创建文件

移动到您的server文件夹并创建以下文件:

  • 一个server.py文件(将包含服务器代码的 python 文件)。

  • 一个index.html文件(包含要显示的句子的 html 文件)。

  • 一个Dockerfile文件(包含创建服务器环境的必要指令的 docker 文件)。

通常,您应该在以下路径中拥有此文件夹架构server/:

  1. .
  2. ├── Dockerfile
  3. ├── index.html
  4. └── server.py0 directories, 3 files

2.2 编辑 Python 文件

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

  1. #!/usr/bin/env python3
  2. # 导入python系统库。
  3. # 这些库将用于创建 Web 服务器。
  4. # 你不需要安装任何特别的东西,这些库是用 Python 安装的。
  5. import http.server
  6. import socketserver
  7. # 这个变量将处理我们客户端在服务器上的请求。
  8. handler = http.server.SimpleHTTPRequestHandler
  9. # 这里我们定义我们要在端口 1234 上启动服务器。
  10. # 尽量记住这些信息,这对我们以后使用 docker-compose 非常有用。
  11. with socketserver.TCPServer(("", 1234), handler) as httpd:
  12. # 该指令将使服务器保持运行,等待来自客户端的请求。
  13. httpd.serve_forever()

此代码将允许您在此文件夹中创建一个简单的 Web 服务器。它将检索index.html文件的内容以在网页上共享它。

2.3 编辑 Html 文件

您可以在文件中添加以下语句index.html:

Docker-Compose is magic!

服务器启动时会共享这个文件,并显示这句话。

2.4 编辑 Docker 文件

在这里,我们将创建一个基本的 Dockerfile,它将负责执行我们的 Python 文件。我们将使用创建的官方镜像来执行 Python。

  1. # 请记住,dockerfile 必须始终从导入基础映像开始。
  2. # 我们使用关键字“FROM”来做到这一点。
  3. # 在我们的示例中,我们要导入 python 映像(来自 DockerHub)。
  4. # 所以,我们为图像名称写'python',为版本写'latest'。
  5. FROM python:latest
  6. # 为了启动我们的 python 代码,我们必须导入“server.py”和“index.html”文件。
  7. # 我们使用关键字“ADD”来做到这一点。
  8. # 请记住,第一个参数 'server.py' 是主机上文件的名称。
  9. # 第二个参数'/server/'是将文件放在图像上的路径。
  10. # 这里我们将文件放在图像“/server/”文件夹中。
  11. ADD server.py /server/
  12. ADD index.html /server/
  13. # 我想介绍一些新的东西,'WORKDIR' 命令。
  14. # 此命令更改图像的基本目录。
  15. # 这里我们定义'/server/'作为基目录(所有命令都将在这里执行)。
  16. WORKDIR /server/

3. 创建你的客户

为了继续提醒 Docker 的基础知识,我们将创建客户端。

3.3 创建文件

移动到您的client文件夹并创建以下文件:

  • 一个client.py文件(将包含客户端代码的 python 文件)。

  • 一个Dockerfile文件(包含创建客户端环境的必要说明的 docker 文件)。

通常,您应该在以下路径“ _client / _ ”中拥有此文件夹架构:

  1. .
  2. ├── client.py
  3. └── Dockerfile0 directories, 2 files

3.2 编辑 Python 文件

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

  1. #!/usr/bin/env python3
  2. # 导入python系统库。
  3. # 该库用于从服务器下载“index.html”。
  4. # 你不需要安装任何特别的东西,这个库是用 Python 安装的。
  5. import urllib.request
  6. # 此变量包含对“http://localhost:1234/”的请求。
  7. # 你一定想知道 'http://localhost:1234' 是什么?
  8. # localhost:这意味着服务器是本地的。
  9. # 1234:记住我们将 1234 定义为服务器端口。
  10. fp = urllib.request.urlopen("http://localhost:1234/")
  11. # 'encodedContent' 对应于服务器响应编码('index.html')。
  12. # 'decodedContent' 对应解码后的服务器响应(我们想要显示的内容)。
  13. encodedContent = fp.read()
  14. decodedContent = encodedContent.decode("utf8")
  15. # 显示服务器文件:'index.html'。
  16. print(decodedContent)
  17. # 关闭服务器连接。
  18. fp.close()

此代码将允许您获取服务器网页的内容并显示它。

3.3 编辑 Docker 文件

至于服务器,我们将创建一个基本的 Dockerfile 来负责执行我们的 Python 文件。

  1. # 与 *server* Dockerfile 相同。
  2. FROM python:latest
  3. # 与 *server* Dockerfile 相同。
  4. # 我们在 */client/* 文件夹中导入 *client.py*。
  5. ADD client.py /client/
  6. # 我想介绍一些新的东西,*WORKDIR* 命令。
  7. # 此命令更改图像的基本目录。
  8. # 这里我们定义 */client/* 为基础目录。
  9. WORKDIR /client/

4. 回到 Docker-Compose

您可能已经注意到,我们创建了两个不同的项目,即服务器和客户端,它们都使用 Dockerfile。

到目前为止,您已经了解的基础知识没有任何变化。

现在我们要编辑docker-compose.yml存储库的根目录。

注意:Docker-Compose非常完善,本文旨在给大家一个具体的典型例子。这就是为什么您不会看到所有关键字的原因。

  1. # docker-compose 必须始终以版本标签开头。
  2. # 我们使用 '3' 因为它是此时的最后一个版本。
  3. version: '3'
  4. # 你应该知道 docker-composes 与服务一起工作。
  5. # 1 service = 1 container.
  6. # 比如一个服务可能,一个服务器,一个客户端,一个数据库...
  7. # 我们使用关键字 'services' 开始创建服务。
  8. services:
  9. # 正如我们一开始所说,我们要创建:一个服务器和一个客户端。
  10. # 那是两个服务。
  11. # 第一个服务(容器):服务器。
  12. # 这里你可以自由选择关键字。
  13. # 它将允许您定义服务对应的内容。
  14. # 我们为服务器使用关键字'server'。
  15. server:
  16.     # 关键字“build”将允许您定义
  17. # 用于创建图像的 Dockerfile 的路径
  18. # 这将允许您执行该服务。
  19. # 这里'server/'对应的是server文件夹的路径
  20. # 包含要使用的 Dockerfile。
  21. build: server/
  22.     # 创建图像后要执行的命令。
  23. # 以下命令将执行“python ./server.py”。
  24. command: python ./server.py
  25.     # 记住我们在'server/server.py'中定义了1234作为端口。
  26. # 如果我们想从我们的计算机(容器外)访问服务器,
  27. # 我们必须与我们的计算机端口共享内容端口。
  28. # 为此,关键字 'ports' 将帮助我们。
  29. # 它的语法如下:[我们想要在我们机器上使用的端口]:[我们想要在容器中检索的端口]
  30. # 在我们的例子中,我们想在我们的机器上使用端口 1234 并且
  31. # 从容器中检索端口 1234(因为它在这个端口上
  32. # 我们广播服务器)。
  33. ports:
  34. - 1234:1234
  35. # 第二个服务(容器):客户端。
  36. # 我们为服务器使用关键字“client”。
  37. client:
  38.     # 这里的'client/对应client文件夹的路径
  39. # 包含要使用的 Dockerfile。
  40. build: client/
  41.     # 创建图像后要执行的命令。
  42. # 以下命令将执行“python ./client.py”。
  43. command: python ./client.py
  44.     # 关键字'network_mode'用于定义网络类型。
  45. # 这里我们定义容器可以访问计算机的'localhost'。
  46. network_mode: host
  47.     #关键字'depends_on'允许您定义服务是否
  48. # 应等到其他服务准备就绪后再启动。
  49. # 在这里,我们希望“client”服务等待“server”服务准备就绪。
  50. depends_on:
  51. - server

5.构建Docker-Compose

设置 docker-compose 后,需要构建您的客户端/服务器应用程序。此步骤对应于“docker build”命令,但适用于不同的服务。

docker-compose build

6. 运行 Docker-Compose

您的 docker-compose 已构建!现在是时候开始了!此步骤对应于“docker run”命令,但适用于不同的服务。

docker-compose up

给你,就是这样。您通常应该看到“Docker-Compose 很神奇!” 显示在您的终端中。

注意:如教程中所述,您的“服务器”服务使用计算机的端口 1234 来分发其内容。如果您在计算机上打开http://localhost:1234/页面,您应该会看到“Doc​​ker-Compose is magic!”。

代码可用

如果您想检索完整代码以更简单地发现它或执行它,在 Github 上供您使用。

GitHub:客户端服务器 Docker-Compose 示例

Docker 的有用命令

像往常一样,我准备了一个可能对您使用 docker-compose 有用的命令列表。

  • 停止容器并删除容器、图像……创建者docker-compose up。

docker-compose down
  • 显示服务的日志输出(例如docker-compose logs -f client:)。

docker-compose logs -f[service name]
  • 列出容器。

docker-composeps
  • 在正在运行的容器中执行命令(例如docker-compose exec server ls:)。

docker-composeexec[service name][command]
  • 列出图像。

docker-compose images
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/411765
推荐阅读
相关标签
  

闽ICP备14008679号