containerd是一個高性能的容器(container)伺服系統(查看源碼),部分功能與Docker很像,至關於Docker Daemon模式和更新版的DockerD。git
containerd與你們熟知的Docker可謂相生相剋,最新發展出的關係以下圖所示。github
下面是containerd的官方介紹,原文:https://containerd.tools/redis
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.docker
Starting 1000 containers concurrently runs at 126-140 containers per second.shell
Containerd provides a daemon and a command line client to manage containers.api
Containerd is built on runC, the same container technology powering millions of Docker Engine installations.bash
Docker images can be run with containerd.socket
$ 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
The API for containerd is with GRPC over a unix socket located at the default location of /run/containerd/containerd.sock
.tcp
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.ide
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
$ sudo ctr containers ID PATH STATUS PID1 1 /containers/redis running 14063 19 /containers/redis running 14100
$ 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
$ 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
$ 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
$ ctr containers stats -h NAME: stats - get stats for running container USAGE: command stats [arguments...]
$ sudo ctr checkpoints redis NAME TCP UNIX SOCKETS SHELL test false false false test2 false false false
$ 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
$ sudo ctr events TYPE ID PID STATUS exit redis 24761 0
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