文档章节

高性能容器伺服器-containerd简介

openthings
 openthings
发布于 2016/12/12 08:43
字数 1078
阅读 101
收藏 3
点赞 0
评论 0

containerd是一个高性能的容器(container)伺服系统(查看源码),部分功能与Docker很像,相当于Docker Daemon模式和更新版的DockerD。

  • containerd采用并行启动技术,可以每秒启动上百个容器实例。containerd提供命令行和REST服务接口,里面对容器真正的管理是通过containerd-shim进程来完成
  • 与Docker Engine的一锅烩模式不同的是,containerd并不管理容器的镜像,主要支持OCI(https://www.opencontainers.org/)开放容器标准的镜像,通过runc来启动。
  • OCI镜像可以通过Docker镜像转换而来(参见:https://github.com/docker/containerd/blob/master/docs/bundle.md)。

containerd与大家熟知的Docker可谓相生相克,最新发展出的关系如下图所示。

  • Docker从1.11开始,已经支持containerd和runc来运行容器。在DockerD服务启动时自动启动了containerd作为后台进程服务(可以通过ps aux | grep docker查看)。
  • 更详细的中文介绍参考:http://dockone.io/article/1327 。

 

下面是containerd的官方介绍,原文:https://containerd.tools/

About containerd

Containerd is a daemon with an API and a command line client, to manage containers on one machine. It uses runC to run containers according to the OCI specification. Containerd has advanced features such as seccomp and user namespace support as well as checkpoint and restore for cloning and live migration of containers. The code can be found on Github. Containerd is currently available as an alpha release.

Built for Performance

Starting 1000 containers concurrently runs at 126-140 containers per second.

Easy to use

Containerd provides a daemon and a command line client to manage containers.

Battle Hardened

Containerd is built on runC, the same container technology powering millions of Docker Engine installations.

Compatible with Docker

Docker images can be run with containerd.

 

Getting Started

Daemon options

$ containerd -h

NAME:
   containerd - High performance container daemon

USAGE:
   containerd [global options] command [command options] [arguments...]

VERSION:
   0.0.4

AUTHOR(S): 
   @crosbymichael <crosbymichael@gmail.com> 

COMMANDS:
   help, h  Shows a list of commands or help for one command
   
GLOBAL OPTIONS:
   --id "deathstar"                 unique containerd id to identify the instance
   --debug                      enable debug output in the logs
   --state-dir "/run/containerd"            runtime state directory
   -c, --concurrency "10"               set the concurrency level for tasks
   --metrics-interval "1m0s"                interval for flushing metrics to the store
   --listen, -l "/run/containerd/containerd.sock"   Address on which GRPC API will listen
   --oom-notify                     enable oom notifications for containers
   --help, -h                       show help
   --version, -v                    print the version
   

GRPC API

The API for containerd is with GRPC over a unix socket located at the default location of /run/containerd/containerd.sock.

At this time please refer to the proto definition for the API methods and types.
There is a Go implementation and types checked into this repository but alternate language implementations can be created using the grpc and protoc toolchain.

containerd CLI

There is a default cli named ctr based on the GRPC api. This cli will allow you to create and manage containers run with containerd.

NAME:
   ctr - High performance container daemon controller

USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   0.0.4

AUTHOR(S): 
   @crosbymichael <crosbymichael@gmail.com> 

COMMANDS:
   checkpoints  list all checkpoints
   containers   interact with running containers
   events   receive events from the containerd daemon
   help, h  Shows a list of commands or help for one command
   
GLOBAL OPTIONS:
   --debug                  enable debug output in the logs
   --address "/run/containerd/containerd.sock"  address of GRPC API
   --help, -h                   show help
   --version, -v                print the version
   

Listing containers

$ sudo ctr containers
ID                  PATH                STATUS              PID1
1                   /containers/redis   running             14063
19                  /containers/redis   running             14100

Starting a container

$ ctr containers start -h
NAME:
   start - start a container

USAGE:
   command start [command options] [arguments...]

OPTIONS:
   --checkpoint, -c     checkpoint to start the container from
   --attach, -a         connect to the stdio of the container

$ sudo ctr containers start redis /containers/redis

Kill a container’s process

$ ctr containers kill -h 
NAME:
   kill - send a signal to a container or it's processes

USAGE:
   command kill [command options] [arguments...]

OPTIONS:
   --pid, -p "0"        pid of the process to signal within the container
   --signal, -s "15"    signal to send to the container

Exec another process into a container

$ ctr containers exec -h 
NAME:
   exec - exec another process in an existing container

USAGE:
   command exec [command options] [arguments...]

OPTIONS:
   --id                                         container id to add the process to
   --attach, -a                                 connect to the stdio of the container
   --cwd                                        current working directory for the process
   --tty, -t                                    create a terminal for the process
   --env, -e [--env option --env option]        environment variables for the process
   --uid, -u "0"                                user id of the user for the process
   --gid, -g "0"                                group id of the user for the process
   

Stats for a container

$ ctr containers stats -h 
NAME:
   stats - get stats for running container

USAGE:
  command stats [arguments...]

List checkpoints

$ sudo ctr checkpoints redis
NAME                TCP                 UNIX SOCKETS        SHELL
test                false               false               false
test2               false               false               false

Create a new checkpoint

$ ctr checkpoints create -h
NAME:
   create - create a new checkpoint for the container

USAGE:
   command create [command options] [arguments...]

OPTIONS:
   --tcp                persist open tcp connections
   --unix-sockets       perist unix sockets
   --exit               exit the container after the checkpoint completes successfully
   --shell              checkpoint shell jobs
   

Get events

$ sudo ctr events
TYPE                ID                  PID                 STATUS
exit                redis               24761               0

Performance

Starting 1000 containers concurrently runs at 126-140 containers per second.

Overall start times:

[containerd] 2015/12/04 15:00:54   count:        1000
[containerd] 2015/12/04 14:59:54   min:          23ms
[containerd] 2015/12/04 14:59:54   max:         355ms
[containerd] 2015/12/04 14:59:54   mean:         78ms
[containerd] 2015/12/04 14:59:54   stddev:       34ms
[containerd] 2015/12/04 14:59:54   median:       73ms
[containerd] 2015/12/04 14:59:54   75%:          91ms
[containerd] 2015/12/04 14:59:54   95%:         123ms
[containerd] 2015/12/04 14:59:54   99%:         287ms
[containerd] 2015/12/04 14:59:54   99.9%:       355ms

© 著作权归作者所有

共有 人打赏支持
openthings
粉丝 240
博文 871
码字总数 454086
作品 1
东城
架构师
Docker发布 LinuxKit 和 Moby 开源项目

  【IT168 评论】在一年一度的DockerCon大会上,来自全球各地的 5000 名参与者,济济一堂,于奥斯丁会议中心,共同见证 Docker 的发展,探讨容器技术的落地。   Docker创办人暨技术长Sol...

it168网站 ⋅ 2017/04/20 ⋅ 0

Containerd给Kubernetes带来了更多容器运行时的可选方案

容器运行时是在某个节点上执行容器并且管理容器镜像的软件。如今,最广为人知的容器运行时是Docker,但是,生态系统内也有一些别的容器运行时,比如rkt,containerd和Ixd。Docker是目前为止在...

Docker ⋅ 02/20 ⋅ 0

Kubernetes Containerd集成进入GA阶段

在之前的博客Containerd给Kubernetes带来更多的容器运行选项[1],我们介绍了Kubernetes containerd integration的内部测试版。经历了6个月的开发,正式版推出了!现在,你可以在生产环境的K...

m2l0zgssvc7r69efdtj ⋅ 05/29 ⋅ 0

containerd迎1.0通用版本,系统部署超百万!

  【IT168 技术】今天,我们很高兴地宣布 containerd,一个构建容器解决方案的行业标准运行时,已经达到了1.0里程碑。如今containerd已经被部署数以百万计的系统中,成为Docker平台上最广泛...

it168网站 ⋅ 2017/12/06 ⋅ 0

控制 runC 的守护进程--Containerd

Containerd 是一个控制 runC 的守护进程,主要是为了性能和密度。Containerd 提供一个命令行客户端和 API,在一个机器上管理容器。Containerd 使用 runC 来根据 OCI 规范运行容器 。 Contai...

叶秀兰 ⋅ 2015/12/18 ⋅ 0

Docker Engine 核心组件 containerd 开源

12月15日 , Docker 宣布将 Docker Engine 核心组件 containerd 开源,并捐赠到一个新的开源社区(https://containerd.io/)独立发展和运营。阿里云,AWS, Google,IBM和Microsoft 作为初始成...

两味真火 ⋅ 2016/12/16 ⋅ 2

拥有数百万全球用户的行业标准运行时方案Containerd迎来1.0通用版本

今天,我们兴奋地宣布,containerd(音为Con-Tay-Ner-D)作为行业标准容器解决方案构建运行时,已经正式迎来1.0版本。从去年12月Docker公司宣布推出这套核心运行时,到今年3月其CNCF接手此项...

m2l0zgssvc7r69efdtj ⋅ 2017/12/06 ⋅ 0

Containerd —— 基于 runC 的守护进程

Containerd 是一个控制 runC 的守护进程,主要是为了性能和密度。Containerd 提供一个命令行客户端和 API,在一个机器上管理容器。Containerd 使用 runC 来根据 OCI 规范运行容器 。...

oschina ⋅ 2015/12/18 ⋅ 0

Containerd 1.0.0 发布,Docker Engine 的核心组件

在经历 7 个 alpha 版、4 个 beta 版以及 1 个 RC 版后,containerd 1.0.0 正式发布了。1.0.0 改进了稳定性和 API,以及一些增强。containerd 为管理正在运行的容器提供守护进程,是一个工业...

purple_grape ⋅ 2017/12/07 ⋅ 0

Docker 将 containerd 项目捐赠给云原生计算基金会

Docker 宣布将 containerd 项目捐赠给云原生计算基金会(Cloud Native Computing Foundation,CNCF)。 containerd 是 Docker 在2016年12月从 Docker Engine 中分离并单独集成且开源的项目,...

王练 ⋅ 2017/03/17 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 42分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部