Docker,它是什么,目的是什么

我前几天听说过Docker,想过去。

但事实上,我不知道这个“容器”的目的是什么?

什么是容器?

它可以替代专用于开发的虚拟机吗?

简单地说,在公司中使用Docker的目的是什么? 主要优点?

感谢提前

Docker:

什么是docker?

Docker是一个容器pipe理服务。 Docker的关键字是开发,运输和运行的任何地方。 Docker的整个想法是让开发人员轻松开发应用程序,将它们发布到容器中,然后将其部署到任何地方。

初始版本:2013年3月

主要使用基于敏捷的项目。

参考

为什么是docker?

  • Docker能够通过容器提供更小的操作系统占用空间,从而缩小开发规模。
  • 有了容器,跨不同部门的团队(如开发人员,质量保证人员和操作人员)可以更轻松地跨应用程序进行无缝工作。
  • 您可以在任何物理和虚拟机,甚至是云上的任何位置部署Docker容器。
  • 由于Docker容器非常轻便,所以它们非常容易扩展。

更多细节: 为什么docker工人

条款:

Docker引擎: “Docker引擎”是创build和运行Docker容器的Docker的一部分。

Docker Hub:用于共享和pipe理应用程序堆栈的SaaS服务。

(Docker Hub是云上的registry服务,允许您下载其他社区构build的Docker镜像,也可以将自己的Docker镜像上传到Docker中心)

Docker Compose: Docker Compose是一个定义和运行多容器Docker应用程序的工具。 它使用Yaml文件来configuration应用程序的服务,并使用单个命令执行所有容器的创build和启动过程。

使用Compose基本上是一个三步过程。

  1. 使用Dockerfile定义您的应用程序的环境,以便在任何地方进行复制。
  2. 在docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。
  3. 最后,运行docker-compose,Compose将启动并运行整个应用程序。

欲了解更多详情: Docker撰写

Docker Image:在Docker中,一切都基于图像。

Docker文件: Dockerfile实质上是构build映像的构build指令。

有关更多详细信息: Docker文件

Docker-compose.yml:configuration。 应用程序的服务。

虚拟机:使用虚拟机软件,例如,Ubuntu可以安装在Windows内部。 而且他们都会同时运行。 这就像在一个操作系统内部构build一个PC,它的核心组件如CPU,RAM,磁盘,网卡等,并组装成像真正的PC一样工作。 这样,虚拟PC变成了一个真正的PC中的“客户”,其操作系统被称为主机。

容器:与上述相同,但不是使用整个操作系统,而是裁减虚拟操作系统的“不必要”组件,以创build它的最小版本。 这导致了LXC(Linux容器)的创build。它比VM机器更快。

Docker:与虚拟机和容器不同, Docker容器不需要或包含单独的操作系统。 相反,它依赖于Linux内核的function并使用资源隔离。
Docker的目的:它的主要重点是自动化软件容器内部的应用程序部署以及Linux上操作系统级虚拟化的自动化。 这是轻量级容器,并在几秒钟内启动。 GGG

(请注意,在Docker中不需要任何操作系统)

[注意,这个答案着重于Linux容器,可能并不完全适用于其他操作系统。 ]

什么是容器?

这是一个应用程序 :容器是运行彼此隔离的应用程序的一种方式。 容器不是虚拟化硬件来运行多个操作系统,而是依靠虚拟化操作系统来运行多个应用程序。 这意味着您可以在与VM相同的硬件上运行更多容器,因为您只有一个操作系统副本运行,并且不需要为应用程序的每个实例预先分配内存和CPU内核。 就像任何其他应用程序一样,当一个容器需要CPU或内存时,它将分配它们,然后在完成时释放它们,以便其他应用程序稍后可以使用相同的有限资源。

它们利用内核命名空间 :默认情况下,每个容器都会收到一个命名空间的环境:

  • Mount:文件系统,容器中的/将与主机上的/不同。
  • PID:进程ID,容器中的pid 1是启动的应用程序,从主机查看时,此pid将有所不同。
  • networking:默认情况下,容器使用自己的回送接口(127.0.0.1)和私有IP运行。 Docker使用Linux桥接networking等技术将多个容器连接在一起。
  • IPC:进程间通信
  • UTS:这包括主机名
  • 用户:您可以select将所有用户标识与主机的标识进行偏移

这些命名空间中的每一个都会阻止容器看到主机上或其他容器中的文件系统或进程,除非您显式删除该隔离。

和其他Linux安全工具 :容器还利用其他安全function,如SELinux,AppArmor,Capabilities和Seccomp来限制容器内的用户(包括root用户)能够逃离容器或对主机产生负面影响。

打包您的应用程序及其依赖关系以实现可移植性 :将应用程序打包到容器中不仅包含将应用程序本身,还包括运行该应用程序所需的所有依赖关系,并将其集成到便携式图像中。 此映像是用于创build容器的基本文件系统。 因为我们只隔离应用程序,所以这个文件系统不包括虚拟化整个操作系统所需的内核和其他OS实用程序。 因此,容器的映像应该比等效虚拟机的映像小得多,这样可以更快地将其部署到networking中的节点上。 因此,容器已经成为将应用程序部署到云和远程数据中心的常用选项。

它可以替代专用于开发的虚拟机吗?

这取决于 :如果您的开发环境正在运行Linux,并且您不需要访问硬件设备,或者直接访问物理硬件是可以接受的,那么您会发现向Linux容器的迁移非常简单。 Docker容器的理想目标是像基于Web的API(例如REST应用程序)那样通过networking访问的应用程序。

简单地说,在公司中使用Docker的目的是什么? 主要优点?

开发或运行 :Docker通常被引入两条path之一的环境中。 开发人员正在寻求更快速地开发和本地testing应用程序的方法,以及希望在硬件上运行更多工作量的操作,而不是使用虚拟机。

或者Devops :理想的目标之一是立即从CI / CD部署工具中利用Docker,编译应用程序,并立即构build一个部署到开发,CI,prod等的映像。容器通常会减less移动应用程序的时间从代码签入直到可用于testing,使开发人员更有效率。 如果devise得当,开发人员和CI工具所testing和批准的相同图像可以在生产环境中部署。 由于该映像包含了所有的应用程序依赖关系,因此在开发过程中发生的某些事情的风险会大大降低。

可伸缩性 :我会提到的容器的最后一个关键好处是它们是针对水平可伸缩性而devise的。 当你的无状态应用程序负载较重时,由于较小的图像尺寸和较低的开销,容器可以更容易,更快地扩展。 出于这个原因,你会看到许多大型networking公司使用容器,如Google和Netflix。

该网站docker.io有很多很好的文档,你一定要在这里花一些时间。

对于你的问题“什么是容器”,看看Docker与虚拟机的关系,以及与虚拟机和LXC的LXC和Docker关系

对于你的问题,“它可以取代专用于开发的虚拟机?”,这取决于,但如果你使用Eclipse,你应该看看https://registry.hub.docker.com/search?q=eclipse&searchfield=和http://www.slideshare.net/jpetazzo/docker-and-containers-for-development-and-deployment-scale12x ,当然还有docker网站http://docs.docker.com/contributing/devenvironment/