什么是Docker

Docker是开发,运行和部署应用程序的开放管理平台。 开发人员能利用docker 开发和运行应用程序 运维人员能利用docker 部署和管理应用程序

Docker 平台介绍

Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。

由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。

Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期: 使用容器来开发应用程序及其支持组件。

容器成为分发和测试你的应用程序的单元。 准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。

为什么用 Docker

Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。 借助Docker,您可以像管理应用程序一样管理基础架构。

通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟。

如:

  1. 开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
  2. 使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
  3. 当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。
  4. 利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。
  5. 后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。

Docker主要解决的问题:

  • 保证程序运行环境的一致性;
  • 降低配置开发环境、生产环境的复杂度和成本;
  • 实现程序的快速部署和分发。

Docker 引擎介绍

Docker Engine是一个包含以下组件的 客户端-服务端(C/S)应用程序

  • 服务端 --- 一个长时间运行的守护进程(Docker Daemon)
  • REST API --- 一套用于与Docker Daemon通信并指示其执行操作的接口
  • 客户端 --- 命令行接口CLI( Command Line Interface)

CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作

Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷)

Docker结构概览图

Docker 结构简介

Docker客户端(Docker Client)

  • Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。
  • 当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。
  • Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。

Docker服务端(Docker Server)

  • Docker Daemon其实就是Docker 的服务端。
  • 它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等

Docker Registries

  • 俗称Docker仓库,专门用于存储镜像的云服务环境.
  • Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。

Docker 对象

  • (Docker Objects) 镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
  • 容器:镜像被运行起来后的实例。
  • 网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
  • 数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

Docker 底层技术了解

Docker使用Go语言实现。

Docker利用linux内核的几个特性来实现功能:

  • 利用linux的命名空间(Namespaces)
  • 利用linux控制组(Control Groups)
  • 利用linux的联合文件系统(Union File Systems)
  • 这也就意味着Docker只能在linux上运行。
  • 在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。

容器格式( Container Format ):

  • Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和
  • 生命周期管理。
  • 容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer

Namespaces(命名空间):为Docker容器提供操作系统层面的隔离

  • 进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算
  • 网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络
  • 进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络
  • 文件系统挂载隔离: 容器拥有自己单独的工作目录
  • 内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的

Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离

  • 控制组能控制应用程序所使用的硬件资源。
  • 基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
  • Union File Systems(联合文件系统--UnionFS):利用分层(layer)思想管理镜像和容器

Docker 概览的更多相关文章

  1. Docker概览

    Docker.xmind下载

  2. docker 概览 (1)

    Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使 ...

  3. Kubernetes & Docker

    Docker核心技术原理及其应用 Docker 概览 Docker版本与安装介绍 Docker 核心技术之镜像 Docker 核心技术之容器 Docker 核心技术之容器与镜像 Docker 核心技术 ...

  4. Docker 生态概览

    Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...

  5. docker底层技术概览

    docker解决了云计算环境难于分发并且管理复杂,而用KVM.Xen等虚拟化又浪费系统资源的问题.Docker最初是基于lxc构建了容器引擎,为了提供跨平台支持,后又专门开发了libcontainer ...

  6. Docker生态概览

    百花齐放的容器技术 虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的.实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了.下面的一串名称肯能有的你都没 ...

  7. Docker容器编排器概览

    就像Apple推出iPhone让智能手机变成主流,Docker让容器变成了主流.自从项目发布以来,Docker着重于提升开发者的体验.基本理念是可以在整个行业中,在一个标准的框架上,构建.交付并且运行 ...

  8. 初识Docker和Windows Server容器

    概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...

  9. docker好文收藏

    深入浅出Docker(一):Docker核心技术预览 2. 核心技术预览 Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观.我们从虚拟化方法的四个方面:隔离性.可配额/可度 ...

随机推荐

  1. 4.alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...

  2. Android 性能测试优质实践汇总

    这两天把testerhome上的关于Android 性能测试的精品文章看了一遍,很有收获,学习到了Android 性能测试该关注的一些细节.我所说的“精品”是指对我自己有启发的文章,可以被自己运用起来 ...

  3. 使用logdashboard进行可视化的日志追踪

    本文源码在Github可以找到下载 LogDashboard 如果你还不了解LogDashboard请看这里. LogDashboard 1.1版本支持请求追踪,虽然目前版本还没有发布.不过这个功能可 ...

  4. 解读 kubernetes client-go 官方 examples - Part Ⅰ

    目录 1. 介绍 2. 运行测试 2.1 测试环境 2.2 运行结果 3. 原理解析 3.1 获取 kubeconfig 信息,并构造 rest#Config 实例 3.1.1 tools/clien ...

  5. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  6. .NET CAD二次开发学习第一天

    基于浩辰CAD2019 需求: 开发线转圆简单命令.命令过程:1) 请选择图中直线(要求支持一次选多个):2) 弹出对话框,输入圆的图层名和半径3) 点对话框中确定按钮,结束命令.命令执行效果:所选每 ...

  7. [转]Python in Visual Studio Code

    本文转自:https://code.visualstudio.com/docs/languages/python Working with Python in Visual Studio Code, ...

  8. Jmeter API Performance Test

    笔者最近了解 Apache组织开发了基于Java的压力测试工具Apache JMeter.如有兴趣可自行搜索它的相关信息.笔者记录了一些使用方法,如有错误或遗漏,欢迎联系改正. 官方下载地址:http ...

  9. C# 创建、更改Excel命名区域(NamedRange)

    创建命名区域是指给选定的某个单元格或多个单元格区域设置名称,目的是方便我们在文件中的其他地方对该单元格区域进行引用能够简化公式引用或者方便数据管理.下面记录了具体的C#示例代码.这里创建命名区域分为了 ...

  10. 零基础学Python--------第9章 异常处理及程序调试

    第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...