Docker 部署:如何使用 Docker Web 服务器部署 Web 应用程序?

4,272 阅读7分钟

开发运营之痛 (DevOps)

只要开发人员一直在一个地方开发应用程序并在另一个地方部署它们,DevOps 就一直是一个问题。

您知道那种感觉——您开发了一个可以在本地计算机上完美运行的应用程序,并且很高兴将它推向世界。您将其部署到您的生产服务器并且……错误。

你不知道为什么,问题可能是一百万件事之一。这个问题代价高昂,令人沮丧,并破坏了世界各地的系统管理员和开发人员之间的友谊。

有一些技术试图解决这个问题。传统方法是使用虚拟机,但新的改进方法是使用 Docker 容器。

我将概述如何执行 Web 应用程序的 docker 部署。我们将从了解什么是 Docker(和不是)、什么是容器以及如何使用它们开始。

什么是Docker?

dockericon-min

首先,让我们定义一下我们在谈论什么。

Docker 是一种开源技术,可将您的应用程序打包到“容器”中。这些容器包含您所有的应用程序代码,以及它的所有库和依赖项。这允许您在任何运行 Docker 的机器上运行这个容器,并且它每次都运行完全相同。

那么,Docker Web 应用程序与虚拟机有何不同?

vmware_logo-min

这是对 Docker 应用程序的常见误解之一。虽然虚拟机看起来做的事情类似,但实际上却大不相同。

虚拟机以不同的方式解决了同样的问题。虚拟机是整个操作系统的虚拟实例——可能是 Linux 或 Windows。如果您在 Linux 的虚拟实例上开发您的应用程序,则可以在运行相同 Linux 虚拟实例的任何地方运行该应用程序。

听起来不错吧?是的,这确实有效,并且已经成功使用多年。但是有一个问题——如果你想部署一个单独的网络应用程序,你需要运行整个虚拟操作系统。这是非常昂贵的,特别是如果你有很多应用程序要运行。

Docker 通过将应用程序放置在所有运行在同一操作系统上的虚拟容器中来解决这个问题。每个 docker 容器都包含所有代码、库和依赖项,例如运行应用程序所需的配置文件。这为我们节省了大量存储空间、时间、处理能力和复杂性。容器与其他容器共享宿主机的内核。

为什么要使用 Docker Web 应用程序?

正如我在介绍中所说,许多公司都在使用 Docker 开发 Web 应用程序。 Docker Web 应用程序是一个强大的基础,您可以从中直接从 Web 浏览器启动您的应用程序。

Docker的主要卖点是:

  1. Docker 让您可以在与其他技术相同数量的服务器上运行更多的独立应用程序。
  2. 它使开发封装的、准备运行的应用程序变得轻而易举——在“容器”中交付所有内容,这些容器包含应用程序的所有库和依赖项。
  3. 它使管理应用程序并将它们部署到实时服务器的整个过程变得更加轻松和安全。您可以编辑 docker 应用程序,使用 docker images 命令将新的 docker 镜像推送到存储库,然后立即在任何地方运行该应用程序。

将所有这些放在一起,您将拥有一个非常有吸引力的产品,可以让您的生活(以及您与系统管理员的关系)变得更加轻松。

如何使用 Docker 容器执行应用程序的 Docker 部署?

An illustration of a docker container

下面是使用 Docker 开发和部署 Web 应用程序的基本过程:

  1. 在你想使用它的机器上安装 Docker;
  2. 在 Docker Hub 上设置注册表;
  3. 启动 Docker 构建以创建您的 Docker 镜像;
  4. 设置你的“Dockerized”机器;
  5. 部署您构建的 docker 镜像或应用程序。

在你的机器上安装 Docker

Docker 使得在任何地方运行应用程序变得容易,但那些地方需要运行 Docker。根据您设置的环境类型,共有三种主要的 Docker 变体:

  1. Docker企业版(Docker EE);
  2. Docker 社区版(Docker CE);
  3. Docker Cloud.

在 Mac、Windows、Linux、AWS 和 Azure 上安装 Docker 很容易。在您将使用的所有机器上启动并运行它后,您就可以进行开发和部署了。

查看 Docker 安装手册,了解如何在本地计算机和服务器上安装它的信息。

在 Docker Hub 上设置Registry

docker-hub-getting-started-min

为了轻松分发您的应用程序,您需要在某个地方共享它们。

Docker Hub 就像 Docker 容器的 GitHub。您可以使用数以千计的应用程序和示例。要设置您自己的公共或私有存储库以开始部署您的应用程序,只需访问 Docker Hub 网站。

您可以使用集线器将应用程序中的更改推送和拉取到不同的机器。还有许多工具可以自动执行此过程(稍后会详细介绍)。

设置你的“Dockerized”机器

下一步是让您的 Docker 环境准备好运行您的应用程序。您可以使用命令行和一些不同的工具来完成此操作。

这些虚拟机负责设置我们谈到的容器。您还可以做其他一些非常酷的事情,例如设置您的应用程序的多个实例以及使用负载均衡器自动将流量发送到云服务器上的不同版本。

在本地机器上设置与创建 Dockerized 云服务器不同。查看有关您环境的 docker 命令的官方 Docker 教程。

创建一个 Docker 镜像

Docker 容器是从 Docker 镜像创建的。要将您的应用程序分发到不同的机器,您需要创建一个 Docker 镜像以发送给它们。这是使用 Dockerfile 完成的

Dockerfile 通常大约 3-30 行长,包含创建 Docker 镜像所需的所有命令。有无数种设置 Dockerfile 的方法,最好在设置之前了解 Docker 部署最佳实践。

这是文档中的一个简单 Dockerfile 示例:
` FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

查看文档以找出需要放入 Dockerfile 的内容。

准备好 Dockerfile 后,您可以使用构建命令行工具来创建映像。以下是您的控制台的示例:

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d37c58dae56048f2ac2d8be754a09bdf~tplv-k3u1fbpfcp-zoom-1.image

应用程序的 Docker 部署cports_800-min

现在您已经让您的 Docker 机器运行起来,设置了 Docker Hub 存储库并构建了 Docker Image,您已准备好在您的机器上部署应用程序。

首先,将您的应用程序推送到您的存储库。您会发现 docker login 和 docker push 命令在这里很有用。在此处查看如何完成的示例。

接下来,将您的应用程序从您的存储库中拉到您的其他机器上。您可以使用 docker run 命令完成所有这些操作。它会自动查找、拉取并运行您的新应用程序。

就是这样!这些是使用 Docker 轻松将应用程序部署到多台机器的步骤。

自动化流程

run_anywhere-min

显然,您不希望每次更改应用程序时都运行所有这些 docker 命令。幸运的是,有许多工具可用于简化您的工作流程并自动化整个 Docker 应用程序部署过程。

一些例子是:

  • Google Kubernetes;
  • Dockersh;
  • Docker Compose;
  • Prometheus;
  • 还有很多!

开始使用 Docker,您将了解要自动化哪些部分。您拥有的服务器数量和应用程序类型将决定您的 docker 部署策略。

总结 Docker 部署

Docker 是目前的热门技术,这是有充分理由的。今天我们已经瞥见了如何使用 docker 部署网站或应用程序,让生活更轻松,节省金钱和时间,甚至可能挽救系统管理员和开发人员之间的一些友谊。