GVKun编程网logo

可以像 Docker 一样方便的使用 Containerd 吗?(containerd替代docker)

15

本文将分享可以像Docker一样方便的使用Containerd吗?的详细内容,并且还将对containerd替代docker进行详尽解释,此外,我们还将为大家带来关于CentOS8安装docker报错

本文将分享可以像 Docker 一样方便的使用 Containerd 吗?的详细内容,并且还将对containerd替代docker进行详尽解释,此外,我们还将为大家带来关于CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3、Containerd 1.0.0 发布,Docker Engine 的核心组件、containerd与docker的区别是什么、Docker - 命令 - docker container的相关知识,希望对你有所帮助。

本文目录一览:

可以像 Docker 一样方便的使用 Containerd 吗?(containerd替代docker)

可以像 Docker 一样方便的使用 Containerd 吗?(containerd替代docker)

前面我们介绍了可以使用 ctr 操作管理 containerd 镜像容器,但是大家都习惯了使用 docker cli,ctr 使用起来可能还是不太顺手,为了能够让大家更好的转到 containerd 上面来,社区提供了一个新的命令行工具:nerdctl(https://github.com/containerd/nerdctl)。nerdctl 是一个与 docker cli 风格兼容的 containerd 客户端工具,而且直接兼容 docker compose 的语法的,这就大大提高了直接将 containerd 作为本地开发、测试或者单机容器部署使用的效率。

安装

同样直接在 GitHub Release 页面下载对应的压缩包解压到 PATH 路径下即可:

# 如果没有安装 containerd,则可以下载 nerdctl-full-<VERSION>-linux-amd64.tar.gz 包进行安装
➜  ~ wget https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
# 如果有限制,也可以替换成下面的 URL 加速下载
# wget https://download.fastgit.org/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
➜  ~ mkdir -p /usr/local/containerd/bin/ && tar -zxvf nerdctl-0.11.0-linux-amd64.tar.gz nerdctl && mv nerdctl /usr/local/containerd/bin/
➜  ~ ln -s /usr/local/containerd/bin/nerdctl /usr/local/bin/nerdctl
➜  ~ nerdctl version
Client:
 Version:       v0.11.0
 Git commit:    c802f934791f83dacf20a041cd1c865f8fac954e

Server:
 containerd:
  Version:      v1.5.5
  Revision:     72cec4be58a9eb6b2910f5d10f1c01ca47d231c0

安装完成后接下来学习下 nerdctl 命令行工具的使用。

命令

Run&Exec

nerdctl run

和 docker run 类似可以使用 nerdctl run 命令运行容器,例如:

➜  ~ nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:alpine
docker.io/library/nginx:alpine:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:bead42240255ae1485653a956ef41c9e458eb077fcb6dc664cbc3aa9701a05ce:    done           |++++++++++++++++++++++++++++++++++++++| manifest-sha256:ce6ca11a3fa7e0e6b44813901e3289212fc2f327ee8b1366176666e8fb470f24: done           |++++++++++++++++++++++++++++++++++++++| config-sha256:7ce0143dee376bfd2937b499a46fb110bda3c629c195b84b1cf6e19be1a9e23b:   done           |++++++++++++++++++++++++++++++++++++++| elapsed: 5.3 s                                                                    total:  3.1 Ki (606.0 B/s)                                       6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8

可选的参数使用和 docker run 基本一致,比如 -i-t--cpus--memory 等选项,可以使用 nerdctl run --help 获取可使用的命令选项:

➜  ~ nerdctl run --help
NAME:
   nerdctl run - Run a command in a new container

USAGE:
   nerdctl run [command options] [arguments...]

OPTIONS:
   --help                        show help (defaultfalse)
   --tty, -t                     (Currently -t needs to correspond to -i) (defaultfalse)
   --interactive, -i             Keep STDIN open even if not attached (defaultfalse)
   --detach, -d                  Run container in background and print container ID (defaultfalse)
   --restart value               Restart policy to apply when a container exits (implemented values: "no"|"always") (default"no")
   --rm                          Automatically remove the container when it exits (defaultfalse)
   --pull value                  Pull image before running ("always"|"missing"|"never") (default"missing")
   --network value, --net value  Connect a container to a network ("bridge"|"host"|"none") (default"bridge")
   --dns value                   Set custom DNS servers (default"8.8.8.8""1.1.1.1")
   --publish value, -p value     Publish a container''s port(s) to the host
   --hostname value, -h value    Container host name
   --cpus value                  Number of CPUs (default0)
   --memory value, -m value      Memory limit
   --pid value                   PID namespace to use
   --pids-limit value            Tune container pids limit (set -1 for unlimited) (default-1)
   --cgroupns value              Cgroup namespace to use, the default depends on the cgroup version ("host"|"private") (default"host")
   --cpuset-cpus value           CPUs in which to allow execution (0-30,1)
   --cpu-shares value            CPU shares (relative weight) (default0)
   --device value                Add a host device to the container
   --user value, -u value        Username or UID (format: <name|uid>[:<group|gid>])
   --security-opt value          Security options
   --cap-add value               Add Linux capabilities
   --cap-drop value              Drop Linux capabilities
   --privileged                  Give extended privileges to this container (defaultfalse)
   --runtime value               Runtime to use for this container, e.g. "crun", or "io.containerd.runsc.v1" (default"io.containerd.runc.v2")
   --sysctl value                Sysctl options
   --gpus value                  GPU devices to add to the container (''all'' to pass all GPUs)
   --volume value, -v value      Bind mount a volume
   --read-only                   Mount the container''s root filesystem as read only (defaultfalse)
   --rootfs                      The first argument is not an image but the rootfs to the exploded container (defaultfalse)
   --entrypoint value            Overwrite the default ENTRYPOINT of the image
   --workdir value, -w value     Working directory inside the container
   --env value, -e value         Set environment variables
   --env-file value              Set environment variables from file
   --name value                  Assign a name to the container
   --label value, -l value       Set meta data on a container
   --label-file value            Read in a line delimited file of labels
   --cidfile value               Write the container ID to the file
   --shm-size value              Size of /dev/shm

nerdctl exec

同样也可以使用 exec 命令执行容器相关命令,例如:

➜  ~ nerdctl exec -it nginx /bin/sh
# date
Thu Aug 19 06:43:19 UTC 2021
/ #

容器管理

nerdctl ps:列出容器

使用 nerdctl ps 命令可以列出所有容器。

  ~ nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                 NAMES
6e489777d2f7    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    10 minutes ago    Up        0.0.0.0:80->80/tcp    nginx

同样可以使用 -a 选项显示所有的容器列表,默认只显示正在运行的容器,不过需要注意的是 nerdctl ps 命令并没有实现 docker ps 下面的 --filter--format--last--size 等选项。

nerdctl inspect:获取容器的详细信息。

➜  ~ nerdctl inspect nginx
[
    {
        "Id""6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8",
        "Created""2021-08-19T06:35:46.403464674Z",
        "Path""/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status""running",
            "Running"true,
            "Paused"false,
            "Pid"2002,
            "ExitCode"0,
            "FinishedAt""0001-01-01T00:00:00Z"
        },
        "Image""docker.io/library/nginx:alpine",
        "ResolvConfPath""/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8/resolv.conf",
        "LogPath""/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8-json.log",
        "Name""nginx",
        "Driver""overlayfs",
        "Platform""linux",
        "AppArmorProfile""nerdctl-default",
        "NetworkSettings": {
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp""0.0.0.0",
                        "HostPort""80"
                    }
                ]
            },
            "GlobalIPv6Address""",
            "GlobalIPv6PrefixLen"0,
            "IPAddress""10.4.0.3",
            "IPPrefixLen"24,
            "MacAddress""f2:b1:8e:a2:fe:18",
            "Networks": {
                "unknown-eth0": {
                    "IPAddress""10.4.0.3",
                    "IPPrefixLen"24,
                    "GlobalIPv6Address""",
                    "GlobalIPv6PrefixLen"0,
                    "MacAddress""f2:b1:8e:a2:fe:18"
                }
            }
        }
    }
]

