Ван Сяньсен2023-08-082023-08-08
изучение Containerd Прежде чем нам нужно Docker Давайте сделаем краткий обзор истории разработки, ведь на практике задействовано довольно много компонентов. О многих из них мы часто слышим, но не знаем точно, для чего эти компоненты используются, например. libcontainer
、runc
、containerd
、CRI
、OCI
и т. д.
от Docker 1.11 Версия запускается, Докер Работа с контейнерами осуществляется не просто Docker Daemon для запуска, а путем интеграции containerd、runc Ожидание завершения нескольких компонентов. Хотя Docker Daemon Модуль демона постоянно реконструируется, но основные функции и позиционирование особо не изменились. Они были всегда. CS Архитектура, хранитель процессов Docker Client терминальное взаимодействие и управление Docker зеркалоиконтейнер。сейчассуществоватьиз Компоненты в Архитектуре containerd будет отвечать за управление жизненным циклом контейнеров на узлах кластера и выше. Docker Daemon поставлять gRPC интерфейс.
Когда мы хотим создать контейнер, теперь Docker Daemon Вы не можете создать его для нас напрямую, но можете запросить containerd
Чтобы создать контейнер,Containerd После получения запроса он не будет напрямую управлять контейнером, а создаст контейнер с именем containerd-shim
процесс, позвольте этому процессу управлять контейнером. Мы указываем, что процессу-контейнеру нужен родительский процесс для сбора и поддержания статуса. stdin ждать fd Открытое ожидание работы из этого родительского процесса есть контейнер, то если containerd Если он зависнет, то все контейнеры на всем хосте должны будут выйти, а введение containerd-shim
Эта прокладка позволяет избежать этой проблемы.
Затем для создания контейнера потребуется выполнить некоторые действия. namespaces и cgroups настройка и монтаж root Операции файловой системы, эти операции на самом деле имеют стандарты и спецификации, тогда есть OCI (стандарт открытого контейнера),runc
Это эталонная реализация (Docker Принудительно до бесконечности libcontainer
Пожертвуйте его и измените его имя runc
), этот стандарт на самом деле является документом, который в основном оговаривает структуру образа контейнера и какие инструкции по эксплуатации должен получить контейнер, например: create、start、stop、delete ждать Эти Заказ。runc
Просто следуй этому OCI документ для создания контейнера, соответствующего спецификации. Поскольку это стандарт, должны быть и другие. OCI реализация, например Kata、gVisor Эти контейнеры совместимы со средой выполнения. OCI Стандарт.
Итак, на самом деле запуск контейнера осуществляется через containerd-shim
позвонить runc
начать контейнериз,runc
Началоськонтейнер Тогда он выйдет напрямую,containerd-shim
станет родительским процессом процесса-контейнера, Отвечает за сбор статуса контейнерных процессов, Сообщите containerd, и в контейнере pid для 1 После завершения процесса он берет на себя управление дочерними процессами в контейнере для очистки. Убедитесь, что процессы-зомби не появляются.
и Docker Воля Контейнерные операции Все перенесеныприезжать containerd
Вхожу, потому что в настоящее время занимается Рой, хочу войти PaaS Рынок, сделавший эту архитектуру сегментированной, позволит Docker Daemon Конкретно отвечаю за упаковку и оркестровку верхнего слоя. Конечно, мы знаем последующие результаты. Swarm существовать Kubernetes Передо мной было катастрофическое поражение, а затем Docker Компания будет containerd
Проект был передан в дар CNCF Фонд, это тоже сейчас существуетиз Docker Архитектура。
мы знаем Kubernetes поставлять Понятноодин CRI интерфейс среды выполнения контейнера, то это CRI Что такое приезжать? это вообще-то тоже Docker развитие тесно связано.
существовать Kubernetes В первые дни, в то время Docker Реальность существования слишком горячая, Kubernetes Конечно, я сначала поддержу его. Docker, и он передается жестко закодированным путем непосредственного вызова. Docker API, за которым следует Docker постоянное развитие и Google В Kubernetes доминирует больше сред выполнения контейнеров. для поддерживает более оптимизированное изконтейнервремя выполнения,Google Just и Red Hat доминируют на посадочной площадке дистанция Понятно CRI стандарт для конвертации Kubernetes платформаиидентификацияизконтейнервремя выполнение (конечно, в основном для, убей его Docker) развязка.
CRI
(Container Runtime Interface интерфейс среды выполнения контейнера) по сути Kubernetes Набор интерфейсов, определенных для взаимодействия со средой выполнения контейнера, поэтому любая среда выполнения контейнера, реализующая этот набор интерфейсов, может быть подключена к Kubernetes Поднимитесь на платформу. но Kubernetes посадочная дистанция CRI Этот набор стандартов все еще доминировал в то время, поэтому существуют некоторые контейнервремя. выполнение может не сбыться само по себе CRI интерфейс, так что есть прокладка (прокладка)
, один shim из-за ответственности естьделатьдля Адаптер будет различнымконтейнервремя выполнениясамизинтерфейсприспособлениеприезжать Kubernetes из CRI на интерфейсе, среди которых dockershim
то есть Kubernetes стыковка Docker приезжать CRI интерфейс на изодинской реализации прокладки.
Kubelet проходить gRPC Среда выполнения платформы и контейнера или shim общаться, при котором kubelet для клиента, ЦРИ shim(Это также может бытьконтейнервремя само выполнение) как для сервера.
CRI Определение API В основном включает в себя два gRPC Служить,ImageService
и RuntimeService
,ImageService
Услуга в основном заключается в вывозе изображение、Посмотреть и Удалить изображениеждать Держатьделать,RuntimeService
Он используется для управления Pod жизненный цикл иконтейнериз, а также взаимодействие с контейнеризвызов (exec/attach/port-forward) операции ожидания, могут осуществлять kubelet Китайский логотип --container-runtime-endpoint
и --image-service-endpoint
настроить оба сервиса из сокетов.
Но здесь такой же есть и исключения для одного, то есть есть Докер, из-за Docker В то время из имел очень высокий статус в мире, и Kubernetes Это напрямую встроено dockershim
существовать kubelet в из, поэтому, если вы используетеиз, это Docker Этот видконтейнервремя выполнение Нет необходимости обращаться к адаптеру Установкаконфигурации самостоятельно, и конечно этот шаг кажется парализующим. Docker компания.
Теперь существовать, если мыиспользуем Docker изразговаривать,когда мысуществовать Kubernetes Создано в один Pod во время, сначала есть kubelet проходить CRI Вызов интерфейса dockershim
,Запрос на создание одинконтейнера,kubelet Можно рассматривать как один простойиз CRI Client, и dockershim то есть Получить запросиз Сервера, но они все существуют kubelet Встроенный из.
dockershim
После получения запроса на проживание, преобразован в Docker Daemon Может идентифицировать запросы, волосыприезжать Docker Daemon Создано по запросу одинконтейнер, запросил приезжать Docker Daemon Следовать за есть Docker Создать контейнеризпроцесс Понятно,позвонить containerd
,затем создайте containerd-shim
процесс,проходить Долженпроцесспозвонить runc
чтобы фактически создать контейнер.
На самом деле, если внимательно понаблюдать, нетрудно найти применение Docker На самом деле цепочка вызовов относительно длинная, и реальная операция фактически связана с контейнером. containerd Этого вполне достаточно, Докер Слишком сложно и громоздко, конечно. Docker Популярные избигодинпричина есть посуда имеет множество удобных функций, но для Kubernetes В этих функциях вообще нет необходимости, поскольку суть фор заключается в использовании интерфейса для работы с контейнером, поэтому, естественно, вы можете использовать контейнервремя. выполнениявыключательприезжать containerd Приходить.
выключательприезжать containerd Промежуточные звенья можно исключить, а опыт эксплуатации тот же, что и раньше, но потому что Используйте напрямуюконтейнервремя график выполнения контейнера, значит они правы Docker Это невидимо. Итак, вы проверяли эти контейнериз Docker Инструмент нельзя использовать.
ты больше не можешь использовать docker ps
или docker inspect
Заказполучитьконтейнеринформация。потому чтоне могусписок контейнеров, поэтому вы не можете получить логи, остановить контейнер или даже передать docker exec
существоватьконтейнерказнен в Заказ。
Конечно, мы все еще можем скачать зеркало или пользователей. docker build
команду для создания образа, но используйте Docker Сборка, скачивание иззеркало, для контейнервремя выполненияи Kubernetes,Ничего не видно。для Понятносуществовать Kubernetes Для использования вам необходимо отодвинуть зеркало на склад прибывающего зеркала.
Вы можете видеть на картинке выше, что существуют containerd 1.0 центр, справа CRI изприспособлениедапроходитьодинодиниз CRI-Containerd
процесс для завершения, потому что изначально containerd Он также будет адаптироваться к другим системам (таким как рой), поэтому прямой реализации нет ЦНИИ, так чтоэтотстыковка Оставь работу CRI-Containerd
этот shim .
Тогда приезжать containerd 1.1 Удален после версии CRI-Containerd
этот shim, напрямую интегрируйте логику адаптации в виде плагина. containerd В основном процесс, сейчас существует для того, чтобы извызов были более краткими.
в то же время Kubernetes Сообщество также создало один, посвященный Kubernetes из CRI время выполнения CRI-O,Прямая совместимость со спецификациями CRI и OCI.
этотплани containerd эта схема явно лучше стандартной dockershim Это намного проще, но поскольку большинство пользователей привыкли использовать Docker, поэтому все по-прежнему предпочитают его использовать dockershim
план.
Но с CRI Программы из Разработки и другое контейнервремя выполненияверно CRI поддержка становится все более полной, Kubernetes Сообществосуществовать 2020 Год 7 Начал удалять через месяц dockershim план Понятно:https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim 1.20 Генерал-лейтенант kubelet Встроенный из dockershim Разделение кода, встроенный dockershim отметкадлярежим обслуживания
,Конечно, это все еще нормально, если использовать dockershim.,Цельсуществовать 1.23/1.24 Ни одна версия не выпущена dockershim из версии (код все еще существует, но он должен поддерживаться «из коробки» по умолчанию) docker Нужно построить самому kubelet, будет существовать после определенного льготного периодаот kubelet Удалить встроенный из dockershim код).
Так значит ли это, что Kubernetes Больше не поддерживается Docker Как дела? Конечно нет, это просто устаревшая встроенная функция. dockershim
Возможности и функции, Докер идругойконтейнервремя выполнение будет рассматриваться одинаково и не будет рассматривать встроенную поддержку отдельно, если мы также хотим напрямую использовать Docker Этот видконтейнервремя Что должно делать выполнение? может быть dockershim функция извлекается отдельно и поддерживается независимо cri-dockerd
Вот и все, как containerd 1.0 Версия в представлении CRI-Containerd
,Конечно, есть другой способ есть Docker Официальное сообщество будет CRI интерфейсвстроенныйприезжать Dockerd добиться.
Но мы также знаем Dockerd Также перейдите непосредственно к вызову Containerd,и containerd 1.1 Он будет реализован встроенным после версии ЦНИИ, так что Docker Нет необходимости реализовывать его отдельно CRI Да, когда Kubernetes Больше нет встроенной поддержки из коробки. Docker Отныне лучший способ, конечно, естьпрямойиспользовать Containerd Этот видконтейнервремя выполнения,ии Долженконтейнервремя выполнение также практикуется в производственной среде, давайте узнаем об этом дальше Containerd изиспользовать。
containerd Это один из стандартов промышленного класса изконтейнервремени. выполнения,это подчеркиваетпростота、Надежностьипортативность,containerd Может нести ответственность за выполнение следующих задач:
containerd Может использоваться как Linux и Windows издаэмон, который управляет полным жизненным циклом изконтейнера своей хост-системы, отзеркало передачу и хранение, приезжает выполнение и мониторинг контейнера, а затем перемещает базовое хранилище, перемещает сетевые вложения и т. д.
Картинка выше containerd Официальное изображение по представлению архитектуры можно увидеть. containerd То же самое относится и к принятию из C/S Архитектура,Служитьконецпроходить unix domain socket Открытый нижний уровень из gRPC API интерфейс, клиент использует эти API изконтейнер на узле управления, каждый containerd Отвечает только за одну машину, Pull зеркало, операции по контейнеризации (запуск, остановка ожидания), сети и хранилища выполняются containerd Заканчивать. В частности, контейнер управляется runc Ответственный, по сути, до тех пор, пока он отвечает OCI Технические характеристики изконтейнера могут поддерживаться.
для развязки, контейнер Система разделена на различные компоненты, каждый из которых состоит из нескольких модулей (Core часть), каждый тип модуля интегрирован в виде плагина. Containerd , а плагины являются взаимоисключающими. Например, на рисунке выше каждая длинная пунктирная линия и прямоугольник представляют тип плагина, в том числе. Service Plugin、Metadata Plugin、GC Plugin、Runtime Plugin ждать,в Service Plugin снова будет зависеть Metadata Plugin、GC Plugin и Runtime Плагин. Каждый маленький прямоугольник представляет собой один сегмент плагина, например. Metadata Plugin полагаться Containers Plugin、Content Plugin ждать。например:
Content Plugin
: Благодаря тому, что он имеет доступ к адресуемому контенту в зеркале, все неизменяемое содержимое хранится здесь.Snapshot Plugin
: Используется для управления снимками файловой системы контейнерзеркалоиз, каждый слой в зеркале будет распакован в снимок файловой системы. на: Docker серединаиз graphdriver。Общий containerd Его можно разделить на три основных блока: хранилище и метаданные. и Runtime。
Вот моя система использования CentOS 7.9
,Сначала проверьте, установлен ли seccomp
полагаться:
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ rpm -qa |grep libseccomp
libseccomp-2.3.1-4.el7.x86_64
# Если Нет Установить libseccomp Затем пакет выполняет следующее из Заказ Установитьполагаться
$ yum install wget -y
$ wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libseccomp-2.3.1-4.el7.x86_64.rpm
$ yum install libseccomp-2.3.1-4.el7.x86_64.rpm -y
потому что containerd Нужно позвонить runc, поэтому нам также нужно сначала его установить беги, но containerd по представлениюодин содержит соответствующие рекомендациииз сжатых пакетов cri-containerd-cni-{VERSION}.{OS}-
# Создайте каталог для хранения пакетов программного обеспечения.
mkdir -p /server/tools/
cd /server/tools/
# Скачать пакет
wget https://github.com/containerd/containerd/releases/download/v1.7.3/cri-containerd-cni-1.7.3-linux-amd64.tar.gz
# Непосредственно разархивируйте сжатый пакет в каждый каталог системы проживания.
tar xvf cri-containerd-cni-1.7.3-linux-amd64.tar.gz -C /
## Файл запуска службы
cp /opt/containerd-1.7.3/etc/systemd/system/containerd.service /usr/lib/systemd/system/
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 1. Измените файл ContainerdizConfiguration (необязательно 1). 2)
sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep SystemdCgroup
# 2. попытаться найтиприезжатьcontainerd.runtimes.runc.options,существовать Добавлено нижеSystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".cni]
# 3. Добавить источник зеркала Али
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://l12384zex.mirror.aliyuncs.com"] # Настройте свой источник
# 4. Измените адрес по умолчанию sandbox_image, чтобы он соответствовал адресу версии.
sandbox_image = "kubernetes/pause" # По умолчанию он может быть заблокирован.
registry.mirrors."xxx"
: выразить потребность Конфигурация mirror склад-иззеркало, например registry.mirrors."docker.io"
выражать Конфигурация docker.io из mirror。endpoint
: выражатьпоставлять mirror Например, мы можем зарегистрировать один сервис ускорения «Иззеркало» Alibaba Cloud и «Ззеркало», чтобы сделать это для docker.io из mirror。В пути к хранилищу по умолчанию есть еще два пути:
root = "/var/lib/containerd"
state = "/run/containerd"
в root
Он используется для сохранения постоянных данных, в том числе Snapshots, Content, Metadata Помимо различных данных плагина, каждый плагин имеет свой отдельный каталог Containerd. Сам он не хранит никаких данных, а все его функции берутся из загруженных плагинов.
икроме тогоиз state
используется для экономии времени выполнение Временные данные, в том числе сокеты, pid, точка монтирования, время статус выполнения и нет необходимости сохранять данные плагина.
containerd Сжатый пакет содержит один etc/systemd/system/containerd.service
из файла, чтобы мы могли провести systemd настроить containerd Процесс для Guardian запущен, и его содержимое следующее:
$ cat /etc/systemd/system/containerd.service
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
#uncomment to enable the experimental sbservice (sandboxed) version of containerd/cri integration
#Environment="ENABLE_CRI_SANDBOXES=sandboxed"
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
Здесь есть два важных параметра:
Delegate
: эта опция позволяет containerd кивремя выполнения Собственныйуправлять Собственный Создать контейнериз группы. Если эта опция не установлена, systemd перенесу процесс, чтобы приехать самостоятельно из cgroups в, оти приводит к containerd Не удалось правильно получить ситуацию использования контейнера ресурсов.KillMode
: эта опция используется для обработки containerd Процесс был убит из-за этого. По умолчанию, systemd встречасуществоватьпроцессиз cgroup Найти и убить containerd из Все детипроцесс。KillMode Поля можно задатьиз Значения следующие。control-group
(значение по умолчанию):В текущей контрольной группеиз Все детипроцесс,Все будут убитыprocess
:Только убей мастерапроцессmixed
:хозяинпроцессполучитприезжать SIGTERM Сигнал,ребенокпроцессполучатьприезжать SIGKILL Сигналnone
:Нетпроцессвстречабыть убитым,Просто выполните услугу из стоп-заказа.мы должны KillMode из Настройка значениядля процесс, это гарантирует перезапуск обновления containerd Когда не убиваешь имеющийся изконтейнер.
Теперь мы можем запустить контейнер, просто выполнив следующее:
systemctl enable containerd --now
Его можно использовать после завершения запуска. containerd местный CLI инструмент ctr
Например, проверьте версию:
[root@containerd ~]# ctr version
Client:
Version: v1.7.3
Revision: 7880925980b188f4c97b462f709d0db8e8962aff
Go version: go1.20.6
Server:
Version: v1.7.3
Revision: 7880925980b188f4c97b462f709d0db8e8962aff
UUID: 3e9b45dc-8dec-4b0f-b61f-01db90653f3c
мы знаем Docker CLI инструмент обеспечивает необходимость улучшения пользовательского опыта за счет функций, контейнеров и такой жетакжепоставлятьодинпереписыватьсяиз CLI инструмент:ctr
,но ctr из Функция Нет docker Идеально, но основные функции зеркаликонтейнериз все есть. Далее мы кратко представим ctr
изиспользовать。
помощь
Прямой ввод ctr
Заказ Получить всю актуальную информацию об операциях Заказиспользовать способами:
ctr
NAME:
ctr -
__
_____/ /______
/ ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/
containerd CLI
USAGE:
ctr [global options] command [command options] [arguments...]
VERSION:
v1.7.3
DESCRIPTION:
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.
COMMANDS:
plugins, plugin Provides information about containerd plugins
version Print the client and server versions
containers, c, container Manage containers
content Manage content
events, event Display containerd events
images, image, i Manage images
leases Manage leases
namespaces, namespace, ns Manage namespaces
pprof Provide golang pprof outputs for containerd
run Run a container
snapshots, snapshot Manage snapshots
tasks, t, task Manage tasks
install Install a new package
oci OCI tools
sandboxes, sandbox, sb, s Manage sandboxes
info Print the server info
shim Interact with a shim directly
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug Enable debug output in logs
--address value, -a value Address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
--timeout value Total timeout for ctr commands (default: 0s)
--connect-timeout value Timeout for connecting to containerd (default: 0s)
--namespace value, -n value Namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
--help, -h show help
--version, -v print the version
Вытащить изображение
Вытащить изображение Можетиспользовать ctr image pull
для завершения, например, вытягивание Docker Hub Официальное изображение nginx:alpine
,Следует отметить, что из зеркала и в адресе требуется плюс. docker.io
Host адрес:
$ ctr image pull docker.io/library/nginx:alpine
docker.io/library/nginx:alpine: resolved |++++++++++++++++++++++++++++++++++++++|
index-sha256:1713c88213a02f5595dd34520e9b7b26aa58dbfd192cf55b57209507dd7ed113: done |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:2d4efe74ef541248b0a70838c557de04509d1115dec6bfc21ad0d66e41574a8a: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:768e67c521a97f2acf0382a9750c4d024fc1e541e22bab2dec1aad36703278f1: done |++++++++++++++++++++++++++++++++++++++|
config-sha256:4937520ae206c8969734d9a659fc1e6594d9b22b9340bf0796defbea0c92dd02: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4db1b89c0bd13344176ddce2d093b9da2ae58336823ffed2009a7ea4b62d2a95: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:bd338968799fef766509223449d72392692f1f56802da9059ae3f0965c2885e2: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:6a107772494d184e0fddf5d99c877e2fa8d07d1d47b714c17b7d20eba1da01c6: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:9f05b0cc5f6e8010689a6331bad9ca02c62caa226b7501a64d50dcca0847dcdb: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4c5efdb87c4a2350cc1c2781a80a4d3e895447007d9d8eac1e743bf80dd75c84: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:c8794a7158bff7f518985e76c590029ccc6b4c0f6e66e82952c3476c095225c9: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:8de2a93581dcb1cc62dd7b6e1620bc8095befe0acb9161d5f053a9719e145678: done |++++++++++++++++++++++++++++++++++++++|
elapsed: 13.3s total: 16.2 M (1.2 MiB/s)
unpacking linux/amd64 sha256:1713c88213a02f5595dd34520e9b7b26aa58dbfd192cf55b57209507dd7ed113...
done: 636.92611ms
Также можно использовать --platform
Опция указывает соответствующее иззеркало платформы. Конечно, в соответствии с из, есть еще и зеркалоиз Заказ. ctr image push
,еслидачастныйзеркалоносуществовать Толкатьизкогда Можетпроходить --user
Настройте склад по имени пользователя и паролю.
Получение списка локальных зеркал
ctr image ls
использовать -q(--quiet)
Возможность распечатать только имя изображения.
Обнаружить локальное зеркало
ctr image check
Основной вид, а именно STATUS
,complete
Указывает на то, что зеркало полностью исправно и доступно.
переименовывать
такой жеиз Мы также можем переименовать назначенный иззеркалодин Tag:
$ ctr image tag docker.io/library/nginx:alpine harbor.boysec.cn/course/nginx:alpine
harbor.boysec.cn/course/nginx:alpine
$ ctr image ls -q
docker.io/library/nginx:alpine
harbor.boysec.cn/course/nginx:alpine
Удалить изображение
ненужныйиспользоватьиззеркало Также можно использовать ctr image rm
Чтобы удалить:
$ctr image rm harbor.boysec.cn/course/nginx:alpine
harbor.boysec.cn/course/nginx:alpine
$ctr image ls -q
docker.io/library/nginx:alpine
плюс --sync
Опции можно синхронизировать Удалить изображение Все по теме из ресурсов.
Установите зеркало в каталог хоста прибытия.
$ ctr image mount docker.io/library/nginx:alpine /mnt
sha256:e65db1c2e5cc19ab93e734e2b72a2da80e3b8885d5bb57826fb3d6e2598e054f
/mnt
$ tree -L 1 /mnt
/mnt
├── bin
├── dev
├── docker-entrypoint.d
├── docker-entrypoint.sh
├── etc
├── home
├── lib
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
└── var
18 directories, 1 file
Удалите каталог хоста «зеркало»
$ ctr image unmount /mnt
/mnt
Экспортировать зеркало в сжатую упаковку.
$ ctr image export --all-platforms nginx.tar.gz docker.io/library/nginx:alpine
от Сжатый пакет импортного зеркала
$ ctr image import nginx.tar.gz
Прямой импорт может выглядеть аналогично ctr: content digest sha256:xxxxxx not found
изError, для решения этого метода необходим pull Все изображения платформы:
$ ctr i pull --all-platforms docker.io/library/nginx:alpine
$ ctr i export --all-platforms nginx.tar.gz docker.io/library/nginx:alpine
$ ctr i rm docker.io/library/nginx:alpine
$ ctr i import nginx.tar.gz
контейнер Связанные операции можно выполнить с помощью ctr container
Получать.
Создать контейнер
$ ctr container create docker.io/library/nginx:alpine nginx
список контейнеров
$ ctr container ls
CONTAINER IMAGE RUNTIME
nginx docker.io/library/nginx:alpine io.containerd.runc.v2
такой же Можетплюс -q
Краткий список опций:
$ ctr container ls -q
nginx
Просмотр подробной конфигурации контейнера
Похоже на: docker inspect
Функция.
$ ctr container info nginx
{
"ID": "nginx",
"Labels": {
"io.containerd.image.config.stop-signal": "SIGQUIT",
"maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
},
"Image": "docker.io/library/nginx:alpine",
"Runtime": {
"Name": "io.containerd.runc.v2",
"Options": {
"type_url": "containerd.runc.v1.Options"
}
},
"SnapshotKey": "nginx",
"Snapshotter": "overlayfs",
"CreatedAt": "2023-08-08T07:36:38.542046272Z",
"UpdatedAt": "2023-08-08T07:36:38.542046272Z",
"Extensions": {},
"SandboxID": "",
"Spec": {
......
Удалить контейнер
$ ctr container rm nginx
$ ctr container ls
CONTAINER IMAGE RUNTIME
удалять Понятноиспользовать rm
ребенок Заказснаружи Также можно использовать delete
или ВОЗ del
Удалить контейнер。
Выше мы приводим container create
Заказал создание изконтейнера, и нет в рабочем состоянии, всего один статический изконтейнер. один container Объект содержит только ресурсы, необходимые для запуска одинконтейнера, и соответствующие данные конфигурации, указывающие namespaces、rootfs иконтейнериз Конфигурация успешно инициализирована, но пользовательский процесс все еще не запущен.
одинконтейнер действительно работает Task Задачареализацияиз,Задача Вы можете настроить сетевую карту с помощью Контейнера, а также можете использовать Инструмент Конфигурации для мониторинга контейнерожидания.
Task Связанные операции можно выполнить с помощью ctr task
Получите, следуйте за нами Task Чтобы запустить контейнер:
$ ctr container create docker.io/library/nginx:alpine nginx
# ctr task start -d nginx Ниже приведены отчеты об ошибках. runC сообщает об Надо сделать ремонт
# ctr: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/default/nginx/log.json: no such file or directory): runc did not terminate successfully: exit status 127: unknown
$ ctr task start -d nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
запускатьконтейнерназад Можетпроходить task ls
Проверятьтолькосуществоватьбегатьизконтейнер:
$ ctr task ls
TASK PID STATUS
nginx 2121 RUNNING
такой же Также можно использовать exec
Команда поступает в контейнер для работы:
$ ctr task exec --exec-id 0 -t nginx sh
/ #
Однако здесь следует отметить, что необходимо указать --exec-id
параметр,этот id Вы можете написать все, что захотите, главное, чтобы это было уникально.
паузаконтейнер,и docker pause
Аналогичные функции:
$ ctr task pause nginx
После паузы статус контейнера становится PAUSED
:
$ ctr task ls
TASK PID STATUS
nginx 2121 PAUSED
такой же Также можно использовать resume
Команда для восстановления контейнера:
$ ctr task resume nginx
$ ctr task ls
TASK PID STATUS
nginx 2121 RUNNING
Но нужно обратить внимание ctr Нет stop Функция контейнеризации может только приостановить или уничтожить контейнер. убить контейнер можно использовать task kill
Заказ:
$ ctr task kill nginx
$ ctr task ls
TASK PID STATUS
nginx 2121 STOPPED
Убив контейнер, вы увидите, что статус приезжатьконтейнериз изменился. STOPPED
。такой жетакже Можетпроходить task rm
команда удаления Task:
$ ctr task rm nginx
$ ctr task ls
TASK PID STATUS
Кроме того, мы также можем получить контейнериз cgroup Сопутствующая информация, можно использовать task metrics
Заказ используется для получения контейнериз памяти и процессора. и PID изпределы ииспользоватьколичество。
# Перезапустить контейнер
$ ctr task metrics nginx
ID TIMESTAMP
nginx seconds:1691481224 nanos:147205514
METRIC VALUE
memory.usage_in_bytes 1814528
memory.limit_in_bytes 9223372036854771712
memory.stat.cache 12288
cpuacct.usage 20856699
cpuacct.usage_percpu [20856699]
pids.current 2
pids.limit 0
возвращаться Можетиспользовать task ps
Заказ Просмотреть все процесссуществоватьхосты в контейнериз PID:
$ ctr task ps nginx
PID INFO
2294 -
2321 -
$ ctr task ls
TASK PID STATUS
nginx 2294 RUNNING
в Нет.один PID 2294
то естьнасконтейнерсерединаиз 1 номер процесса.
кроме того Containerd пространство также поддерживается в Китае концепция имениз, такая как просмотр космоса имен:
$ ctr ns ls
NAME LABELS
default
Если не указано, ctr Использование по умолчанию default
космос。такой же Также можно использовать ns create
Заказсоздаватьодинпространство имен:
$ ctr ns create test
$ ctr ns ls
NAME LABELS
default
test
использовать remove
или ВОЗ rm
Можно удалить namespace:
$ ctr ns rm test
test
$ ctr ns ls
NAME LABELS
default
иметь Понятнопространство После имен можно указать, когда существует ресурс, из пространство имен, например просмотр test пространство имениззеркало,Можетсуществовать Держатьделать Заказпозжеплюс -n test
Параметры:
$ ctr -n test image ls
REF TYPE DIGEST SIZE PLATFORMS LABELS
мы знаем Docker Фактически, это также вызов по умолчанию. контейнер, на самом деле Docker использоватьиз containerd Подземное пространство имена По умолчанию moby
,и Нетда default
,所к假如насиметь用 docker Запустите контейнер, тогда мы также сможем отправить ctr -n moby
Чтобы найти изконтейнер ниже:
$ ctr -n moby container ls
такой же Kubernetes Внизиспользоватьиз containerd по умолчаниюпространство имена это k8s.io
,所кнас Можетиспользовать ctr -n k8s.io
Приходите и посмотрите Kubernetes Создайте изконтейнер ниже.
Запрос при выполнении команды runc:
[root@containerd tools]# runc
runc: symbol lookup error: runc: undefined symbol: seccomp_notify_respond
Решение:
этотдасказать не хватаетполагаться Сумкаlibseccomp
,нужно вниманиеиздаcentos7
серединаyumскачатьиз Версияда2.3из,Версия не соответствует нашим последним требованиям контейнерного бизнеса.,Нужно скачать версию 2.4 или выше из
[root@containerd tools]# wget http://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm
[root@containerd tools]# rpm -Uvh libseccomp-2.5.1-1.el8.x86_64.rpm