UfoStation

Создание собственного контейнера меньше чем за 100 строк кода на Golang

Изображение: Создание собственного контейнера меньше чем за 100 строк кода на Golang

Что такое контейнер на самом деле?

Джулиан Фридман хотел бы сыграть с вами в одну игру. Прямо сейчас, скажите про себя, что такое «контейнер». Сказали? Отлично. Посмотрим, сможет ли он угадать, что вы могли сказать. Возможно, вы сказали одно или несколько из следующих утверждений:

— Способ совместного использования ресурсов;
— Изоляция процесса;
— Какой-то облегченный способ виртуализации;
— Упаковка вместе корневой файловой системы и метаданных;
— Что-то вроде “chroot-тюрьмы”;
— Что-то, что делает docker.

А вам не кажется, что слишком это много для одного слова?

Чтобы начать говорить о том, что такое контейнер на более низком уровне, необходимо рассказать о трех вещах:

— пространства имен (namespaces);
— cgroups;
— многоуровневые файловые системы (layered filesystem).

Комментарии вокруг этих понятий, а также как в последствии написать свой контейнер на Golang читайте в этой статье: https://www.infoq.com/articles/build-a-container-golang/

Хотите попрактиковаться? Попробуйте docker challenge от codecrafters.io, где вы разработаете легкий аналог docker и узнаете о chroot, пространствах имен ядра, docker registry API и многом другом.

Нашли ошибку или опечатку? Предложите исправление