简单了解 docker

1. 前言

1.1 什么是Docker?

Docker是一个用于开发发布运行应用程序的开放平台。 Docker使我们能够将应用程序基础架构分开,从而可以快速交付软件。 借助Docker,我们能以管理应用程序相同的方式来管理基础架构。 通过利用Docker快速交付测试部署代码的方法,我们可以大大减少编写代码和在生产环境中运行代码之间的延迟,即缩短开发、测试、部署的周期。

1.2 Docker 的优势

Flexible(灵活的)
Lightweight(轻量的)
Portable(可移植的)
Loosly coupled(松耦合的)
Scalable(可扩展的)
Secure(安全的)

Docker能够在container(容器)中打包和运行应用程序。隔离性安全性允许我们在一台宿主机上同时运行多个containercontainer轻量级的,因为它们没有管理程序的额外负担,而是直接在宿主机的内核中运行。 这意味着与使用虚拟机相比,在给定的硬件组合上可以运行更多的容器。 我们甚至可以在实际上是虚拟机的主机中运行Docker容器!

1.3 Docker Engine(Docker引擎)

Docker Engine是具有以下主要组件的client-server应用程序:

  • server,它是一种长期运行的程序,称为守护进程dockerd命令)。
  • REST API,它是一个其他程序与守护进程进行通信,并通过其进行某些操作的接口。
  • 命令行界面(CLI)客户端(docker命令)。
  • 在这里插入图片描述

CLI使用Docker REST API通过脚本或直接CLI命令来控制或与Docker daemon交互。

daemon创建和管理Docker对象,例如imagescontainersnetworksvolumes

1.4 Docker能用来干嘛?

  1. 快速、一致地交付你的应用程序。

    开发人员可以在containers中进行开发等工作,简化了(缩短了)开发周期。containers非常适合持续集成(continuous integration,简称CI)持续交付(continuous delivery,简称CD)工作流程。

  2. 响应式部署和扩展

    扫描二维码关注公众号,回复: 12683379 查看本文章

    Docker是一个基于容器的平台,有很强的可移植性。Docker容器可以在开发人员的本地笔记本电脑上,数据中心中的物理或虚拟机,云提供商或以上的混合环境中运行。

    Docker的轻量级和可移植性使得我们可以根据业务需求动态地扩展或缩减应用程序和服务。

  3. 可在同一硬件上运行更多应用程序

    Docker轻巧快速。它是虚拟机(Virtual Machine,简称VM)的可行、高效的替代方案。使得我们能够将更多的计算能力用到业务目标上。Docker非常适合高密度环境以及中小型部署,在这些部署中我们可以用更少的资源做更多的事情。

2. Docker架构

Docker 使用client-server架构。Docker clientDocker daemon交互,Docker daemon完成了build(构建)、run(运行)distribute(分发)Docker containers的工作。Docker clientDocker daemon可以在同一系统运行,也可以使用Docker client连接远程的Docker daemon。这二者通过REST API进行交互。

在这里插入图片描述

3. 基本概念

3.1 Docker daemon(Docker守护进程)

Docker daemon(dockerd)监听Docker API的请求和管理Docker objects(例如,imagescontainersnetworksvolumes)。一个daemon还可以和其他daemon进行同喜以管理Docker services

3.2 Docker client(Docker客户端)

Docker client(docker)Docker用户和Docker进行交互的主要方式。当我们使用 docker run命令时,Docker client会将这些命令发送给dockerddockerd负责执行它们。一个Docker client可以和多个Docker daemon通信。

3.3 Docker registries(Docker仓库)

一个Docker registry可以存储许多的Docker imagesDocker Hub是一个任何人都可以使用的公共库。默认情况下,Docker 会去Docker Hub中搜索images。我们也可以有自己的私有库。

当我们使用 docker pulldocker run命令时,会从我们所配置的仓库中拉取所需的images。当我们是用 docker push命令时,会将我么的image 推送到我们所配置的仓库。

3.4 Docker objects(Docker对象)

当我们使用Docker时,我们会创建和使用images(镜像)、containers(容器)networks(网络)volumes(卷)、plugins(插件)和其他一些对象。

3.5 Images(镜像)

一个image是一个包含创建Docker containers说明的只读文件。它是创建containers的模板。通常,image是在其他image的基础上做了一些自定义操作。例如,我们可以基于 ubuntu image 安装django 等相关依赖,成为了一个django webimage

要构建一个自己的image,我们需要创建一个Dockerfile文件,这个文件是用来定义如何构建image和运行它的Dockerfile中的每条指令都会在image中创建一个layer。当我们改变Dockerfile和重建这个image时,只会重建那些已经改变的layer。这是Dockerimages如此轻量、快速的部分原因。

3.6 Containers(容器)

一个container是一个可运行的image实例。使用Docker API或者CLI可以createstartstopmovedelete一个container。一个container可以连接多个networks存储,还可以基于当前的container创建一个新的image

默认情况下,一个container和该宿主机中的其他container是高度隔离的。我们可以控制container 网络存储或其他底层子系统与此宿主机中其他containers的隔离程度。

3.7 Services(服务)

Services允许我们能够在多个Docker daemon之间扩展containers,这些Docker daemon形成一个多个管理员和工作人员一个工作的群。群里的每个成员都是Docker daemondaemon之间通过Docker API进行通信。一个service允许我们定义期望的状态,例如,在任何指定时间必须可用的服务副本的数量。默认情况下,该serverice在所有工作节点是负载均衡的。

3.8 底层技术

DockerGo编写,并利用Linux内核的多个功能来实现其功能。

3.9 Namespaces(命名空间)

Docker使用namespaces技术提供了隔离的工作空间(就是container)。当我们运行一个container时,Docker会为该container创建一组namespaces

namespaces提供了一个隔离层(isolation layer)。容器的每个方面都在单独的namespace中运行,并且其访问仅限于该namespace

Docker EngineLinux中使用了如下一些namespaces

  • pid namespace。进程隔离(PID:进程ID)。
  • net namespace。管理网络接口(NET:网络)。
  • ipc namespace。管理对IPC资源的访问(IPC:进程间通信)。
  • mnt namespace。管理文件系统挂载点(MNT:挂载)。
  • uts namespace。隔离内核和版本标识符。 (UTS:Unix时间共享系统)

3.10 Control groups(控制组)

在Linux中,Docker Engine还依赖一种叫做control group(cgroups)的技术。cgroups限制应用程序对资源的访问control groups允许Docker Engine将可用的硬件资源共享给containers,并对其进行一些限制和约束。例如,我们可以限制某container可用的内存。

3.11 Unlon file systems

Union file systems,也叫UnionFS,是一种通过创建layers来进行操作的文件系统。它很轻量和快速。Docker Engine使用UnionFS为containers提供构建块(building blocks)。

3.12 Container format(容器格式)

Docker Enginenamespacescontrol groupsUnionFS组合到一个称为容器格式的包装器中。 默认容器格式为libcontainer。 将来,Docker可以通过与BSD JailsSolaris Zones等技术集成来支持其他容器格式。

4. 参考文献

[1] Docker 官网 - Docker概述

猜你喜欢

转载自blog.csdn.net/besmarterbestronger/article/details/108564576