containerd 容器运行时 + nerdctl 安装和使用教程

1,675 阅读2分钟

摘要:本文采用源文件安装方式,适用于离线方式安装;简单介绍了nerdctl 的基本使用,拥有dockerdocker-compose技能能更快速掌握。

安装

分步安装

Step 1 安装 containerd
下载文件并解压
# 下载
wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz
# 解压
tar Cxzvf /usr/local containerd-1.7.22-linux-amd64.tar.gz

注册为系统服务
mkdir -p /usr/local/lib/systemd/system
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service

# 自启动
systemctl daemon-reload
systemctl enable --now containerd
Step 2 安装runc开源的容器执行工具
# 下载
wget https://github.com/opencontainers/runc/releases/download/v1.1.14/runc.amd64

# 安装
install -m 755 runc.amd64 /usr/local/sbin/runc
Step 3 安装CNI网络插件
# 下载
wget https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz

# 解压
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.5.1.tgz
nerdctl客户端工具安装

该工具和docker的命令类似

# 下载
wget https://github.com/containerd/nerdctl/releases/download/v2.0.0-rc.1/nerdctl-2.0.0-rc.1-linux-amd64.tar.gz
# 安装
tar Cxzvvf /usr/local/bin nerdctl-2.0.0-rc.1-linux-amd64.tar.gz

一键安装

# 下载
wget https://github.com/containerd/nerdctl/releases/download/v2.0.0-rc.1/nerdctl-full-2.0.0-rc.1-linux-amd64.tar.gz

#解压
tar Cxzvvf /usr/local nerdctl-full-2.0.0-rc.1-linux-amd64.tar.gz

# 运行
sudo systemctl enable --now containerd
  • 如果不想用nerdctl想用docker
curl -sSL https://get.docker.com | sh

containerd镜像加速地址配置

推荐使用这个加速,比较稳定 https://github.com/DaoCloud/public-image-mirror

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

配置docker.io默认镜像加速地址

mkdir -p /etc/containerd/certs.d
mkdir -p /etc/containerd/certs.d/docker.io
  • 编辑/etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"

[host."https://docker.m.daocloud.io"]
  capabilities = ["pull", "resolve"]

[host."https://registry.docker-cn.com"]
  capabilities = ["pull", "resolve"]

测试

nerdctl命令行和docker的基本上一样的

nerdctl run -d --name nginx -p 8080:80 nginx:alpine

nerdctl使用教程

我感觉和docker使用差不多,只不过这里多了命名空间的区分,大家可以在不同的空间中部署服务namespace;默认不指定namespace则在default命名空间下

简单使用

  • 创建命名空间:nerdctl namespace create huzhihui
  • 查看命名空间:nerdctl namespace ls
  • 指定命名空间查看运行的容器: nerdctl -n 命名空间 ps
  • 后台运行容器并制定容器名称和绑定端口:nerdctl run -d --name nginx -p 8080:80 nginx:alpine

-d:指定后台运行;--name nginx:指定容器名称;-p 8080:80:绑定宿主机的8080端口到容器的80端口

  • 停止容器:nerdctl stop nginx
  • 删除容器:nerdctl rm nginx
  • 查看日志:nerdctl logs -f --tail=100 nginx
nerdctl compose使用
  • 使用docker-compose文件也和docker-compose的原生命令一致,只不过变为了nerdctl compose up -d; docker-compose->nerdctl compose
  • 文档地址:github.com/containerd/…
  • docker-compose.yml
version: '3'
services:
  nginx:
    image: 'nginx:alpine'
    container_name: nginx
    environment:
      - TZ=Asia/Shanghai
    ports:
      - '8080:80'
  • 运行nerdctl -n huzhihui compose -f docker-compose.yml up -d