Docker概述,一文了解Docker

Docker

Docker是一个用于开发、发布和运行应用程序的开放平台。 Docker使您能够将您的应用程序从您的基础设施中分离出来,这样您就可以快速地交付软件。 使用Docker,你可以像管理应用程序一样管理你的基础设施。 通过利用Docker的方法来快速交付、测试和部署代码,您可以显著减少编写代码和在生产环境中运行代码之间的延迟

Docker平台  

Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。 隔离和安全性允许您在给定的主机上同时运行多个容器。 容器是轻量级的,包含运行应用程序所需的所有内容,因此您不需要依赖主机上当前安装的内容。 您可以轻松地在工作时共享容器,并确保共享的每个人都使用相同的工作方式的容器。  

Docker提供了工具和平台来管理容器的生命周期:  

使用容器开发应用程序及其支持组件。  

容器成为分发和测试应用程序的单元。  

准备好后,将应用程序部署到生产环境中,作为容器或编排好的服务。 无论您的生产环境是本地数据中心、云提供商还是两者的混合体,这都是一样的。  

什么是容器?

容器是软件的标准单元,它将代码及其所有依赖项打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。 Docker容器映像是一个轻量级的、独立的、可执行的软件包,包括运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。  

 

容器映像在运行时变成容器,在Docker容器的情况下——映像在Docker引擎上运行时变成容器。 无论基础架构如何,对于Linux和基于windows的应用程序,容器化软件总是运行相同的。 容器将软件从它的环境中隔离出来,并确保它能够统一地工作,尽管开发和交付阶段之间存在差异。 

Docker容器运行在Docker引擎上:

标准:Docker为容器创建了行业标准,因此它们可以在任何地方携带  

轻量级:容器共享机器的OS系统内核,因此不需要每个应用程序使用一个OS,从而提高服务器效率,降低服务器和许可成本  

安全:应用程序在容器中更安全,Docker提供了业界最强的默认隔离功能  

容器是应用程序层的抽象,它将代码和依赖打包在一起。 多个容器可以运行在同一台机器上,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立的进程运行。 容器比vm占用更少的空间(容器映像通常有几十mb大小),可以处理更多的应用程序,需要更少的vm和操作系统  Docker容器运行在Docker引擎上  

虚拟机(vm)是物理硬件的抽象,它将一台服务器转换成多台服务器。 管理程序允许在一台机器上运行多个虚拟机。 每个虚拟机包含一个完整的操作系统、应用程序、必要的二进制文件和库——占用数十gb。 虚拟机的启动速度也可能很慢。

我可以使用Docker做什么?  

快速、一致地交付应用程序  

Docker简化了开发生命周期,允许开发者在标准化的环境中使用提供应用程序和服务的本地容器工作。 容器对于持续集成和持续交付(CI/CD)工作流非常有用。  

考虑以下示例场景:  

您的开发人员在本地编写代码,并使用Docker容器与同事共享他们的工作。  

他们使用Docker将他们的应用程序推入测试环境,并执行自动化和手动测试。  

当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。  

当测试完成后,向客户提供修复方案就像将更新后的映像推送到生产环境一样简单。  

响应式部署和扩展  

Docker的基于容器的平台允许高度便携的工作负载。 Docker容器可以在开发者的本地笔记本电脑上运行,也可以在数据中心的物理或虚拟机上运行,也可以在云提供商上运行,也可以在多种环境中运行。  

Docker的可移植性和轻量级特性也使得它可以很容易地动态管理工作负载,根据业务需求扩展或拆除应用程序和服务,几乎是实时的。  

 

在相同的硬件上运行更多的工作负载  

Docker是轻量级和快速的。 它为基于管理程序的虚拟机提供了一种可行的、经济的替代方案,因此您可以使用更多的计算能力来实现业务目标。 Docker对于高密度环境和需要用更少的资源做更多事情的中小型部署来说是完美的。  

Docker架构  

Docker使用客户端-服务器架构。 Docker客户端与Docker守护进程对话,Docker守护进程负责构建、运行和分发你的Docker容器。 Docker客户端和守护进程可以运行在同一个系统上,也可以将一个Docker客户端连接到一个远程的Docker守护进程上。 Docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。 另一个Docker客户端是Docker Compose,它可以让你处理由一组容器组成的应用程序。  

