Docker之介绍

1 Docker 简介

1.1 什么是虚拟化

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

​在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用。

​虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。


1.2 虚拟化技术的应用

云服务器:通过vmwarekvm虚拟化出来的,从一堆硬件虚拟出各个操作系统。
阿里云,腾讯云opensatck,阿里飞天,用来管理虚拟化出来的操作系统,比如在阿里云购买一个云服务器,只用选择配置,就能生成云服务器实例。
docker:在购买的阿里云服务器上,也可以装vmware再虚拟化出一堆操作系统,但是它庞大,而且要虚拟出硬件,耗费资源。虚拟化的目的就是为了做隔离,如果用docker,跑起一个docker容器就是一个进程,但是它做了数据隔离、网络隔离(它是进程级别的隔离),可当它虚拟了一个操作系统(它用的还是宿主机的操作系统),而且它没有虚拟硬件,非常轻量级,它占的内存和硬盘空间都很小,用vmwarecentos的镜像要4个G,docker只需要70多。docker一般装在虚拟机或云服务器上,一个云服务器上可以跑上百个docker容器(相当于上百个操作系统),上百个服务器上,就会有个上万个容器。
k8s:解决不同机器的上万个容器的编排和管理。


1.3 什么是Docker

​Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

Docker是开发,运行和部署应用程序的开放管理平台。

开发人员能利用docker 开发和运行应用程序
运维人员能利用docker 部署和管理应用程序

Docker容器与虚拟机比较,docker不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快

1.4 Docker平台介绍

  • Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
  • 由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。
  • Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期:
•使用容器来开发应用程序及其支持组件。
•容器成为分发和测试你的应用程序的单元。
•准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。

1.5 为什么使用Docker

  • Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
  • 借助Docker,您可以像管理应用程序一样管理基础架构。
  • 通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟
•开发人员在本地编写代码,可以使用Docker同时进行共享,实现协同工作。

•使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。

•当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。

•利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需要推送到生产环境运行起来,也是一样的简单。
  • Docker主要解决的问题:
•保证程序运行环境的一致性;

•降低配置开发环境、生产环境的复杂度和成本;

•实现程序的快速部署和分发

 

2 Docker 整体结构

2.1 Docker引擎介绍 (Docker Engine)

  • Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序
  • mysql,redis都是c/s架构,走的应用层之下的套接字通信,自己封装的协议,Docke 走的http协议,符合整套RESTful 规范
•服务端 — 一个长时间运行的守护进程(Docker Daemon),负责接收客户端传过来的数据

•REST API — 一套用于与Docker Daemon通信并指示其执行操作的接口

•客户端 — 命令行接口CLI( Command Line Interface)

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

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

2.2 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 Hub远程仓库 https://hub.docker.com/

  • Docker 对象(Docker Objects)
•镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。

•容器:镜像被运行起来后的实例。

•网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。

•数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

 

3 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)思想管理镜像和容器
posted @ 2022-10-15 21:16  不会钓鱼的猫  阅读(86)  评论(0编辑  收藏  举报