可以看到显示结果和 docker inspect 也基本一致的。

nerdctl logs:获取容器日志

查看容器日志是我们平时经常会使用到的一个功能,同样我们可以使用 nerdctl logs 来获取日志数据:

➜  ~ nerdctl logs -f nginx
......
2021/08/19 06:35:46 [notice] 1#1start worker processes
2021/08/19 06:35:46 [notice] 1#1start worker process 32
2021/08/19 06:35:46 [notice] 1#1start worker process 33

同样支持 -f-t-n--since--until 这些选项。

nerdctl stop:停止容器

➜  ~ nerdctl stop nginx
nginx
➜  ~ nerdctl ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES
➜  ~ nerdctl ps -a
CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                 NAMES
6e489777d2f7    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    20 minutes ago    Up        0.0.0.0:80->80/tcp    nginx

nerdctl rm:删除容器

➜  ~ nerdctl rm nginx
You cannot remove a running container f4ac170235595f28bf962bad68aa81b20fc83b741751e7f3355bd77d8016462d. Stop the container before attempting removal or force remove
➜  ~ nerdctl rm -f ginx
nginx
➜  ~ nerdctl ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

要强制删除同样可以使用 -f 或 --force 选项来操作。

镜像管理

nerdctl images:镜像列表

  ~ nerdctl images
