docker:认识docker

author author     2023-01-03     340

关键词:

Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup,Namespace,Union FS等技术实现,对应用程序进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。是一种系统级的虚拟化技术。
Docker早起版本实现是基于LXC,并进一步对其封装,包括文件系统、网络互联、镜像管理等方面,极大简化了容器管理。从0.7版本以后开始去除LXC,转为自行研发的libcontainer,从1.1开始,进一步演进为使用runc和containerd。

2014年4月9日,发布第一个正式版本v1.0。
2017年2月8日,发布v1.13.1
2017年3月1日,发布v17.03-CE版本,从此版本开始分为企业版和社区版。

从下图可以看出从2106年Docker技术引起爆发式关注。
技术分享图片

1.1 Docker思想

技术分享图片

Docker的思想源于集装箱,集装箱解决了什么问题呢?在早期运输货物需要不同分类的船,例如运输水果的船,运输生活用品的船,有了集装箱后,在大船上,可以把货物分类到不同的集装箱中,水果一个集装箱,生活用品一个集装箱,它们之间互不影响,只要把货物封装好集装箱里,就可以把不同类的货物一起运走。
通过Docker logo也可以看出所以然来,Docker就像大船,集装箱就是容器。
一条鲸鱼拖着若干个集装箱的经典形象已经深入人心。
技术分享图片

Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Docker Engine上。使用沙箱机制运行程序,程序之间相互隔离。

随着Docker的火热,docker、oci、runc、containerd等等名词也逐渐传播开来。这么多的名词,也容易让人混淆,下面对相关名词和其之间的联系进行一下梳理和总结,方便大家更好地理解。

1.2 OCI

在2015年,由Docker、Redhat、Google、IBM、Microsoft等厂商共同成立OCI(Open Container Initiative)的组织,其目的围绕容器技术指定开放标准和规范。
在2017年7月,OCI v1.0正式发布,其中包含两个规范:容器运行时(runtime)和镜像规范(image),有了这两个规范,不同组织和厂商开发的容器就能够在不同的Container引擎上运行。这样就保证了容器的可移植性和互操作性。
OCI下一步关键工作是提供认证,以验证开发者的产品和项目是否符合规范。

1.3 Docker架构概览

技术分享图片

Docker daemon

Docker采用C/S架构,Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建容器、管理镜像。
为了兼容OCI标准,Docker1.1之后也做了架构调整,Docker容器运行已经不是简单的通过Docker daemon来启动,而是集成了containerd、runc等多个组件。
如下图:

技术分享图片
Containerd:是一个简单的守护进程,管理shim,向Docker Engine提供接口。使用UnixSocket通信,协议是grpc。
Shim:管理一个容器
runC:运行一个容器。是基于OCI标准的一个容器技术实现,是一个可以直接创建和运行容器的工具。runc直接与容器所依赖的cgroups/kernel等进行交互,负责容器所需环境。
工作流程:
dockerd拿到镜像后,通过grpc通知docker-containerd进程启动容器,docker-containerd收到dockerd启动容器请求之后,再启动docker-containerd-shim进程,docker-containerd-shim进程启动后,按照runtime准备运行环境,再启动docker-runc进程。docker-runc进程打开容器的配置文件,找到rootfs位置,根据配置文件启动相应进程。

Containers

Container中文意思是集装箱,很多人叫容器,其实延续了原理的Linux container,不管叫哪个,含义是一样的。我觉得叫容器比较合适。容器本质上是Linux系统上的一个进程,这个父进程可能会有多个子进程组成,这个一组进程受资源限制,与其他组进程之间隔离。这种运行时的状态成为容器。

Images

Docker的流行,很大因素是取决于有数十万计免费的应用镜像,使得用户或者开发者很容器找到可用的镜像。
镜像不是一个单一的文件,而是有多层构成。可以理解为镜像是创建容器的模板,一个镜像可以创建N个容器。镜像通常封装了一个应用的基础环境。
在未来数月,Amazon Container Registry、Google Container Registry、Docker Hub 及 Quay 等 Container 储存库,也都将支援 OCI 映像档标准。

Docker Client

通常说的Docker,指的是Docker Engine,是以daemon模式运行。而Docker CLI是客户端,用于管理Docker Engine,例如镜像管理、容器管理等操作。

Registry

容器是通过镜像创建的,大量的镜像需要找一个地方存放,这就需要Registry(注册中心)。
企业通常自建私有仓库,也可以使用公共仓库,例如:

  • Docker Hub
    地址:https://hub.docker.com
    Docker官方提供的公共托管Registry,上面有很多现成的镜像,Docker CLI默认就是从这个仓库下载的。
  • Quay.io
    地址:https://quay.io
    另一个公共托管的Registry,提供与Docker Hub类似的服务。

