Эта статья поможет вам понять разницу между Docker и Containerd.
Эта статья поможет вам понять разницу между Docker и Containerd.
Время выполнения контейнера

Container Runtime — это программный инструмент или компонент, отвечающий за создание контейнеров и управление ими на уровне операционной системы. Это один из основных компонентов технологии контейнеризации, который используется для запуска приложений внутри контейнеров и обеспечивает такие функции, как изоляция, управление ресурсами и безопасность. В Kubernetes среда выполнения контейнера — это компонент, отвечающий за управление контейнерами и их запуск. В прошлом Docker был наиболее часто используемой средой выполнения контейнеров, но со временем контейнеры стали еще одним популярным выбором среды выполнения контейнеров для Kubernetes.

Описание. Dockershim был удален из проекта Kubernetes начиная с версии Kubernetes 1.24.

К основным задачам среды выполнения контейнера относятся:

  1. Создание и запуск контейнера: время выполнения контейнера отвечает за предопределенную информацию о конфигурации изконтейнера (например, Зеркало)., Заказ, переменные окружения и т.д.),Создайте и запустите экземпляр контейнера.
  2. контейнерфайловая системауправлять:Время выполнения контейнераиметь дело сконтейнеризфайловая система,Отвечает за монтирование контента Зеркалоиз в файловую систему контейнериз.,И обеспечить изоляцию между существующимиконтейнерами.
  3. Лимит ресурсов иуправлять:Время выполнения контейнера Может быть основано на пользователе илиуправлятьопределение членаиз Ограничения ресурсов,управлятьконтейнерверноCPU、Память、Диск и другие ресурсы изиспользовать.
  4. контейнерсеть:Время выполнения контейнера Помогите с настройкойконтейнеризсеть,делатьконтейнер Можетидругойконтейнерили внешнийсетьобщаться。
  5. Безопасность: Время выполнения контейнера Внедрить механизмы безопасности,Обеспечьте изоляцию между хостами и хостами,И не позволяйте вредоносному поведению в контейнере влиять на другие контейнеры или хосты.

В сегодняшней тенденции облачных технологий технология контейнеризации стала основным выбором для развертывания современных приложений. Kubernetes (K8s) — популярная система оркестрации контейнеров, широко используемая при управлении крупномасштабными кластерами контейнеров. В K8s выбор среды выполнения контейнера играет решающую роль в производительности, надежности и безопасности. В этой статье мы сравним две распространенные среды выполнения контейнеров K8s: Containerd и Docker, а также рассмотрим их сходства и различия.

Докер: первоначальный лидер

Появление Docker, одной из первых контейнерных технологий, подорвало традиционные методы виртуализации и позволило упаковывать, доставлять и эксплуатировать приложения посредством облегченной контейнеризации. Docker сыграл ключевую роль в популяризации контейнерной технологии. Его удобные инструменты командной строки и графический интерфейс делают контейнерную технологию более удобной и простой в использовании для разработчиков. На какое-то время Docker стал почти синонимом контейнеризации. Однако с появлением Kubernetes позиции Docker в K8s постепенно подвергаются сомнению. С одной стороны, Docker, как полноценная контейнерная платформа, включает в себя множество функций, которые не нужны K8s, что приводит к пустой трате ресурсов. С другой стороны, сам K8s предоставляет функции оркестрации и планирования контейнеров, которые пересекаются с Docker, вызывая определенную степень конфликта. Чтобы не допустить доминирования Docker, реализация Docker была разделена на несколько стандартизированных модулей. Цель стандартизации заключалась в том, чтобы модули могли быть заменены другими реализациями и не контролировались каким-либо одним производителем. Докер от

  • docker-client
  • dockerd
  • containerd
  • docker-shim
  • runc

Он состоит из контейнера, поэтому контейнер является одним из основных компонентов Docker. Управление контейнерами в Docker в основном осуществляется через контейнер. Итак, что такое контейнер?

Containerd: стандартная конфигурация экосистемы K8s

Containerd — это среда выполнения контейнеров с открытым исходным кодом, разработанная командой Docker. Она ориентирована на предоставление легкой и высокопроизводительной среды выполнения контейнеров. Будучи чистой средой выполнения контейнера, Containerd спроектирован так, чтобы лучше соответствовать архитектуре и потребностям K8s. Он требует меньше ресурсов, ускоряет время запуска и повышает производительность. Сообщество K8s признает преимущества Containerd и использует его в качестве стандартной среды выполнения контейнеров в экосистеме K8s. Containerd может управлять полным жизненным циклом контейнера на хосте: передачей и хранением образа контейнера, выполнением и управлением контейнером, хранилищем и сетью и т. д. Подробно, Containerd отвечает за следующие вещи:

  • управлять жизненным цикломконтейнериз (от создания контейнера до уничтожения контейнера)
  • Контейнер Pull/PushЗеркало
  • хранилищеуправлять(управлять Зеркалоиконтейнерданныеизхранилище)
  • вызов runC Запустить контейнер (с runC ждать Время выполнения контейнеравзаимодействие)
  • управлятьконтейнерсетьинтерфейсисеть

Интерфейс времени выполнения контейнера (CRI)