REPOSITORY    TAG       IMAGE ID        CREATED           SIZE
alpine        latest    eb3e4e175ba6    6 days ago        5.9 MiB
nginx         alpine    bead42240255    29 minutes ago    16.0 KiB

也需要注意的是没有实现 docker images 的一些选项,比如 --all--digests--filter--format

nerdctl pull:拉取镜像

➜  ~ nerdctl image rm busybox
Untaggeddocker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
Deletedsha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373
docker.io/library/busybox:latest:                                                 resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60:    done           |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:dca71257cd2e72840a21f0323234bb2e33fea6d949fa0f21c5102146f583486bdone           |++++++++++++++++++++++++++++++++++++++| config-sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02:   done           |++++++++++++++++++++++++++++++++++++++| layer-sha256:b71f96345d44b237decc0c2d6c2f9ad0d17fde83dad7579608f1f0764d9686f2:    done           |++++++++++++++++++++++++++++++++++++++| elapsed5.7 s                                                                    total:  752.8  (132.0 KiB/s)

nerdctl push:推送镜像

当然在推送镜像之前也可以使用 nerdctl login 命令登录到镜像仓库,然后再执行 push 操作。

可以使用 nerdctl login --username xxx --password xxx 进行登录,使用 nerdctl logout 可以注销退出登录。

nerdctl tag:镜像标签

使用 tag 命令可以为一个镜像创建一个别名镜像:

  ~ nerdctl images
REPOSITORY    TAG                  IMAGE ID        CREATED           SIZE
busybox       latest               0f354ec1728d    6 minutes ago     1.3 MiB
nginx         alpine               bead42240255    41 minutes ago    16.0 KiB
  ~ nerdctl tag nginx:alpine harbor.k8s.local/course/nginx:alpine
  ~ nerdctl images
REPOSITORY                       TAG                  IMAGE ID        CREATED           SIZE
busybox                          latest               0f354ec1728d    7 minutes ago     1.3 MiB
nginx                            alpine               bead42240255    41 minutes ago    16.0 KiB
harbor.k8s.local/course/nginx    alpine               bead42240255    2 seconds ago     16.0 KiB

nerdctl save:导出镜像

使用 save 命令可以导出镜像为一个 tar 压缩包。

➜  ~ nerdctl save -o busybox.tar.gz busybox:latest
➜  ~ ls -lh busybox.tar.gz
-rw-r--r-- 1 root root 761K Aug 19 15:19 busybox.tar.gz

nerdctl rmi:删除镜像

➜  ~ nerdctl rmi busybox
Untaggeddocker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
Deletedsha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373

nerdctl load:导入镜像

使用 load 命令可以将上面导出的镜像再次导入:

➜  ~ nerdctl load -i busybox.tar.gz
unpacking docker.io/library/busybox:latest (sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60)...done

使用 -i 或 --input 选项指定需要导入的压缩包。

