使用containerd+nerdctl代替docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,相信大部分人都用过或者听说过,随着技术的发展,后起的新秀containerd正在逐渐取代docker的位置。

containerd的由来

containerd是CNCF(云原生基金会)中的一个重要项目,是一个中立的“工业标准容器运行时”, 它来源于CNCF与docker公司的相爱相杀(具体可自行百度),containerd原先是docker中的核心依赖,但比较简单,并不能直接提供给终端用户直接使用,后来docker公司将其捐赠给了CNCF,在CNCF大佬们的完善下,containerd逐渐成为了一个成熟的容器运行时服务,拥有和docker一样的容器管理能力,

docker,containerd,runc的关系

相信大家可能或多或少都听过这几个概念,简单介绍一下
docker: 或者应该叫docker deamon,集容器管理与编排于一身的容器引擎,其中容器管理能力就是依赖于containerd,容器编排能力是集成了docker swarm
containerd: 是一个标准的容器运行时,提供标准rpc接口对容器进行管理, 可以对接各种容器相关系统
runc: 由libcontainer(旧版docker中管理容器的库)演变而来,实现了开放容器接口(OCI), 是一个命令行工具,直接与cgroup或linux内核交互, 进行容器的创建删除等操作

他们的调用关系如下:
docker cli -> docker daemon -> containerd -> runc

nerdctl介绍

containerd虽然可直接提供给终端用户直接使用,也提供了命令行工具(ctr),但并不是很友好,所以nerdctl应运而生,它也是containerd的命令行工具,支持docker cli关于容器生命周期管理的所有命令,并且支持docker compose (nerdctl compose up)

二进制方式安装

下载地址: https://github.com/containerd/nerdctl/releases

  • 精简 (nerdctl-0.8.2-linux-amd64.tar.gz): 只包含nerdctl
  • 完整 (nerdctl-full-0.8.2-linux-amd64.tar.gz): 包含 containerd, runc, and CNI等依赖

下载

 wget https://github.com/containerd/nerdctl/releases/download/v0.8.2/nerdctl-full-0.8.2-linux-amd64.tar.gz

解压到/usr/local下(最好解压到此目录,否则就需要更改lib/systemd/system/containerd.service中的二进制路径)

tar Cxzvvf /usr/local nerdctl-full-0.8.2-linux-amd64.tar.gz

查看

# ls /usr/local/bin/
buildctl   containerd                      containerd-rootless-setuptool.sh  containerd-shim-runc-v2  containerd-stress  ctr      ctr-remote      nerdctl      rootlesskit  slirp4netns
buildkitd  containerd-fuse-overlayfs-grpc  containerd-rootless.sh            containerd-stargz-grpc   ctd-decoder        ctr-enc  fuse-overlayfs  rootlessctl  runc         stargz-store

确保/usr/local/bin在环境变量PATH中(默认是在的),就可以直接使用nerdctl命令了

# nerdctl --help
NAME:
   nerdctl - Docker-compatible CLI for containerd

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

VERSION:
   0.8.2.m

COMMANDS:
   run         Run a command in a new container
   exec        Run a command in a running container
   ps          List containers
   logs        Fetch the logs of a container. Currently, only containers created with `nerdctl run -d` are supported.
   port        List port mappings or a specific mapping for the container
   stop        Stop one or more running containers
   start       Start one or more running containers
   kill        Kill one or more running containers
   rm          Remove one or more containers
   pause       Pause all processes within one or more containers
   unpause     Unpause all processes within one or more containers
   commit      [flags] CONTAINER REPOSITORY[:TAG]
   wait        Block until one or more containers stop, then print their exit codes.
   build       Build an image from a Dockerfile. Needs buildkitd to be running.
   images      List images
   pull        Pull an image from a registry
   push        Push an image or a repository to a registry
   load        Load an image from a tar archive or STDIN
   save        Save one or more images to a tar archive (streamed to STDOUT by default)
   tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
   rmi         Remove one or more images
   events      Get real time events from the server
   info        Display system-wide information
   version     Show the nerdctl version information
   inspect     Return low-level information on objects. Currently, only supports container objects.
   login       Log in to a Docker registry
   logout      Log out from a Docker registry
   compose     Compose
   completion  Show shell completion
   help, h     Shows a list of commands or help for one command
   Management:
     container  Manage containers
     image      Manage images
     network    Manage networks
     volume     Manage volumes
     system     Manage containerd
     namespace  Manage containerd namespaces

启动containerd

systemctl start containerd
# systemctl status containerd
● containerd.service - containerd container runtime
   Loaded: loaded (/usr/local/lib/systemd/system/containerd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-05-25 22:51:34 CST; 4s ago
     Docs: https://containerd.io
  Process: 1745 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
 Main PID: 1748 (containerd)
    Tasks: 7
   Memory: 20.7M
   CGroup: /system.slice/containerd.service
           └─1748 /usr/local/bin/containerd

设置开机启动

systemctl enable containerd

使用

下载nginx镜像

nerdctl pull nginx:alpine

运行nginx镜像

# nerdctl run -d --name nginx -p 80:80 nginx:alpine
# nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED               STATUS    PORTS                 NAMES
0857f7aed52a    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    About a minute ago    Up        0.0.0.0:80->80/tcp    nginx

访问浏览器: http://[服务器ip]:80 端口可看到nginx页面

如果nerdctl不习惯,可以设置别名为docker

# alias docker=nerdctl
# docker ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED          STATUS    PORTS                 NAMES
0857f7aed52a    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    3 minutes ago    Up        0.0.0.0:80->80/tcp    nginx
[root@localhost ~]# 

docker compose支持

先删掉之前的容器

nerdctl rm -f nginx

准备docker compose的定义文件

# cat docker-compose.yml 
version: "3.5"
services:
  nginx:
    image: nginx:alpine
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    ports:
       - "80:80"

启动

nerdctl compose up -d  
# nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED          STATUS    PORTS                 NAMES
fb12aff45422    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    8 seconds ago    Up        0.0.0.0:80->80/tcp    test_nginx_1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容