Docker介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

一、Docker基本概念

1.1 Docker概述
  • Docker是一个用于开发,交付和运行应用程序的开放平台,Docker可以将应用程序和基础架构分开,从而快速的交付软件,借助Docker,可以以与管理应用程序相同的方式来管理基础架构,通过利用Docker的快速交付、测试和部署代码的方法,可以大大减少编写代码和在生产环境中运行代码之间的延迟
1.2 Docker 平台
  • Docker以容器的方式实现了应用程序的隔离,隔离和安全性可以给主机上同时运行多个容器。容器时轻量级的,因为不需要要管理撑的额外负担,而时直接在主机的内核中运行。
  • 与vm虚拟机相比,可以在给定的硬件组合上运行更多的容器。甚至可以在虚拟机的主机中运行docker,以下为Docker与VM之间部分区别
containerVM
启动速度分钟级秒级
运行性能接近原生5%左右损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别系统级
操作系统主要支持linux几乎支持所有系统
封装程度打包项目代码和依赖关系,共享宿主内核完整的操作系统
  • docker提供了工具和平台来管理容器的生命周期:
    • ① 使用容器开发应用程序及其支持组件
    • ② 容器称为分发和测试应用程序的单元
    • ③ 准备就绪后,可以将应用程序作为容器或协调服务器部署到生产环境中,无论生产环境是本地数据数据中心,云提供商还是两者的混合,其工作原理都相同
1.3 Docker引擎
  • Docker Engine是具有以下主要组件的客户端—服务器应用程序
    • ① 服务器是一种长期运行的程序,称为守护进程(dockerd 命令)
    • ② REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口
    • ③ 命令行界面(CLI)客户端(docker命令)
  • CLI使用Docker RESTAPI通过脚本或直接CLI命令控制,或者与Docker守护程序交互。许多其他Docker应用程序都使用基础API和CLI
  • 守护程序创建和管理Docker对象,例如 图像、容器、网络和卷

二、Docker应用

2.1 快速交付应用程序
  • Docker通过允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发声明周期。容器非常适合持续集成和持续交付(CI/CD) 工作流程
2.2 响应式部署和扩展
  • Docker基于容器的平台允许高读可移植的工作负载。Docker容器可以在开发人员的笔记本电脑、数据中心的物理或虚拟机、云提供商或混合环境中运行Docker的可移植性和轻量级的特性还可以让运维人员轻松的动态管理工作负载,并根据业务需求指示实时扩展或关闭应用程序和服务
2.3 更多工作负载
  • Docker轻巧快速,它为基于虚拟机管理程序的虚拟机提供了可行且经济高效的替代方案,因此可以利用更多的计算能力来实现业务目标,Docker非常适合高密度环境和中小型部署。

三、Docker 架构

  • Docker 使用客户端—服务器架构,Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以在统一系统上运行,或者可以将Docker客户端连接到远程Docker守护程序。Docker客户都安和守护程序在UNIX套接字或网络接口上使用REST API进行通信

  • Docker 主要组成

    • ① Docker Client :客户端
    • ② Docker Daemon :守护进程
    • ③ Docker Images:镜像
    • ④ Docker Container:容器
    • ⑤ Docker Registry:镜像仓管
  • Docker守护进程

    Docker守护程序倾听Docker API请求并管理Docker对象,例如图片、容器、网络和卷,守护程序还可与其他守护程序通信以管理Docker服务

  • Docker 客户端

    Docker 客户端是许多Docker用户与Docker交互的主要方式。当使用诸如 docker run此类命令的适合,客户端会将这些命令发送到dockerd(守护进程命令) 以执行这些命令,该docker命令使用Docker API。Docker 客户客户端可以与多个守护进程通信

  • Docker 注册表

    Docker 注册表存储Docker镜像。Docker Hub是所有人都可以使用的公共注册表,并且Docker配置为默认在Docker Hub上查找镜像。甚至可以建立自己的私人注册表。如果使用Docker数据中心(DDC),则其中包括Docker可信注册表(DTR)

  • 底层技术

    Docker使用GO语言编写,并利用Linux内核的多个功能来交付其功能

  • 命名空间

    Docker使用 namespace 提供容器的隔离工作区的技术。运行容器时Docker会为该容器创建以组名称空间 这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间内运行,并且其访问仅限于该名称空间 Docker Engine在Linux上使用以下名称空间:

    • ① pid 名称空间:进程隔离(PID:进程ID)

    • ② net 名称空间:管理网络接口(NET:网络)

    • ③ ipc 名称空间:管理访问IPC资源(IPC:进程间通信)

    • ④ mnt 名称空间:管理文件系统挂载点(MNT)

    • ⑤ uts 名称空间:隔离内核和版本标识符 (UTS:Unix时间共享系统)

  • 对照组

    Linux上的Docker引擎还依赖于另一种控制组(cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许 Docker Engine 将可用的硬件资源共享给容器,并由选择的实施限制和约束,例如:限制特定容器可用的内存

  • 联合文件系统

    联合文件系统或UnionFS是通过创建图层进行操作的文件系统,使其非常轻便且快速。Docker Engine使用UnionFS为容器提供构建模块。Docker Engine可以使用多个UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。

  • 容器格式

    Docker Engine 将名称空间,控制组和UnionFS组合到一个称为容器格式的包装器中,默认容器格式为libcontainer。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