首页 > 其他分享 >Docker基础知识

Docker基础知识

时间:2023-04-05 15:24:52浏览次数:43  
标签:容器 image 基础知识 所示 Docker runtime docker

容器生态系统

Docker现在几乎是容器的代名词,但在Docker围绕的还有一个生态系统。

Docker是这个生态系统的基石,但完善的生态系统才是保障Docker以及容器技术能够真正健康发展的决定因素。

容器生态系统包含核心技术平台技术支持技术

 

1.容器核心技术

容器核心技术是指能够让Container(容器)在host上运行起来的那些技术

技术包括容器规范、容器runtime、容器管理工具、容器定义工具、Registry以及容器OS

 

1.1 容器规范

容器不光是Docker,还有其他容器,比如CoreOS的rkt。

为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫Open Container Initiative(OCI)的组织,其目的是制定开放的容器规范。

目前OCI发布了两个规范:runtime specimage format spec

有了这两个规范,不同组织和厂商开发的容器能够在不同的runtime上运行。这样就保证了容器的可移植性和互操作性,如下图所示。

fig:

 

1.2 容器runtime

runtime是容器真正运行的地方。容器只有在runtime中才能运行。

runtime需要跟操作系统kernel紧密协作,为容器提供运行环境。

lxc、runc和rkt是目前主流的三种容器runtime,如下图所示。

fig:

lxc是Linux上老牌的容器runtime。Docker最初也是用lxc作为runtime。

runc是Docker自己开发的容器runtime,符合oci规范,也是现在Docker的默认runtime。

rkt是CoreOS开发的容器runtime,符合OCI规范,因而能够运行Docker的容器。

 

1.3 容器管理工具

光有runtime还不够,用户得有工具来管理容器。

容器管理工具对内与runtime交互,对外为用户提供interface,比如CLI。

容器管理工具如下图所示。

fig:

lxd是lxc对应的管理工具。

runc的管理工具是docker engine。docker engine包含后台deamon(虚拟光驱)和cli两个部分。我们通常提到Docker,一般就是指的docker engine。

rkt的管理工具是rkt cli。

 

1.4 容器定义工具

容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存、共享和重建,如下图所示

fig:·

docker image是Docker容器的模板,runtime依据docker image创建容器。

dockerfile是包含若干命令的文本文件,可以通过这些命令创建出docker image。

也就是通过配置dockerfile来搭建docker image(容器的模板),runtime通过docker image来创建容器

ACI(App Container Image)与docker image类似,只不过它是由CoreOS开发的rkt容器的image格式。

 

1.5 Registry (模板仓库)

容器是通过image创建的,需要有一个仓库来统一存放image,这个仓库就叫做Registry。如下图所示

fig:

企业可以用Docker Registry构建私有的Registry

