告别繁琐提升效率,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 使开发人员的工作变得更加轻松。我强烈建议大家尝试一下。

相关文章
|
6天前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
38 2
|
5天前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
34 15
Docker自建仓库之Harbor高可用部署实战篇
|
5天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
4天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
16 2
window 10专业版部署docker环境
|
5天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
60 18
|
5天前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
26 12
|
5天前
|
运维 数据安全/隐私保护 Docker
Docker自建仓库之Docker Registry部署实战
关于如何使用Docker Registry镜像搭建本地私有Docker仓库的实战教程,包括了下载镜像、创建授权目录和用户名密码、启动Registry容器、验证端口和容器、测试登录仓库、上传和下载镜像的详细步骤。
34 5
|
4天前
|
NoSQL 关系型数据库 数据库
JumpServer的Docker部署实战案例
JumpServer的Docker部署实战案例,详细介绍了JumpServer的概述、环境准备、基于Docker的快速部署步骤,以及如何访问JumpServer的WebUI。
8 0
|
7天前
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
20 0
|
7天前
|
运维 开发者 Docker
Docker容器部署实战:从入门到精通
【8月更文挑战第31天】 本文将引导读者了解如何使用Docker容器技术来简化和加速应用程序的部署过程。文章将通过实际案例探讨Docker的基本概念、架构,以及如何创建、管理和维护Docker容器。我们将通过详细的代码示例和操作指导,展示如何在本地环境或云基础设施上部署应用,并讨论如何克服在实际部署中可能遇到的挑战。无论你是DevOps工程师、软件开发者还是IT专业学生,本文都将为你提供深入理解并有效使用Docker的全面指南。
下一篇
DDNS