Docker简介及由来(一)

  刚开始学习Docker的时候,其实这个概念突然冒出来,很突兀,也不知道是什么意思,新技术也不知道什么原理,一上来就开始看视频学习,怎么搭建,怎么使用,到最后时间久了又忘记了,在与公司项目上就开始脱节了,只是学习了纯理论的知识,但是并不能很好的用在实际项目中。

  由于公司内部初步有个想法,想用Docker+K8S迁移测试环境,为了做一个尝试,系统的再次回来学习一下Docker的一些底层原理,到底Docker是什么?逻辑框架是什么?进程模型是什么?技术架构什么等一连串的问题,值得去深入了解一下。

1.前提知识

  1.1 linux相关的基础知识,并熟悉命令行、文件编辑、软件包安装、服务管理、基本的网络知识。

  1.2 git相关的知识

2.Docker与虚拟机区别

管理程序虚拟化:通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上。

容器:直接运行在操作系统内核之上的用户空间。

容器虚拟化被称为:操作系统级虚拟化,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

容器引入新技术:OpenVZ、Solaris Zones、Linux容器(lxc),通过这些技术加持,容器不仅仅是单纯的运行环境,更像是一个完整的宿主机。

传统的VM解决的是资源配置的问题,Docker解决的是应用开发、测试、部署的问题。

3.Docker简介 

  进程:程序的运行过程。正在进行的一个过程或一个任务,而负责执行任务的则是CPU。

  程序:一堆代码。   

3.1 Docker的渊源

  Docker发展如此迅速,是因为它给出了一个标准化的解决方案。比如一个场景:环境配置,换一台机器,就要重来一次,费力费时。

  现在Docker能解决的问题就是:安装的时候,把原始环境一模一样地复制过来。

  Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。应用程序部署引擎目标:提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后在部署到生产环境。简单说,Docker是一个开源的应用容器引擎,可以利用Docker打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

3.2Docker是什么

  Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。Docker是用go语言开发的,基于Linux内核的CGroup、Namespace,以及AUFS类的UnionFS技术,是对进程进行封装隔离的轻量级容器虚拟技术之一。Docker引擎:用来运行和管理容器的核心软件,代指docker或docker平台,采用模块化设计原则,其组件是可替换的。

Docker引擎由如下主要的组件构成:Docker客户端、Docker守护进程、containerd、runc。起初由2个核心组件构成:LXC和Docker daemon。

  1. Docker 守护进程(Docker daemon):单一的二进制文件,包含诸如Docker客户端、Docker API、容器运行时、镜像构建等。
  2. LXC:提供了诸如命名空间(Namespace)和控件组(CGroup)等基础工具的操作能力,他们是基于Linux内核的容器虚拟化技术。

   Docker通过容器虚拟化、共享内核,能够把应用需要的运行环境、缓存环境、数据库环境等封装起来,以最简单的方式支持应用运行,轻装上阵,性能更佳。 

简单来说,Docker到底是什么呢?Docker=LXC+AUFS。LXC负责资源管理,AUFS负责镜像管理。LXC包括CGroup(控制组)、Namespace(命名空间)、chroot等组件,并通过CGroup进行资源管理。

Docker架构:

Docker总体逻辑与详细架构:

3.3 Docker目标

  1. 提供一个简单、轻量的建模方式
  2. 职责的逻辑分离
  3. 快速、高效的开发生命周期
  4. 鼓励使用面向服务的架构

3.4 Docker核心组件

  1. Docker客户端和服务器
  2. Docker镜像
  3. Docker容器
  4. Registry

3.4.1 Docker客户端和服务器

Docker是一个客户-服务器(C/S)架构的程序。

3.4.2 Docker镜像

镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像是基于联合(Union)文件系统的一种层式的结构,由一系列指令一步一步构建出来的。也可以把镜像理解为源代码,镜像体积很小,非常便携,易于分享、存储和更新。

例如:

  1. 添加一个文件
  2. 执行一个命令
  3. 打开一个端口

如何使用已有的镜像,如何构建自己的镜像?

3.4.3 Registry

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有2种。

3.4.4 容器

Docker可以帮你构建和部署容器,我们要做的就是把自己的应用程序或服务打包放进容器。镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

Docker容器就是:

  1. 一个镜像格式
  2. 一系列标准的操作
  3. 一个执行环境

通俗讲,Docker借鉴了集装箱的概念,标准集装箱运输货物,Docker运输软件。每个容器都包含一个软件镜像,即容器的货物。容器里的软件镜像可以进行一些操作,例如:镜像可以被创建、启动、关闭、重启以及销毁。和集装箱一样,Docker在执行上述操作时,不关心容器中到底塞了什么,所有容器都按照相同的方式将内容装载进去。