Docker Hub(https://hub.docker.com)是Docker为公众提供的托管Registry,上面有很多现成的image,为Docker用户提供了极大的便利。

Quay.io(https://quay.io/)是另一个公共托管Registry,提供与Docker Hub类似的服务。

 

1.6 容器OS

容器OS是专门运行容器的操作系统。与常规OS相比,容器OS通常体积更小,启动更快。

因为是为容器定制的OS,通常它们运行容器的效率会更高。

目前已经存在不少容器OS, CoreOS、Atomic和Ubuntu Core是其中的杰出代表,如下图所示。

fig:

 

2.容器平台技术

容器核心技术使得容器能够在单个host上运行,而容器平台技术能够让容器作为集群在分布式环境中运行

容器平台技术包括容器编排引擎、容器管理平台和基于容器的PaaS,如下图所示。

fig:

 

2.1 容器编排引擎

基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务。

为了保证应用的高可用,每个组件都可能会运行多个相同的容器

这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。

 

这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统

这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群

而这,就是容器编排引擎要干的工作。

 

所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。

通过容器编排引擎,容器被有机地组合成微服务应用,实现业务需求。

 

docker swarm是Docker开发的容器编排引擎。

kubernetes(k8s)是Google领导开发的开源容器编排引擎,同时支持Docker和CoreOS容器。

mesos是一个通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能。

以上三者是当前主流的容器编排引擎,如下图所示。

fig:

 

2.2容器管理平台

容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。

通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,比如application catalog和一键应用部署等。

Rancher和ContainerShip是容器管理平台的典型代表,如下图所示。

fig:

 

2.3基于容器的PaaS(Platform as a service)

基于容器的PaaS(平台即服务)为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发。也就是商品房,但需要自己装修

Deis、Flynn和Dokku都是开源容器PaaS的代表,如下图所示。

fig:

 

3.容器支持技术

下面这些技术被用于支持基于容器的基础设施,如下图所示。

fig:

 

3.1 容器网络

容器的出现使网络拓扑变得更加动态和复杂。

用户需要专门的解决方案来管理容器与容器、容器与其他实体之间的连通性和隔离性。

docker network是Docker原生的网络解决方案。除此之外,我们还可以采用第三方开源解决方案,例如flannel、weave和calico。不同方案的设计和实现方式不同,各有优势和特点,应根据实际需要来选型,如下图所示。

fig:

 

3.2 服务发现

动态变化是微服务应用的一大特点。

当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器也会根据host的资源使用情况在不同host中迁移,容器的IP和端口也会随之发生变化。

在这种动态的环境下,必须要有一种机制让client能够知道如何访问容器提供的服务这就是服务发现技术要完成的工作

服务发现会保存容器集群中所有微服务最新的信息,比如IP和端口,并对外提供API,提供服务查询功能。etcd、consul和zookeeper是服务发现的典型解决方案,如下图所示。

fig:

 

3.3 监控

监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战。针对容器环境,已经涌现出很多监控工具和方案,如下图所示。

fig:

docker ps/top/stats是Docker原生的命令行监控工具。除了命令行,Docker也提供了stats API,用户可以通过HTTP请求获取容器的状态信息。

sysdig、cAdvisor/Heapster和Weave Scope是其他开源的容器监控方案。

 

3.4 数据管理

容器经常会在不同的host之间迁移,如何保证持久化数据也能够动态迁移,是Rex-Ray这类数据管理工具提供的能力,如下图所示。

fig:

 

3.5 日志管理

日志为问题排查和事件管理提供了重要依据。日志工具有两类,如下图所示。

fig:

docker logs是Docker原生的日志工具。

而logspout对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后处理。

 

3.6安全性

对于年轻的容器,安全性一直是业界争论的焦点。OpenSCAP是一种容器安全工具,如下图所示。

fig:

OpenSCAP能够对容器镜像进行扫描,发现潜在的漏洞。

 

思维导图

fig:

标签:容器,image,基础知识,所示,Docker,runtime,docker
From: https://www.cnblogs.com/Wesuiliye/p/17289464.html

相关文章

  • 创建docker
    创建docker准备实验环境1.安装前准备Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可。 1.1查看当前的内核版本uname-r 1.2使用root权限更新yum包yum-yupdate这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了注意yum......
  • Docker 下 RedisCluster 分片集群搭建
    1.Cluster分片集群1.1Cluster集群的结构和作用redis哨兵模式虽然提供了redis⾼可⽤、高并发读的解决方案,但是在海量数据应用场景下,仍然存在海量数据存储问题和高并发写的问题。当只有⼀个Master对外提供服务时,如果数据量特别⼤,内存占⽤问题严重,数据的高并发写、数......
  • Docker 网络
    1.Docker网络1.1Docker网络模式使用Docker时,宿主机和容器内系统、容器和容器之间都需要网络连接,必须要考虑容器和宿主机、容器和容器之间的网络连接方式,因此了解docker的网络模式对正确使用docker非常重要。Docker启动后,它默认会创建三个网络,使用docker......
  • Docker
    Docker1Docker简介1.1什么是虚拟化​ 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新......
  • Docker
    env华为云HECSUbuntu22.04server64bit#安装sudoapt-getinstalldocker-cedocker-ce-clicontainerd.iodocker-buildx-plugindocker-compose-plugin#启动sudoservicedockerstart#测试sudodockerrunhello-world查版本dockerversion查信息:dockerin......
  • Docker 如何开发容器
    Docker基本使用Docker的核心价值在于虚拟化或者说环境隔离【通过虚拟化技术实现虚拟环境】,解决环境配置和部署的依赖问题实现解耦我对虚拟化的理解源自《OperatingSystems:ThreeEasyPieces》,推荐阅读容器技术相关历史推荐知乎上的这篇文章:容器技术的历史Docker基本概......
  • Docker 下 Redis 数据库的持久化
    1、Docker容器的数据卷Docker是将系统与运行的环境打包成容器来运行,当容器删除后,容器里的系统自然也就没有了。但是,在实际的项目中,希望Docker容器产生的数据能够持久化,同时容器之间也能够共享数据。Docker提供了数据卷技术来实现这些需求。数据卷就是目录或文件,存......
  • centos快速的安装和卸载docker
    在centos系统上快速安装docker-ce,废话不多说,直接上shell代码,适配与所有centos和ali-cloud系统: #安装依赖包yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2 #添加Docker软件包源,我们这里配置了阿里云的镜像源yum-config-manager......
  • 性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)
    前言在上文性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(实战篇)中我们介绍了常规部署流程,本文将在上文的基础上扩展Jenkins+Maven+Docker自动化部署我们的压测环境。关于DockerDocker在这里有什么用?Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到......
  • Docker
    1、Docker概念• Docker是一个开源的应用容器引擎• 诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为DockerInc)•Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。•容器是完全使用沙箱机制,......