本文为学习DOCKER过程中的一些概念和总结,希望对大家有帮助。
1、基本概念
-
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
-
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
-
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2、应用场景
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
-
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
3、优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
3.1快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
-
您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
-
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
-
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
-
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
3.2响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3.3在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
4、三要素
4.1镜像(Images)
Image是一个只读模板,其中包含有关创建Docker容器的说明;Image可以用来创建容器且一个镜像可以创造多个容器。通常,一个Image基于另一个Image,并带有一些额外的自定义。例如,您可以构建基于ubuntu Image的镜像,但剩下其他的环境配置工作是你自己自定义的。要构建自己的Image也非常简单,可以使用DockerFile语法创建Dockerfile(定义创建Image和运行Image所需的步骤)。Dockerfile中的每条指令都在Image中创建一个层(Layer)。值得注意的是,更改Dockerfile并重建Image时,仅重建已更改的那些层。因此与其他虚拟化技术相比,这是Docker Image轻量、小巧和快速的一个原因。
4.2容器(Container)
Container是Image的可运行实例,用户可以使用Docker REST API或CLI创建,启动,停止,移动或删除容器,也可以将容器连接到一个或多个网络、将存储与之连接,甚至可以根据其当前状态创建新映像。默认情况下,一个Container与其他Container及其主机相对隔离,可以方便控制容器的网络等。Container和Image很相似,可以理解为类和对象的关系,同时需要注意Container最上面一层是可读可写的。
4.3仓库(Repository)
集中存放Image的场所,Repository很容易和下面说的Registry(仓库注册服务器)混淆。通俗地说,它们的关系是Registry上往往存放着多个Repository,每个Repository存又放着一大堆Images,每个Image存在不同的标签(Tag);用户可以从通过注册服务器从仓库拉取(带有某个tag的)Image,从而创建Container。
5、Docker Registry
在某个服务器上镜像构建完成后,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。我们可以通过 ubuntu:14.04,或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
6、容器和虚拟化
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
运行环境 | 保证开发环境、测试环境、生产环境一致 | 无法保证开发环境、测试环境、生产环境 |
7、概念总结
概念 | 说明 |
---|---|
镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |