前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DCOS番外篇之Docker概念快递

DCOS番外篇之Docker概念快递

作者头像
zouyee
发布2021-02-01 14:45:42
3040
发布2021-02-01 14:45:42
举报
文章被收录于专栏:Kubernetes GO

苏研

DCOS

早前推出DCOS番外篇Docker系列,主要介绍docker相关技术,请阅读新的文章:DCOS番外篇之Dcoker概念快递

OCI简介

OCI在2015年6月宣布成立,旨在围绕容器格式和运行时制定一个开放的工业化标准。OCI的目标是为了避免容器的生态分裂为“小生态王国”,确保一个引擎上构建的容器可以运行在其他引擎之上。这是实现容器可移植性至关重要的部分。只要Docker是唯一的运行时,它就是事实上的行业标准。但是随着可用(和采纳)和其他引擎,有必要从技术的角度上定义“什么是容器”,以便不同实现上可以达成最终的一致。

runC简介

runC是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,并且这一件事要做好。如果你了解过Docker引擎早期的历史,你应该知道当时启动和管理一个容器需要使用LXC工具集,然后在使用 libcontainer 。 libcontainer 就是使用类似 cgroup 和 namespace 一样的Linux内核设备接口编写的一小段代码,它是容器的基本构建模块。为了是过程更加简单,runC基本上是一个小命令行工具且它可以不用通过Docker引擎,直接就可以使用容器。这是一个独立的二进制文件,使用OCI容器就可以运行它 。

runc安装:

yum install -y libseccomp-devel

mkdir -p $GOPATH/src/github.com/opencontainers

cd $GOPATH/src/github.com/opencontainers

git clone https://github.com/opencontainers/runc

cd runc & make & sudo make install

运行busybox:

docker pull busybox

mkdir rootfs

docker exports $(docker create busybox)|tar -C rootfs -xvf -

runc spec .

runc start test

containerd简介

containerd 是一个简单的守护进程,它可以使用runC管理容器,使用gRPC暴露容器的其他功能。相比较Docker引擎,使用 gRPC ,containerd暴露出针对容器的 增删改查的接口 ,然而Docker引擎只是使用 full-blown HTTP API接口对Images,Volumes,network,builds等暴露出这些方法 。docker-containerd-ctr在1.11貌似有BUG,具体请移步issue21702issue22010

runV简介

Hyper 的 runV 是OCI 官方的基于虚拟化技术的容器运行时引擎实现,而另一个基于容器的实现就是 Docker 的 runC。

安装runV:

docker pull busybox

mkdir rootfs

docker export (docker create busybox)|tar -C rootfs -xvf -

runv spec .

runv kernel=/var/lib/hyper/kernel --initrd=/var/lib/hyper/hyper-initrd.img start test

启动runV containerd:

runv-containerd kernel=/var/lib/hyper/kernel --initrd=/var/lib/hyper/hyper-initrd.img

执行ctr命令:

ctr --address=unix:///run/runv-containerd/containerd.sock containers

启动容器:

ctr --address=unix:///run/runv-containerd/containerd.sock containers start test ./busybox

查看结果:

$ctr --address=unix:///run/runv-containerd/containerd.sock containers

关系

正如上面提到的,Docker引擎可以在runC和containerd上构建。1.11之前,引擎只用于Volums,networks,containerd等。

现在它所有的工作分为四个部分:引擎,containerd,runC,containerd-shim,后者位于runC与containerd之间的部分。

Docker引擎仍然管理者images,然后移交给containerd运行,containerd再使用runC运行容器。

containerd只处理containers管理容器的开始,停止,暂停和销毁。由于容器运行时是孤立的引擎,引擎

最终能够启动和升级而无需重新启动容器。还有一些其他的好处是:

当linux的代码被删除和其他容器运行时的这些改变时能够保持一种统一的Docker UI命令(表面上看一切都是一样的)

由于现在有四个组件,以前只是一个单独的“docker”二进制文件,现在查分各自功能为四个文件: docker , docker-containerd ,

docker-containerd-shim ,和 docker-runc 。如果你在主机上,就可以通过 ps as grep docker 获取正在运行的进程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DCOS 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档