为什么docker(基于容器的技术)是有用的

最近我一直在研究docker工人和它可以提供给SaaS公司的有用性。 我花了一些时间学习如何容器化应用程序,并简要了解什么是docker和容器。 我对理解这项技术的有用性有一些疑问。 我曾经看过一些来自dockercon的video,好像大家都在谈论docker如何让部署变得简单,以及如何在开发环境中部署,保证在生产环境中运行。 不过,我有一些问题:

  1. 从开发环境直接部署容器到生产意味着开发人员应该开发内部容器,这些容器是在生产中运行的相同容器。 这实际上是不可能的,因为开发人员喜欢用IDE来开发他们的MAC。 如果开发人员被告知ssh进入容器并开发他们的代码,他们将会反抗。 那么目前使用docker的公司如何工作呢?

  2. 如果我们假设开发工作stream程不会改变。 开发人员将在本地进行开发,并将其代码推入回购或其他任务。 那么“容器化”应用程序在哪里适合工作stream?

  3. 另外,如果开发人员不在容器内部开发,那么“你所开发的就是你所部署的并且保证工作”的假设被违反了。 如果是这种情况,那么我只能看到,docker提供的唯一好处是隔离,这与虚拟化提供的东西是一样的,当然这个开销较低。 所以我的问题是,docker在虚拟化方面唯一的优势是低开销吗? 还是其他的东西,我没有看到?

  1. 您可以将代码写入容器之外,并以许多不同的方式将其传输到容器中。 一些例子包括:

    • 代码在本地,并包括docker build通过使用ADDCOPY语句作为Dockerfile一部分Dockerfile
    • 在本地代码并将代码推送到像GitHub这样的源代码库,然后让构build过程将代码作为docker build一部分拉入容器
    • 在本地代码并将本地源代码目录安装为与容器共享的卷。

    前两个允许您在生产和开发中具有完全相同的构build过程。 最后一个例子不适合生产,但可以用ADD语句快速转换为生产(即第一个例子)

  2. 在Docker工作stream程中,开发人员可以创build源代码(在git,mercurial等存储库中存储和共享)和可立即运行的容器,这些容器通过https://registry等存储库进行存储和共享.hub.docker.com或本地registry 。

  3. 您开发和testing的集装箱运行代码正是可以投入生产的。 这是一个优点。 此外,您还可以获得隔离,有趣的容器到容器的networking连接以及与越来越多的用于创build,维护和部署容器的devops工具的工具集成。