镜像构建

镜像构建是平时我们非常重要的一个需求,我们知道 ctr 并没有构建镜像的命令,而现在我们又不使用 Docker 了,那么如何进行镜像构建了,幸运的是 nerdctl 就提供了 nerdctl build 这样的镜像构建命令。

nerdctl build:从 Dockerfile 构建镜像

比如现在我们定制一个 nginx 镜像,新建一个如下所示的 Dockerfile 文件:

FROM nginx
RUN echo ''这是一个基于containerd使用nerdctl构建的nginx镜像'' > /usr/share/nginx/html/index.html

然后在文件所在目录执行镜像构建命令:

➜  ~ nerdctl build -t nginx:nerdctl -f Dockerfile .
FATA[0000`buildctl` needs to be installed and `buildkitd` needs to be running, see https://github.com/moby/buildkit: exec"buildctl": executable file not found in $PATH

可以看到有一个错误提示,需要我们安装 buildctl 并运行 buildkitd,这是因为 nerdctl build 需要依赖 buildkit 工具。

buildkit 项目也是 Docker 公司开源的一个构建工具包,支持 OCI 标准的镜像构建。它主要包含以下部分:

  • 服务端  buildkitd:当前支持 runc 和 containerd 作为 worker,默认是 runc,我们这里使用 containerd
  • 客户端  buildctl:负责解析 Dockerfile,并向服务端 buildkitd 发出构建请求

buildkit 是典型的 C/S 架构,客户端和服务端是可以不在一台服务器上,而 nerdctl 在构建镜像的时候也作为 buildkitd 的客户端,所以需要我们安装并运行 buildkitd

所以接下来我们先来安装 buildkit

➜  ~ wget https://github.com/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz
# 如果有限制,也可以替换成下面的 URL 加速下载
# wget https://download.fastgit.org/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz
➜  ~ tar -zxvf buildkit-v0.9.0.linux-amd64.tar.gz -C /usr/local/containerd/
bin/
bin/buildctl
bin/buildkit-qemu-aarch64
bin/buildkit-qemu-arm
bin/buildkit-qemu-i386
bin/buildkit-qemu-mips64
bin/buildkit-qemu-mips64el
bin/buildkit-qemu-ppc64le
bin/buildkit-qemu-riscv64
bin/buildkit-qemu-s390x
bin/buildkit-runc
bin/buildkitd
➜  ~ ln -s /usr/local/containerd/bin/buildkitd /usr/local/bin/buildkitd
➜  ~ ln -s /usr/local/containerd/bin/buildctl /usr/local/bin/buildctl

这里我们使用 Systemd 来管理 buildkitd,创建如下所示的 systemd unit 文件:

➜  ~ cat /etc/systemd/system/buildkit.service
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true

[Install]
WantedBy=multi-user.target

然后启动 buildkitd

➜  ~ systemctl daemon-reload
➜  ~ systemctl enable buildkit --now
Created symlink /etc/systemd/system/multi-user.target.wants/buildkit.service → /etc/systemd/system/buildkit.service.
➜  ~ systemctl status buildkit
● buildkit.service - BuildKit
     Loaded: loaded (/etc/systemd/system/buildkit.service; enabled; vendor preset: enabled)
     Memory: 8.6M
     CGroup: /system.slice/buildkit.service
             └─5779 /usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true

Aug 19 16:03:10 ydzsio systemd[1]: Started BuildKit.
Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=warning msg="using host network as the default"
Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="found worker \"euznuelxhxb689bc5of7pxmbc\", labels>
Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="found 1 workers, default=\"euznuelxhxb689bc5of7pxm>
Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=warning msg="currently, only the default worker can be used."
Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="running server on /run/buildkit/buildkitd.sock"
~

现在我们再来重新构建镜像:

nerdctl 构建镜像

构建完成后查看镜像是否构建成功:

  ~ nerdctl images
WARN[0000] unparsable image name "overlayfs@sha256:d5b9b9e4c930f30340650cb373f62f97c93ee3b92c83f01c6e00b7b87d62c624"
REPOSITORY    TAG        IMAGE ID        CREATED               SIZE
nginx         latest     4d4d96ac750a    4 minutes ago         16.0 KiB
nginx         nerdctl    d5b9b9e4c930    About a minute ago    24.0 KiB
                         d5b9b9e4c930    About a minute ago    24.0 KiB

我们可以看到已经有我们构建的 nginx:nerdctl 镜像了,不过出现了一个 WARN[0000] unparsable image name "xxx" 的 Warning 信息,在镜像列表里面也可以看到有一个镜像 tag 为空的镜像,和我们构建的镜像 ID 一样,在 nerdctl 的 github issue 上也有提到这个问题:https://github.com/containerd/nerdctl/issues/177,不过到现在为止还没有 FIX,幸运的是这只是一个⚠️,不会影响我们的使用。

接下来使用上面我们构建的镜像来启动一个容器进行测试:

  ~ nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:nerdctl
f8f639cb667926023231b13584226b2c7b856847e0a25bd5f686b9a6e7e3cacd
  ~ nerdctl ps
CONTAINER ID    IMAGE                              COMMAND                   CREATED         STATUS    PORTS                 NAMES
f8f639cb6679    docker.io/library/nginx:nerdctl    "/docker-entrypoint.…"    1 second ago    Up        0.0.0.0:80->80/tcp    nginx
  ~ curl localhost
This is a nerdctl build''s nginx image base on containerd

这样我们就使用 nerdctl + buildkitd 轻松完成了容器镜像的构建。

当然如果你还想在单机环境下使用 Docker Compose,在 containerd 模式下,我们也可以使用 nerdctl 来兼容该功能。同样我们可以使用 nerdctl composenerdctl compose upnerdctl compose logsnerdctl compose buildnerdctl compose down 等命令来管理 Compose 服务。这样使用 containerd、nerdctl 结合 buildkit 等工具就完全可以替代 docker 在镜像构建、镜像容器方面的管理功能了。


K8S 进阶训练营


  点击屏末  | 即刻学习


扫描二维码获取

更多云原生知识





k8s 技术圈


文章转载自 k8s 技术圈点击这里阅读原文了解更多


中国 KubeCon + CloudNativeCon + Open Source Summit 虚拟大会

12 月 9 日至 10 日

https://www.lfasiallc.com/kubecon-cloudnativecon-open-source-summit-china/


赞助计划书即将出炉


CNCF 概况(幻灯片)

扫描二维码联系我们!




CNCF (Cloud Native Computing Foundation) 成立于 2015 年 12 月,隶属于 Linux  Foundation,是非营利性组织。 

CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。

本文分享自微信公众号 - CNCF(lf_cncf)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3

CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3

在更新或者安装 docker 容器的时候,提示下面的错误:

Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3 

上面的问题如何解决。

1_jWDWUztfqh_j0jLgAaWuhw

解决

根据提示的内容,上面已经说得比较明确了。

就是需要使用 containerd.io 的版本要升级下。

你可以访问 docker 官方的链接有关 CentOS 的安装部分:

Install Docker Engine on CentOS

首先你需要设置仓库:

sudo yum install -y yum-utils

 sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo 

然后执行命令

sudo yum install docker-ce docker-ce-cli containerd.io 

就可以解决上面的问题了。

https://www.ossez.com/t/centos-8-docker-containerd-io-1-2-2-3/548

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

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

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

新的 containerd 专为基于容器的系统而设计,如 Docker 和 Kubernetes。它提供了对操作系统的最小抽象。

与 0.2 版本相比,有以下更新:

  • 基于任务和容器的新运行时模型

  • 端到端的事件系统

  • 基于快照的容器存储系统

  • 内容寻址的映像存储系统

  • 与容器对象关联的任意元数据存储

  • 可扩展的命名空间 GRPC API

  • 丰富的 API 客户端(入门和 godoc)

此外,0.2 版本已被标记为"End of Life"状态,这说明它的生命周期已结束。

详细更细内容和下载地址请点此查看。

containerd与docker的区别是什么

containerd与docker的区别是什么

区别:1、containerd不需要经过dockershim,所以调用链更短,docker需要经过所以调用链更长;2、docker调用cni是“docker-shim”,containerd调用cni是“containerd-cri”。

containerd与docker的区别是什么

本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。

containerd与docker的区别是什么

在使用k8s时,使用docker和containerd的调用链如下所示:

01.png

不难看出,使用containerd时,调用链更短,不再需要经过dockershim和docker

数据目录

相信大家都知道docker的数据目录默认是在/var/lib/docker目录下;而切换到containerd时,数据目录默认为/var/lib/containerd

日志

当我们在使用k8s时,如果使用了docker作为运行时,其实容器程序日志的落盘是由docker来负责的。/var/log/pod和/var/log/container下的日志文件会软连接到/var/lib/docker下对应的日志文件,如果还需要对日志做一些参数配置,直接修改docker配置文件即可;而如果我们现在使用containerd作为运行时,则容器日志的落盘将由kubelet来负责,/var/log/container下的日志文件会软连接到/var/log/pod下的日志文件,如果需要调整日志参数,则需要修改kubelet相关配置

CNI

当使用docker作为运行时时,kubelet中的docker-shim负责调用cni;而当使用containerd作为运行时时,containerd中内置的containerd-cri负责调用cni

[plugins."io.containerd.grpc.v1.cri".cni]       
bin_dir = "/opt/cni/bin"       
conf_dir = "/etc/cni/net.d"
登录后复制

流服务

熟悉k8s的朋友都知道,kubectl exec 和 kubelet log等命令需要通过apiserver与容器通信,这其中就涉及到了流服务。而docker API本身支持,kubelet中的docker-shim通过docker API流转发;但containerd却要对此进行单独配置

[plugins."io.containerd.grpc.v1.cri"]     
stream_idle_timeout = "4h0m0s"    
 stream_server_address = "127.0.0.1"    
 stream_server_port = "0"     
enable_tls_streaming = false
登录后复制

推荐学习:《docker视频教程》

以上就是containerd与docker的区别是什么的详细内容,更多请关注php中文网其它相关文章!

Docker - 命令 - docker container

Docker - 命令 - docker container

  1. 概述
    1. 整理 docker 容器的命令

1. 分类 (25 个)

  1. 查看

    ls	
    diff
    logs
    inspect	
    port
    stats	
    top	
    
  2. 生命周期

    pause
    prune	
    create
    kill
    restart	
    rm	
    run	
    start	
    stop
    unpause	
    wait
    
  3. 交互

    cp	
    exec	
    attach	
    
  4. 修改

    rename
    update	
    
  5. 构建镜像

    commit	
    
  6. 导出

    export	
    

2. 命令

1. 查看

  1. ls

    1. 概述

      1. 查看 容器列表
    2. 命令

      # 查看当前运行容器
      # -a 可以查看 其他状态 容器
      > docker container ls [-a]
      
  2. stats

    1. 概述

      1. 实时刷新 容器 基本状态
        1. 内容
          1. 容器 id
          2. 容器名称
          3. cpu 使用率
          4. 内存使用 / 限制 使用率
          5. 网络 I/O
          6. 块 I/O
          7. PID
        2. 具体的参数,以后随缘吧
    2. 命令

      # 查看所有容器状态
      > docker container stats
      # 查看 单个 容器状态
      > docker container stats <containerName|containerID>
      
  3. top

    1. 概述

      1. 查看 容器 进程基本状态
        1. 具体的参数,以后随缘吧
    2. 命令

      # 查看 单个 容器 状态
      > docker container top <containerName|containerID>
      
  4. inspect

    1. 概述

      1. 查看 容器 各种基本信息
    2. 命令

      # 查看 单个 容器 基本信息
      > docker container inspect <containerName|containerID>
      
  5. log

    1. 概述

      1. 查看 容器 日志
      2. 待补充,我没成功...
    2. 命令

      > docker container logs <containerName|containerID>
      
    3. ref

      1. Docker logs 命令
        1. 命令有点不同,功能参数结果基本相似
  6. port

    1. 概述

      1. 查看 容器 端口映射
      2. 待补充,我没成功...
    2. 命令

      > docker container port <containerName|containerID>
      
    3. ref

      1. Docker port 命令
        1. 命令有点不同,功能参数结果基本相似
  7. diff

    1. 概述

      1. 查看 容器 变化记录
        1. 主要还是 文件系统 的改变
      2. 集体的变化,我还是不太明白
    2. 命令

      > docker container diff <containerName|containerID>
      

4. 修改

  1. rename

    1. 概述

      1. 重命名容器
    2. 命令

      > docker container rename <containerName|containerID> <newName>
      
  2. update

    1. 概述
      1. 调整 容器 参数
        1. 主要是 cpu, 内存,io 1 这些需要研究,我还不懂

2. 生命周期

  1. run

    1. 概述

      1. 启动容器,并执行命令
        1. 参数众多,感觉以后还得好好看看
    2. 命令

      # 前台执行
      > docker container run [options] -it <image> <cmd>
      # 后台执行
      > docker container run [options] -dt <image> <cmd>
      
  2. create

    1. 概述

      1. 创建一个容器
        1. 但是不启动它
      2. 用得不多
        1. 通常用 run
        2. 用到了再看吧
    2. 命令

  3. stop

    1. 概述

      1. 停止一个 正在运行的 容器
    2. 命令

      > docker container stop <containerName|containerID>
      
  4. start

    1. 概述

      1. 启动一个 已经停止的 容器
    2. 命令

      > docker container start <containerName|containerID>
      
  5. restart

    1. 概述

      1. 重新启动一个容器
    2. 命令

      > docker container restart <containerName|containerID>
      
  6. kill

    1. 概述

      1. kill 一个容器
    2. 命令

      > docker container kill <containerName|containerID>
      
  7. pause

    1. 概述

      1. 暂停 运行中 一个容器
    2. 命令

      > docker container pause <containerName|containerID>
      
  8. unpause

    1. 概述

      1. 取消一个 暂停中 容器
    2. 命令

      > docker container unpause <containerName|containerID>
      
  9. wait

    1. 概述

      1. 让直行命令的终端,进入阻塞状态
      2. 直到 命令行 指定的 docker 容器退出
      3. 用途目前还不是太了解
      4. 参数也不少,以后可能会单独讲解
    2. 命令

      > docker container wait <containerName|containerID>
      
  10. rm

    1. 概述

      1. 删除一个 容器
    2. 命令

      > docker container rm <containerName|containerID>
      
  11. prune

    1. 概述

      1. 删除所有 stop 状态的容器
    2. 命令

      > docker container prune <containerName|containerID>
      

3. 交互

  1. attach

    1. 概述

      1. 连接 运行 状态的容器
    2. 命令

      > docker container -it attach <containerName|containerID>
      
  2. exec

    1. 概述

      1. 对 运行 状态的容器 发布命令
    2. 命令

      > docker container -it exec <containerName|containerID> <cmd>
      
  3. cp

    1. 概述

      1. 在 主机 和 容器之间,拷贝文件
    2. 命令

      # 把 主机 的内容拷贝到 容器 中
      > docker container cp <hostPath> <containerName|containerID:<containerPath> 
      # 把 容器 的内容拷贝到 主机 中
      > docker container cp <containerName|containerID:<containerPath> <hostPath> 
      

5. 构建镜像

  1. commit
    1. 概述

      1. 将 运行 状态的容器 发布为镜像
      2. 有 其他的 选项,暂时不讲
        1. 因为不会
    2. 命令

      > docker container commit <containerName|containerID> [<repo>:<tag>]
      

6. 导出

  1. export
    1. 概述

      1. 对 运行 状态的容器 发布命令
    2. 命令

      > docker container export -o <file> <containerName|containerID>
      

ps

  1. 资源
    1. 存储
    2. 网络

关于可以像 Docker 一样方便的使用 Containerd 吗?containerd替代docker的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3、Containerd 1.0.0 发布,Docker Engine 的核心组件、containerd与docker的区别是什么、Docker - 命令 - docker container等相关知识的信息别忘了在本站进行查找喔。

本文标签:

上一篇如何丝滑般将 Kubernetes 容器运行时从 Docker 切换成 Containerd(从docker到kubernetes进阶)

下一篇python的requests库详解