Docker学习(概论)

Docker简介

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的应用场景
  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
  • 简化程序: Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
  • 避免选择恐惧症: 如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
  • 节省开支: 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
Docker 引擎

Docker引擎由如下主要的组件构成: (它们共同负责容器的创建和运行)

  • Docker客户端(Docker Client)
  • Docker守护进程(Docker daemon)
  • containerd
  • runc
引擎架构图:

在这里插入图片描述

启动一个新容器的过程
  • 当使用Docker命令行工具执行如上命令时, Docker客户端会将其转换为合适的API格式, 并发送到正确的API端点。
  • API是在daemon中实现的。 这套功能丰富、 基于版本的REST API已经成为Docker的标志, 并且被行业接受成为事实上的容器API。 一旦daemon接收到创建新容器的命令, 它就会向containerd发出调用。daemon已经不再包含任何创建容器的代码了!
  • daemon使用一种CRUD风格的API, 通过gRPC与containerd进行通信。
  • 虽然名叫containerd, 但是它并不负责创建容器, 而是指挥runc去做。 containerd将Docker镜像转换为OCI bundle, 并让runc基于此创建一个新的容器。
  • 然后, runc与操作系统内核接口进行通信, 基于所有必要的工具(Namespace、CGroup等) 来创建容器。 容器进程作为runc的子进程启动, 启动完毕后, runc将会退出。
    在这里插入图片描述
- shim是实现无daemon的容器(用于将运行中的容器与daemon解耦, 以便进行daemon升级等操作) 不可或缺的工具。前面提到, containerd指挥runc来创建新容器。 事实上, 每次创建容器时它都会fork一个新的runc实例。 不过, 一旦容器创建完毕, 对应的runc进程就会退出。 因此, 即使运行上百个容器, 也无须保持上百个运行中的runc实例。一旦容器进程的父进程runc退出, 相关联的containerd-shim进程就会成为容器的父进程。 作为容器的父进程, shim的部分职责如下。
  • 保持所有STDIN和STDOUT流是开启状态, 从而当daemon重启的时候, 容器不会因为管道(pipe) 的关闭而终止。
  • 将容器的退出状态反馈给daemon。
- runc生来只有一个作用——创建容器, 这一点它非常拿手, 速度很快! 不过它是一个CLI包装器, 实质上就是一个独立的容器运行时工具。
- containerd主要任务是容器的生命周期管理——start | stop | pause | rm …
- daemon主要功能包括镜像管理,镜像构建,REST API,身份验证,安全,核心网络以及编排。
该模型的优点:将所有的用于启动、 管理容器的逻辑和代码从daemon中移除, 意味着容器运行时与Docker daemon是解耦的, 有时称之为“无守护进程的容器(daemonless container) ”, 如此, 对Docker daemon的维护和升级工作不会影响到运行中的容器。
Docker 架构
  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
  • Docker 容器通过 Docker 镜像来创建。
  • 容器与镜像的关系类似于面向对象编程中的对象与类。
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值