The Docker daemon

Docker守护进程(dockerd)监听Docker API请求,并管理Docker对象,如图像、容器、网络和卷。 一个守护进程也可以与其他守护进程通信来管理Docker服务。  

 

The Docker client

Docker客户端(Docker)是许多Docker用户与Docker交互的主要方式。 当您使用docker run等命令时,客户端会将这些命令发送给dockerd,由dockerd执行。 docker命令使用docker API。 Docker客户端可以与多个守护进程通信。  

 

Docker Desktop

Docker Desktop是一个易于安装的应用程序,您的Mac或Windows环境,使您能够构建和共享容器化的应用程序和微服务。 Docker Desktop包括Docker守护进程(dockerd)、Docker客户端(Docker)、Docker Compose、Docker Content Trust、Kubernetes和Credential Helper。 有关更多信息,请参见Docker Desktop。  

 

Docker registries 

Docker注册表存储Docker镜像。 Docker Hub是一个公共注册中心,任何人都可以使用,Docker被配置为默认在Docker Hub上寻找图像。 您甚至可以运行自己的私有注册表。  当你使用docker pull或docker run命令时,所需的映像会从你配置的注册表中提取出来。 当你使用docker push命令时,你的镜像被推送到你配置的注册表中。  

 

Docker objects  

当你使用Docker时,你正在创建和使用图像、容器、网络、卷、插件和其他对象。 

下面简要概述其中一些对象

Images

映像是一个只读模板,带有创建Docker容器的指令。 通常,一个映像基于另一个映像,并带有一些额外的定制。 例如,你可以构建一个基于ubuntu镜像的镜像,但是安装Apache web服务器和你的应用程序,以及使你的应用程序运行所需的配置细节。  

您可以创建自己的图像,也可以只使用其他人创建并发布在注册表中的图像。 要构建自己的映像,您需要创建一个Dockerfile,该文件使用简单的语法来定义创建和运行映像所需的步骤。 Dockerfile中的每条指令都会在图像中创建一个图层。 当您更改Dockerfile并重建图像时,只有那些已更改的层才会被重建。 与其他虚拟化技术相比,这是映像如此轻巧、小巧和快速的部分原因。  

 

Containers  

容器是映像的可运行实例。 通过Docker API和CLI可以创建、启动、停止、移动和删除容器。 您可以将容器连接到一个或多个网络,向其附加存储,甚至根据其当前状态创建一个新的映像。  

默认情况下,容器与其他容器及其主机相对隔离。 您可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。  

容器由它的映像以及您在创建或启动它时提供给它的任何配置选项定义。 当容器被移除时,对其状态的任何未存储在持久存储中的更改都将消失。  

 

Example docker run command  

下面的命令运行一个ubuntu容器,交互式地连接到本地命令行会话,运行/bin/bash.  

当你运行这个命令时,会发生以下情况(假设你使用的是默认的注册表配置):  

1、如果你没有本地的ubuntu镜像,Docker从你配置的注册表中提取它,就像你手动运行Docker pull ubuntu一样。  

2、Docker创建一个新的容器,就像你手动运行了一个Docker容器创建命令一样。  

Docker为容器分配一个可读写的文件系统,作为它的最后一层。 这允许运行的容器在其本地文件系统中创建或修改文件和目录。  

2、Docker创建了一个网络接口来连接容器到默认网络,因为你没有指定任何网络选项。 这包括为容器分配一个IP地址。 默认情况下,容器可以使用主机的网络连接连接到外部网络。  

3、Docker启动容器并执行/bin/bash. . 因为容器是以交互方式运行并连接到您的终端(由于有-i和-t标志),所以您可以使用键盘提供输入,同时将输出记录到您的终端。  

当您键入exit终止/bin/bash命令时,容器将停止,但不会被删除。 您可以重新启动或删除它。  

 

4、底层技术  

Docker是用Go编程语言编写的,利用Linux内核的几个特性来实现它的功能。 Docker使用一种名为命名空间的技术来提供被称为容器的隔离工作区。 当你运行一个容器时,Docker会为这个容器创建一组命名空间。  这些名称空间提供了一层隔离。 容器的每个方面都运行在一个单独的名称空间中,并且它的访问仅限于该名称空间。  


版权声明:本文为robot011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>