今天开发应用程序所需要的不仅仅是编写代码。在每个生命周期阶段,工具之间的多种语言,框架,体系结构以及不连续的接口都会带来极大的复杂性。Docker简化并加速了您的工作流程,同时使开发人员可以自由选择每个项目的工具,应用程序堆栈和部署环境进行创新。
作为一个开源的应用容器引擎,Docker 能够让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,方便快捷。
那么在学习 Docker之前,我们先来了解一下容器的概念。
容器
容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可从一个计算环境快速可靠地运行到另一个计算环境。Docker容器镜像是轻巧的,独立的,可执行的软件软件包,其中包括运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。
容器镜像在运行时成为容器,对于Docker容器而言,它们成为镜像当它们在Docker Engine上运行时成为容器。不论基础架构如何,容器化软件都可用于基于Linux和Windows的应用程序,始终运行相同。容器将软件与其环境隔离开来,并确保尽管开发和上线之间存在差异,但软件仍可以均匀运行。
Docker的定义
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker容器的分布场景
Docker容器无处不在:Linux,Windows,数据中心,云,无服务器等。
Docker 与虚拟机的区别
Docker容器与虚拟机类似,但原理上,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。
容器:
容器是应用程序层
的抽象,将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享OS内核,每个容器在用户空间中作为隔离的进程运行。容器占用的空间少于虚拟机(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要的虚拟机和操作系统更少。
虚拟机:
虚拟机是将一台服务器转变为多台服务器的物理硬件的抽象。系统管理程序允许多个虚拟机在单台计算机上运行。每个虚拟机包含操作系统,应用程序,必要的二进制文件和库的完整副本-占用数十GB。 虚拟机也可能启动缓慢。
参考资料
- Docker引擎(Docker Engine)是一个服务端-客户端结构的应用,主要包括Docker守护进程、Docker Engine API、Docker客户端。
- Docker守护进程(Docker daemons),也叫
dockerd
,是一个持久化的进程,用户管理容器。守护进程会监听Docker Engine API 的请求。 - Docker Engine API 是用于与Docker守护进程交互用的的API。它是一个RESTful API,因此它不仅可以被Docker客户端调用,也可以被
wget
和curl
等命令调用。 - Docker客户端,也叫
docker
,是大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。命令会遵循Docker Engine API。 - Docker注册中心(Docker registry)是用于存储Docker的镜像。Docker Hub 是一个公共的注册中心,任何人都可以使用,默认配置下,Docker将会在这里寻找镜像。
- 容器(Containers)是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控。
- 镜像(Images)是一个只读模板,用于指示创建容器。镜像分层(layers)构建的,而定义这些层次的文件叫Dockerfile。
- 服务(Services)允许用户跨越不同的Docker守护进程(Docker daemons)的情况下增加容器,并将这些容器分为管理者(managers)和工作者(workers),让他们为swarm共同工作。