技术分享图片

docker下网络的认识与实验(代码片段)

Docker下网络的认识与实验一、简述Docker的网络二、docker四大网络类型+自定义网络三、docker网络模式详细说明1、container模式2、none模式3、Host模式4、bridge模式5、自定义网络a、Docker自定义网络创建步骤一、简述Docker的网络Docker... 查看详情

docker:认识docker

Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup,Namespace,UnionFS等技术实现,对应用程序进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。是一种系统级的虚拟化技术。Dock... 查看详情

菜鸟入门docker—认识docker

你好!Docker。欢迎来到Docker。Docker是GitHub上最活跃的项目之一,大受开源爱好者追捧,号称要成为所有云应用的基础。各大公司的IT从业人员正在如火如荼的进行应用容器化改造。那么Docker到底是什么?是干嘛的&#... 查看详情

认识docker

一、认识DockerDocker是一个开源的应用容器引擎,可以让开发者打包应用及依赖环境到一个可移植的容器中,然后发布到任何运行有Docker环境的服务器上;集版本控制、克隆继承、环境隔离等特性于一身;提出一整套软件构建、部... 查看详情

docker系列:全面认识docker和基本指令

原文:【Docker系列】:全面认识Docker和基本指令Docker逐渐成为虚拟化技术的佼佼者,Docker技术也是架构师的必备技能。什么是DockerDocker是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotCloud公司,开发者可... 查看详情

docker系列认识elk,docker安装elk和ik分词器

1.ELK简介ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方... 查看详情

黑魔法-认识docker(代码片段)

🚀作者简介主页:水香木鱼的博客专栏:docker能量:🔋容量已消耗1%,自动充电中…笺言:用博客记录每一次成长,书写五彩人生。📒技术聊斋(一)概念Docker是一个开源的应用容器引... 查看详情

docker系列:全面认识docker和基本指令

Docker逐渐成为虚拟化技术的佼佼者,Docker技术也是架构师的必备技能。什么是DockerDocker是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotCloud公司,开发者可以打包应用到一个轻量级、可移植的容器中,... 查看详情

认识大明星——轻量级容器docker知识树点亮

docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性。 传统虚拟化架构: docker虚拟化架构:  可以看出,docker是没有GuestOS一层的,它属于宿主机上面... 查看详情

docker学习笔记

基本概念    Docker:开源的容器虚拟化平台,虚拟机能做的Docker都能做,而且速度更快。    Docker的核心思想有三点:集装箱,将一个个程序(应用)看作集装箱,在网络间进行搬运,Docker中的集装箱也就是镜像标准化... 查看详情

初始docker

docker现在是比较火的一门技术,作为一名运维从业者对docker的学习是自身知识的储备,也是自我能力的一种提升。现在就来认识一下docker吧。系统版本[[email protected]~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxServerrelease7.4(Maipo)内核:[... 查看详情

docker-基础使用:安装,启用,基本命令,数据卷

目录:一、认识Docker二、Docker架构三、安装Docker四、启用Docker五、Docker的基本命令六、Docker数据卷七、Docker命令小结(仅看命令可跳到此处)一、认识Docker1、Docker解决依赖兼容问题①将应用的Libs(函数库)、Deps(依赖)、配置... 查看详情

docker-1初识docker

五分钟认识docker什么是docker?把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(ApplicationContainer)。 为啥要... 查看详情

docker进阶学习(代码片段)

...、面试笔试题目录虚拟机和容器虚拟机和容器的区别认识Docker什么是DockerDocker的优点Docker的应用场景Docker核心Docker镜像Docker容器Docker仓库扩展问题Docker为什么快?安装D 查看详情

菜鸟入门docker—练习使用docker(代码片段)

前面我们大致搞清楚了docker的形态、基本构成,使用的基本流程。接下来我们需要练个手,在实际使用中体会Docker,使我们对它的认识更全面。  一般在实际项目应用中都是在Linux系统上部署Docker的,所以我们在l... 查看详情

云原生|docker篇程序猿,千万别说你不知道docker

...?​​​​1.5容器和虚拟机的区别​​​​二、认识一下Docker(面向百度学习)​​​​2.1docker的由来​​​​2.2什么是docker​​​​2.3docker的思想​​​​2.4为什么用docker​​​​2.5docker能干什么?​​​​2.6do 查看详情

结合docker搭建tomcat集群

参考技术A系统环境:Centos7.6最近研究学习了下Docker,借此机会用docker来搭建实现了下tomcat集群,以此加深对docker的认识。以此文记录相关的步骤细节及心得。提前创建相应的日志文件目录和配置文件目录,用于挂载到相应的容... 查看详情

docker介绍

Docker的基本概念: 镜像(Image)镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配... 查看详情