使用Docker,我们可以快速构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。

3.5 我们能用Docker做什么

可以分2个视角去看:运维视角、开发视角。

  1. 运维视角:下载镜像、运行新的容器、登录新容器、在容器内运行命令,以及销毁容器。
  2. 开发视角:更多关注与应用相关的内容。从GitHub中拉取一些应用代码,解释其中的dockerfile,将应用容器化,并在容器中运行他们。

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。

  1 更高效的利用系统资源

  2 更快速的启动时间

  3 一致的运行环境

  4 持续交付和部署

  5 更轻松的迁移

  6 更轻松的维护和扩展

我们能用Docker做什么?

  1. 加速本地开发和构建流程,使其更加高效、更加量化。本地开发人员可以构建、运行并分享Docker容器。容器可以在开发后环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境。
  2. 能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
  3. 用Docker创建隔离的环境来进行面试。例如,用Jenkins CI这样的持续集成环境启动一个用于测试的容器。
  4. Docker可以让开发者先在本机上构建一个复杂的程序架构来进行测试,而不是一开始就在生成环境部署、测试。
  5. 构建一个多用户的平台即服务(PaaS)基础措施。
  6. 为开发、测试提供一个轻量级的独立沙盒环境,或者将独立的沙盒环境用于技术教学。
  7. 提供软件即服务(SaaS)应用程序,如Memcached即服务。
  8. 高性能、超大规模的宿主机部署。

3.6 Docker技术组件

Docker可以运行于任何安装了现代Linux内核的X64主机上。Docker主要包括以下几个部分:

一个原生的Linux容器格式,Docker中成为libcontainer,或者很流行的容器平台lxc.目前lxc是Docker的默认格式。

linux内核的命名空间(namespace),用于隔离文件系统、进程和网络。

  1. 文件系统隔离:每个容器都有自己的root文件系统。
  2. 进程隔离:每个容器都运行在自己的进程环境中。
  3. 网络隔离:容器间的虚拟网络接口和IP地址都是分开的。
  4. 资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个Docker容器。
  5. 写时复制:文件系统都是通过写时复制创建的,这就意味着文件系统是分层的、快速的,而且占用的磁盘空间更小。
  6. 日志:容器产生的STDOUT、STDERR和STDIN这些IO流都会被收集并计入日志,用来进行日志分析和故障排错。
  7. 交互式shell:用户可以创建一个伪try终端,将其连接到STDIN,为容器提供一个交互式shell。

4.Docker架构与生态

  在学习Docker的时候,首先要通过全局去思考,到底这是一个什么东西,他有什么样的架构。比如Docker的技术架构、进程模型、容器本质、运行模型、逻辑架构、单机网络架构、集群网络架构、安全架构。当从深入的角度去切入Docker的各种底层实现,能让我们对这个技术有更深刻的理解和使用。

4.1 Docker技术架构

 

4.2 Docker逻辑架构

 

4.3 Docker网络架构

 

4.4 Docker安全架构

 

4.5 Docker与DevOps

                                            

 

5.Docker基本概念详解(三要素)

Docker主要包含3要素:镜像(image)、容器(container)、仓库(repository)。

Docker一句话:解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

docker主要包含三要素:镜像、容器、仓库。

  镜像:docker镜像≈root文件系统,比如官方镜像ubuntu:16.04。Docker镜像理解为一个包含了OS文件系统和应用的对象会很有帮助。

     docker镜像是一个特殊的文件系统,架构是分层存储。镜像构建时,会一层层构建,前一层是后一层的基础,后一层上的任何改变只发生在自己这一层。镜像是静态的定义,实际上等价于未运行的容器。

  容器:容器的实质是进程,架构是分层存储,容器进程运行于属于自己的独立的命名空间。

     容器可以拥有自己的root文件系统、自己的网络A配置、自己的进程空间,甚至自己的用户ID空间。

     镜像和容器的关系就是类和实例一样。容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。

  仓库(repository):集中存储、分发镜像的服务,集中存放镜像文件的场所。

  5.1 仓库(repository)和仓库注册服务器(registry)区别

    一个docker registry中可以包含个仓库(repository),每个仓库包含多个标签,一个标签对应一个镜像。

     仓库分为公开仓库和私有仓库:

     最大的公开仓库是Docker hub(https://hub.docker.com/)

     国内的公开仓库包括阿里云、网易云

  5.2  镜像与容器的区别

    Docker镜像(对象)就是一个只读的模板,可以用来创建Docker容器(类)。一个镜像可以创建很多容器。

    镜像 = 类;

 

 

 

 

posted @ 2019-10-29 11:44  wendyw  阅读(530)  评论(0编辑  收藏  举报