Интерфейс среды выполнения контейнера (Container Runtime интерфейс), называемый CRI。 CRI представляет собой подключаемый интерфейс, который позволяет kubelet Возможность использовать различные среды выполнения контейнеров без перекомпиляции компонентов кластера. Вам нужна работающая среда выполнения контейнера на каждом узле кластера. так kubelet Можно начать Pod и его контейнеры. Интерфейс времени выполнения контейнера (CRI)да kubelet Основной протокол для связи со средами выполнения контейнеров.

Kubernetes и dockershim

На диаграмме архитектуры Kubernetes видно, что ниже Kubelet находится слой среды выполнения Contianer, который фактически взаимодействует с ОС. Эта среда выполнения контейнера действительно управляет всем жизненным циклом контейнера, извлекает образы и т. д. в рабочем состоянии.

Поддерживаемые в настоящее время серверные части CRI

Когда мы впервые используем Kubernetes, мы обычно используем Docker в качестве среды выполнения контейнера по умолчанию. Фактически, CRI поддерживается с версии Kubernetes 1.5. Через интерфейс CRI вы можете указать использование других сред выполнения контейнера в качестве бэкэнда Pod. , серверные части, поддерживающие CRI:

  • cri-o:cri-o да Kubernetes из CRI стандартныйиз реализует и позволяет Kubernetes косвенное использование OCI Совместимо с из Время выполнения контейнер, можно положить cri-o рассматривается как Kubernetes использовать OCI Совместимо с из Время выполнения контейнераиз среднего слоя.
  • cri-containerd: на основе Containerd из реализации Kubernetes CRI, Containerdда процесса, даCRI-Containerdиз реализации
  • ркт: Зависит от CoreOS Основная рекомендация из используется для выполнения docker Contend из Время выполнения контейнера
  • фракти: на основе hypervisor из CRI
  • docker:Kuberentes Начните поддерживать из Время с самого начала выполнения контейнер, еще не полностью извлеченный из kubelet Развязка в Docker Компания также продвигала OCI стандартный

Dockershim

Когда Kubernetes предложил рабочую спецификацию CRI, Docker просто отделил контейнеры и не поддерживал стандарт CRI. Поскольку Docker был наиболее распространенной и авторитетной контейнерной технологией в то время, хотя Kuberentes предложил спецификацию интерфейса CRI, ей все равно необходимо было адаптировать соединение между CRI и Docker. Поэтому для подключения среды выполнения contianer Kubelet требовался промежуточный уровень или прокладка. и Докер. Итак, в kubelet был добавлен Dockershim (shim означает временный и совместимый). При использовании Docker в качестве среды выполнения фактический процесс запуска контейнера выглядит следующим образом:

На этом этапе компонент dockershim находится в коде Kubelet, а это значит, что Dockershim разрабатывается и поддерживается организацией K8S! Поскольку выпуск версии компании Docker не может контролироваться и управляться организацией K8S, каждый раз, когда Docker выпускает новый выпуск, организация K8S должна сосредоточиться на быстром обновлении и поддержке Dockershim. Kubernetes версии 1.24 официально удаляет dockershim и объявляет его устаревшим. Суть этого дела — отказаться от встроенной функции dockershim и напрямую подключиться к Containerd (который в будущем будет поддерживать CRI). Этот метод более стандартен, а вызывающая ссылка проще.

Сравнение отношений вызова

runtime да docker Цепочка вызовов на данный момент: отношение вызова: kubelet --> dockershim (существовать kubelet в ходе выполнения) --> dockerd --> containerd runtime да containerd Цепочка вызовов на данный момент: отношение вызова: kubelet --> cri plugin(существовать containerd в ходе выполнения) --> containerd Резюме: с точки зрения k8s выбирайте Containerd Еще лучше в качестве компонента среды выполнения, потому что Containerd Цепочка вызовов короче, имеет меньше компонентов, более стабильна и занимает меньше ресурсов узла.

Общие команды

ctr да containerd Клиентский инструмент. crictl да CRI Совместимый интерфейс командной строки среды выполнения контейнера, который можно использовать для проверки и отладки. k8s Среды выполнения контейнеров и приложения на узле. ctr -v Выходное изда containerd версия, критл -v Выходное издаток k8s версия, по результатам видно, что можно думать crictl дафор k8s из.

docker

ctr(containerd)

crictl(kubernetes)

Просмотр запущенных контейнеров

docker ps

ctr task ls/ctr container ls

crictl ps

Посмотреть изображение

docker images

ctr image ls

crictl images

Просмотр журналов контейнера

docker logs

никто

crictl logs

Просмотр информации о данных контейнера

docker inspect

ctr container info

crictl inspect

Просмотр ресурсов контейнера

docker stats

никто

crictl stats

Запустить/остановить существующие контейнеры

docker start/stop

ctr task start/kill

crictl start/stop

Запустить новый контейнер

docker run

ctr run

никто (самая маленькая единица — капсула)

Изменить метку изображения

docker tag

ctr image tag

никто

Создать новый контейнер

docker create

ctr container create

crictl create

Импортировать изображение

docker load

ctr image import

никто

Экспортировать изображение

docker save

ctr image export

никто

Удалить контейнер

docker rm

ctr container rm

crictl rm

Удалить изображение

docker rmi

ctr image rm

crictl rmi

Вытащить изображение

docker pull

ctr image pull

ctictl pull

Отправить изображение

docker push

ctr image push

никто

Выполнение команд внутри контейнера

docker exec

никто

crictl exec

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]