Maison  >  Article  >  Opération et maintenance  >  Qu'est-ce que runc dans Docker

Qu'est-ce que runc dans Docker

青灯夜游
青灯夜游original
2021-12-30 15:45:576538parcourir

Dans Docker, RunC est un outil CLI permettant de créer et d'exécuter des conteneurs selon les normes OCI, un outil de ligne de commande pour exécuter des conteneurs qui suivent les normes OCI. runC est la partie centrale de docker. La création, l'exécution, la destruction et d'autres opérations du conteneur seront éventuellement complétées par l'appel de runc.

Qu'est-ce que runc dans Docker

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, version docker-1.13.1, ordinateur Dell G3.

OCI définit la norme d'exécution du conteneur, et runC est une implémentation spécifique développée par Docker conformément à la norme de format de conteneur ouvert Open Container Format, OCF.

Ce projet est migré depuis le libcontainer de Docker et implémente des fonctions telles que le démarrage et l'arrêt du conteneur, l'isolation des ressources, etc. Par conséquent, le conteneur peut être exécuté directement via cet outil.

Introduction

Le soi-disant environnement d'exécution de conteneur (Container Runtime) comprend la gestion des conteneurs et l'imagerie des conteneurs, OCI est la norme de l'industrie pour l'exécution de conteneurs, comprenant :

A) Norme d'exécution runtime-spec

B) Norme d'image de conteneur image-spec.

En termes simples, la norme d'image de conteneur définit la forme d'emballage de l'image de conteneur et la norme d'exécution définit comment exécuter un conteneur.

RunC est un outil CLI qui crée et exécute des conteneurs selon les normes OCI. Il s'agit d'un outil de ligne de commande pour exécuter des conteneurs qui suivent les normes OCI.

Docker

Dans l'ancienne version, vous devez appeler docker-runc, mais dans la dernière version CE, il est directement modifié à la commande runc. docker-runc ,而最新的 CE 版本里,直接修改为了 runc 命令。

Quest-ce que runc dans Docker

RunC 作为容器的最底层运行环境,其上层通过 Docker 进行管理。

runC就是docker中最为核心的部分,容器的创建,运行,销毁等等操作最终都将通过调用runc完成。

独立运行

RunC 作为容器的运行态,不包含镜像的管理,如果直接使用,需要先准备好镜像,这里直接使用已经构建好的 BusyBox 模板。

OCI Bundle

OCI Bundle 是指满足 OCI 标准的一系列文件,这些文件包含了运行容器所需要的所有数据,它们存放在一个共同的目录,该目录包含以下两项:

  • config.json 包含容器运行的配置数据;
  • 容器的 root filesystem 。

如果主机上安装了 Docker,那么可以使用 docker export 命令将已有镜像导出为 OCI Bundle 的格式。

生成 rootfs

直接使用 Docker 中的 BusyBox 模板。

----- 下载最新的版本
$ docker pull busybox

----- 创建rootfs
$ mkdir rootfs
$ docker export $(docker create busybox) | tar -C rootfs -xvf -

配置文件

rootfs 目录下,包含了常见的二进制文件,除了根目录之外,还需要一个 config.json 配置文件,可以通过 runc spec 命令生成配置模板。

详细的配置可以参考 https://github.com/opencontainers/runtime-spec/blob/master/spec.md

将配置文件中的 "terminal": true 修改为 false ,否则会在创建的时候会宝 cannot allocate tty if runc will detach without setting console socket 报错。

另外,因为关闭了终端,所以将命令修改为 "args": [ "sleep", "10000" ], 参数。

启动

----- 创建容器并查看状态
# runc create mybusybox
# runc list

----- 启动容器,并查看状态
# runc start mybusybox

----- 删除容器
# runc delete mybusybox

在启动了之后,可以通过 ps aux | grep sleep

Quest-ce que runc dans Docker

RunC En tant qu'environnement d'exécution le plus bas du conteneur, sa couche supérieure est gérée via Docker.
runC est la partie centrale de docker. La création, l'exécution, la destruction et d'autres opérations du conteneur seront éventuellement complétées par l'appel de runc.

Exécuter indépendamment

RunC est l'état d'exécution du conteneur et n'inclut pas la gestion des images. Si vous l'utilisez directement, vous devez d'abord préparer l'image. Ici, vous pouvez directement utiliser le. modèle BusyBox déjà construit.

OCI Bundle

🎜🎜🎜OCI Bundle fait référence à une série de fichiers qui répondent à la norme OCI. Ces fichiers contiennent toutes les données nécessaires à l'exécution du conteneur. Ils sont stockés dans un répertoire commun, qui contient les deux éléments suivants. : 🎜
  • config.json Contient les données de configuration pour l'exécution du conteneur
  • Le système de fichiers racine du conteneur.
🎜Si Docker est installé sur l'hôte, vous pouvez utiliser la commande docker export pour exporter l'image existante au format OCI Bundle . 🎜🎜🎜🎜Générer rootfs🎜🎜🎜🎜Utilisez le modèle BusyBox directement dans Docker. 🎜🎜
----- 查看容器状态
# runc state mybusybox

----- 容器内运行进程
# runc ps mybusybox

----- 在容器中执行命令
# runc exec mybusybox ls

----- 停止容器内的任务
# runc kill mybusybox

----- 暂停容器内的所有进程
# runc pause mybusybox

----- 恢复容器内进程的执行
# runc resume mybusybox

----- 获取容器的资源使用情况
# runc events mybusybox
🎜🎜🎜🎜Le fichier de configuration🎜🎜🎜🎜 se trouve dans le répertoire rootfs, qui contient les fichiers binaires courants en plus du répertoire racine, vous avez également besoin d'un fichier de configuration config.json pouvant générer un modèle de configuration via la spécification runc code> commande. 🎜🎜Pour une configuration détaillée, veuillez vous référer à https://github.com/opencontainers/runtime-spec/blob/master/spec.md🎜🎜Modifiez le <code class="langage-plaintext highlighter-rouge">"terminal dans le fichier de configuration ":true est remplacé par faux, sinon ce sera impossible lors de la création, allouez tty si runc se détache sans définir le socket de la console signale une erreur. 🎜🎜De plus, le terminal étant fermé, la commande est modifiée en paramètres "args": [ "sleep", "10000" ],. 🎜🎜🎜🎜Démarrer🎜🎜🎜🎜rrreee🎜🎜Après le démarrage, vous pouvez voir les commandes spécifiques via ps aux | grep sleep. 🎜🎜Commandes communes🎜🎜rrreee🎜🎜La migration à chaud🎜🎜 consiste à effectuer une opération CheckPoint sur un conteneur et à obtenir une série de fichiers, puis à la démarrer sur d'autres machines. 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo Docker🎜"🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn