Docker 1.11 增强功能:直接在runC和containerd构建引擎

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
简介: 本文讲的是Docker 1.11 增强功能:直接在runC和containerd构建引擎,【编者的话】Docker的更新都会伴随着周围工具产品的升级,这次也不例外。1.11直接允许使用runC和containerd构建引擎,runC和containerd也跟随升级,这次还升级了Compose和Swa...
本文讲的是Docker 1.11 增强功能:直接在runC和containerd构建引擎 【编者的话】Docker的更新都会伴随着周围工具产品的升级,这次也不例外。1.11直接允许使用runC和containerd构建引擎,runC和containerd也跟随升级,这次还升级了Compose和Swarm,跟小编来看下大致的介绍吧

最近Docker对整个平台发布了新的版本,Docker引擎升级至 1.11版本 ,Swarm升级至1.2版本,Compose和Machine也分别升级至1.7和0.7版本。这次升级也开始支持Mac和Windows 10 Bete版的操作系统。上述还只是这个升级的“冰山一角”,不过对于用户来说还算适度更新吧。底层的引擎经过大规模的重构保证了首个兼容 Open Container Initiative(OCI) 的运行时。更具体的说,现在用户可以直接在 runC containerd 上构建引擎了。
docker.png

OCI、runC、containerd……这是怎么了?

Open Container Initiative是什么?

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

什么是runC?

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

什么是Containerd?

Containerd是一个简单的守护进程,它可以使用runC管理容器,使用gRPC暴露容器的其他功能。相比较Docker引擎,使用 gRPC ,containerd暴露出针对容器的 增删改查的接口 ,然而Docker引擎只是使用 full-blown HTTP  API接口对Images、Volumes、network、builds等暴露出这些方法。获得更过的细节解释,请参考 Michael Crosby 博客

它们之间的关联?

正如上面提到的,Docker引擎可以在runC和containerd上构建。1.11之前,引擎只用于Volums、networks、containerd等。现在它所有的工作分为四个部分:引擎、containerd、runC、containerd-shim,后者位于runC与containerd之间的部分。
runc.png

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

Containerd只处理containers管理容器的开始,停止,暂停和销毁。由于容器运行时是孤立的引擎,引擎最终能够启动和升级而无需重新启动容器。还有一些其他的好处是:当linux的代码被删除和其他容器运行时的这些改变时能够保持一种统一的Docker UI命令(表面上看一切都是一样的)。

由于现在有四个组件,以前只是一个单独的“docker”二进制文件,现在查分各自功能为四个文件: docker , docker-containerd ,
docker-containerd-shim ,和 docker-runc 。如果你在主机上,就可以通过 ps as grep docker 获取正在运行的进程。下面是Docker三周岁 vote app 的例子正在运行中,如果想在此机器上获取所有运行的docker进程,你能看到前面提到的四个二进制进程。
1.png

2.png

如果在Mac或者Windows上,你可以运行 docker run -it — pid host -v /:/hostfs — net host alpine chroot /hostfs  和  ps ax | grep docker 获得容器中正在运行的进程。-pid host 获取容器用户的主机PID命名空间,类似的— net host参数获取主机UTS的命名空间。更多的信息可以参考引 擎使用手册 。查看 /var/run/docker/libcontainerd ,你能查到所有正在运行的容器和containerd sock 文件。
3.png

其他更新

Networking

Networking 在新版本中得到了改善,1.10版本的引擎新增了DNS服务器,通过IP地址允许每一个容器可以定位到容器名字和网络别名。当众多容器拥有相同的网络别名,DNS服务器将会返回一个状态记录。在1.11版本的引擎中,DNS服务器按照随机的顺序返回所有的记录。这允许您使用DNS轮循作为基本的负载平衡和故障转移机制。如果多次ping网络别名,你会得到不同的结果。不管是均衡还是不均衡,你都会在一个容器中得到所有的随机变化结果。请记住:容器名称的解析只能在Custom networks(使用docker network create创建的networks)上工作。请看下面关于创建network的例子,使用两个Nginx的容器,运行在同一个别名的网络上。
4.png

此处之外,networks(还有volumes)现在可以有影像似的标签了。

Compose 1.7

新版本Compose有好几个改善的地方包括不在通过命令行传递参数读取,而是直接读取环境变量中的参数。

接下来,秉承 docker-compose up ,在可能和依赖秩序上,compose仍旧受尊敬。

例如,如果你在redis中查看一个Docker compose文件,你可以在database层次或者前端,一旦redis开始启动,他们就可以同时进行。

另外还有几处变化,新版本增加了 docker-compose 命令。还有两个新的命令新增: docker-compose up — build  和 docker-compose exec 。用户经常运行 docker-compose build 然后运行 docker-compose up ,在编辑Dockerfile时,增加了跟build类似的up参数。另外一个exec命令也有相同的功能。除此之外, docker-compose logs 模仿 docker logs 命令不再列举整个容器的日志而且流处理日志,而是只会展示日志。你可以使用  docker-compose logs -f 命令像 docker logs 一样查看流式日志。 docker-compose logs 目前可以检测到你什么时间添加新的容器到应用程序,而且使用 docker-compose logs -f 自动添加它们的日志到流中。

Swarm 1.2

Swarm1.1新增了容器调度的试验支持,在1.2中不再是试验版了。在swarm1.1之前,如果使用swarm启动10台服务器,开始100个前端网页进程,其中一个服务中断掉,什么也不会发生。现在容器能针对运行失败的节点自动重启。这可以通过设置一个环境变量或者标签容器,这样容器启动时就可以被监控到。
`docker run -d -e reschedule:on-node-failure <image>`
`docker run -d -l ‘com.docker.swarm.reschedule-policy=[“on-node-failure”]’ <image>`

Swarm管理员可以设置追踪到每一个节点,它会持续向每一个节点检测心跳包,而且检测到反应迟钝的请求就会尝试重启这个节点。如果这个节点运行容器接收到重新安排的策略,这个容器将会重新安排到其他地方。Swarm的状态可以通过查询日志文件获取,可以有很多管理员。

Registry

在以前,如果你在自己的registry删除镜像,结果是逻辑删除这个镜像。但是这个镜像的数据文件还在。数据文件失去引用而已。如果考虑到程序,当你删除一个变量时,并不能立即删除这个数据。这里有一个内存的管理,我们后续可以手动删除或者垃圾回收机制自动处理。现在这些全部都有Registry做了。

Docker for Mac and Windows

上个月,Docker放出一个测试版本,宣布开始支持Mac和Windows。Mac和Windows上的Docker不用做任何的更改,但是提高了用户体验度。它们提供一个在linux上运行原生Docker非常相似的体验,除非你想运行多个主机环境,这都不需要借助virtualBox。我在Mac上运行了Docker,然后写了这边博客, “Say Hello to Docker for Mac”

自从Docker 1.1发布,现在Docker引入很多新的功能。Mac版本的Docker作为Beta9,localhost 用来做端口转发,而不是使用有本地Linux感觉的docker.local。Beta 10版本支持令牌验证通道HTTPS。Beta 11版本更新了内核和Compose。通过发布日志可以看到所有的新特性,更新还有一些关于Mac和Windows众所周知的问题。

更多关于Docker1.1

原文链接:Docker 1.11 et plus: Engine is now built on runC and containerd(翻译:ylzhang)

原文发布时间为:2016-05-20
本文作者:ylzhang
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker 1.11 增强功能:直接在runC和containerd构建引擎
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
|
2月前
|
存储 Kubernetes C++
Docker、containerd、CRI-O 和 runc 之间的区别
通过理解这些组件的角色和功能,可以更好地选择和配置容器环境,以满足特定的需求和应用场景。
105 25
|
4月前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
352 76
|
4月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
101 9
|
5月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
163 61
|
5月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
5月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
5月前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
5月前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
114 0
|
5月前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
362 2