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

简介: 当您在传统的 Web 平台开发环境中工作时,开发人员必须配置许多内容,并随着平台的发展使它们保持同步......

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 使开发人员的工作变得更加轻松。我强烈建议大家尝试一下。

相关文章
kde
|
2月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
kde
793 4
|
3月前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
358 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
2月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
121 5
|
3月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
231 12
docker 部署 sftp
|
3月前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
1073 6
kde
|
2月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
658 7
kde
|
2月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
kde
1708 8
kde
|
2月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
438 4
|
3月前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
182 13