告别繁琐提升效率,Docker 帮您降低从开发到部署的复杂性

  1. 云栖社区>
  2. Docker公司>
  3. 博客>
  4. 正文

告别繁琐提升效率,Docker 帮您降低从开发到部署的复杂性

docker公司 2018-09-05 16:49:56 浏览1321
展开阅读全文

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散!


在 Mobelux,开发项目永远不会停止。我们一直在研究新的和现有的代码库。无论何时,都有多个版本的 Python、Ruby、NodeJS、PostgreSQL、MongoDB 和 Elasticsearch 投入使用。

在这些不同的环境中运行我们的代码,同时确保每个开发和测试环境都配置了正确版本的软件和守护进程是一件非常痛苦的事情。所有这些可移动的部分都可能破坏生产环境部署的一致性。

为了简化开发和部署,我们开始使用 Docker 和 Docker Compose,它们让我们的工作变得更加轻松。


Docker 的基础介绍

如果这是你第一次听到 Docker,那么我会为您概述它是如何工作的。

Docker 让您以一种一致的、可重复的方式快速、轻松地设置复杂环境。它为您的软件提供了一个称为容器的小型隔离环境,该环境完全独立于运行在您的计算机或其他容器上的其他软件。

然后,您可以将这些容器配置为任何操作系统并安装任何必要的软件,从而可以轻松配置特定于应用程序的需求,而不会影响可能存在冲突需求的其他软件。它在很多方面类似于虚拟机(对于那些熟悉该技术的人而言),但运行的系统资源要少得多。

每个 Docker 容器都是 Docker 镜像的执行实例 —— 一个预构建的定义,内置所有软件和配置,因此它在任何地方运行都完全相同。镜像本身是由一个名为 Dockerfile 的文本文件所构建的,该文件包含一个简单的命令列表,并且可以在必要时不断重建。

这意味着一旦创建了 Dockerfile 文件,任何用户都可以通过它快速构建镜像并运行预先配置了正确软件的容器。您还可以预先构建和发布镜像,以节省更多时间。

您可能知道,大多数的 Web 应用程序和 API 不仅仅只包含一个应用程序。它们使用在其他服务器上运行的数据库、缓存和其他 Web 服务。Docker Compose 是一个与 Docker 一起发布的工具,预装了 Docker for Mac 和 Docker for Windows,它可以让您定义一组容器,这些容器可以一起启动并在专用网络上运行。这样,您就可以在一个本地的、隔离的、自动配置的环境中模拟整个应用栈了。


使用 Docker 进行开发

当您在传统的 Web 平台开发环境中工作时,开发人员必须配置许多内容,并随着平台的发展使它们保持同步。首先,必须安装正确的环境(例如特定的Python、Ruby 或 NodeJS 版本)。仅此一项可能非常耗时,容易出错,并且对于刚接触生态系统的人来说需要处理很多事情,特别是当您添加用于隔离环境的工具和多个项目的库存在于同一台机器上时。

接下来,开发人员需要确保他们拥有正确版本的外部服务,例如数据库和缓存。如果您正在处理多个项目,则可能需要多个版本,并且您必须将它们与您在生产中所使用的任何版本保持同步。每个项目还可能需要任意数量的开发库和系统工具来正确构建和运行。如果没有什么工具可以帮助您,那么整个事情就会变得极其困难和耗费时间。

Docker 就是那个可以拯救您的工具!

使用 Docker,我们只需配置一次,然后将其作为 Docker 镜像发布。当开发人员在同一个项目上工作时,他们会下载最新的镜像,或从项目的 Dockerfile 文件中重建它。它将自动安装所有软件依赖项的正确版本,这样我们就可以确保一切都是正确的和最新的。

通过使用 Docker Compose,我们可以更进一步为正确的数据库、缓存、搜索引擎甚至 Amazon S3 克隆配置镜像和容器。我们配置这些组合栈,以便在开始时启动所有服务,将当前代码的本地副本安装到开发容器中,以便开发人员可以使用其主操作系统的本机代码编辑器和工具,并为开发人员提供命令能够安装任何特定于发行版本的依赖项并运行开发代码。

这节省了我们配置系统和调试配置问题的工作时间。首次设置环境只需要几分钟(甚至几秒)而不是几小时。

作为额外的好处,在整个项目生命周期中的 Bug 数会减少,因为开发人员使用相同的库、基本操作系统和用于运行生产系统的外部服务。任何这些服务和依赖项的更新也可以在本地轻松测试,因此您可以确保它们按预期工作。


使用 Docker 进行测试

在开发测试之后,Docker 仍然是首选工具,它让整个流程变得更简单、更精确。

所有与开发相关的挑战仍然存在于测试中,甚至当不是所有的测试人员都来自于开发或高技术背景时,这种情况会变得更加复杂。Docker 为管理这种复杂性提供了几种不同的选择。

开发人员可以为 docker 镜像提供已经在镜像中的代码的正确版本。通过这种方式,测试人员不需要与版本控制或检查进行交互,以确保他们在本地拥有正确版本的代码。然后 Docker Compose 可用于使用该镜像运行容器以及外部服务的容器,因此他们只需简单地运行 Docker Compose 堆栈,一切都在那里。

如果我们确实需要从版本控制中测试特定代码,那么测试人员仍然可以通过克隆 git 镜像仓库并将其安装到正在运行的容器中,类似于开发过程。不同之处在于,具有需要测试的代码的容器不是转到命令行,而是自动安装当前的依赖项,用基本的测试数据为数据库提供种子,并自动运行该服务。

为了使它更简单,我们一直在使用一个名为 Lifeboat 的工具 —— 一个简单的用于 Docker Compose 的 GUI 和 GitHub Desktop。这使得测试人员可以轻松地启动和停止撰写堆栈,而无需在项目之间导航或在命令行上管理 Docker 和 git。


使用 Docker 进行部署

最后是部署时间,Docker 继续依旧让事情变得更容易。

在传统的服务器部署中,每个服务器必须在部署时手动更新依赖关系。对于使用 Python 或 Ruby 等语言构建的大多数现代 Web 平台,这意味着要联系外部服务器以下载这些依赖项,并且在某些情况下,每次都要编译它们。每次发生这种情况时,都会有存在失败的风险 —— 特别是考虑到服务器操作系统可能与开发或测试发生的地点不同。

在使用Docker时,这些风险会降低或消除。我们首先创建一个镜像并将其部署到 staging,以确保它按预期构建、部署和运行。然后将这个完全相同的镜像(已安装和配置了所有依赖项)部署到生产中,从而消除以前在部署期间出现故障的机会。

从开发到部署,Docker 使开发人员的工作变得更加轻松。我强烈建议大家尝试一下。

网友评论

登录后评论
0/500
评论
docker公司
+ 关注
所属云栖号: Docker公司