🐳 Разница между chroot и Docker |

🐳 Разница между chroot и Docker

Статьи

Обзор

Изоляция процессов – важный аспект операционной системы Linux.

В частности, она позволяет нескольким процессам выполняться на одной машине без риска вмешательства в их работу.

Кроме того, механизм изоляции процессов в операционной системе Linux обеспечивает эти преимущества без типичных затрат, которые несут виртуальные машины.

Команда chroot на Linux и программное обеспечение Docker широко известны своей способностью изолировать процессы в рамках одной операционной системы.

В этом руководстве мы узнаем разницу между командой chroot и программным обеспечением Docker.

Команда chroot

Команда chroot – это команда Linux, которая изменяет корневой каталог запущенного процесса.

Она существует с 1979 года, с первых дней существования Unix-подобных операционных систем.

Основная цель команды – изолировать файловую систему между различными процессами.

Изолированная среда, создаваемая командой chroot, обычно называется jail.

🐧 Как разрешить выполнение приложений с sudo в определенном каталоге на Linux

Предполагая, что каталог /opt/fake-root был инициализирован как правильный jail, мы можем запустить chroot на новом процессе и установить /opt/fake-root в качестве его корневого каталога:

sudo chroot /opt/fake-root /bin/bash

Приведенная выше команда запускает новый процесс, в котором выполняется двоичный файл /bin/bash.

Примечательно, что корневым каталогом нового процесса теперь является /opt/fake-root.

Следовательно, его активность в файловой системе ограничивается каталогом /opt/fake-root.

Docker

Docker – это технология контейнеризации, которая обеспечивает виртуализацию на уровне операционной системы (ОС).

Многие компоненты в программном комплексе Docker работают вместе, чтобы обеспечить механизм контейнеризации.

Во-первых, компоненты контейнера Docker в программном обеспечении Docker обеспечивают изолированную среду для запущенного процесса, подобно jail в chroot.

Это позволяет запускать на одном хосте множество различных рабочих нагрузок, которые могут иметь конфликтующие зависимости.

Кроме того, образ Docker служит шаблоном, содержащим инструкции по созданию контейнера Docker.

Обычно мы создаем образ Docker на основе Dockerfile.

Dockerfile содержит пошаговые инструкции по созданию контейнера.

🐳 Краткое введение в Dockerfile

Вот пример Dockerfile, который создает образ Docker:

cat Dockerfile
FROM alpine:latest
CMD ["echo", "Hello world"]

Dockerfile расширяется за счет базового образа alpine с последним тегом.

Директива CMD задает команду, которая будет выполняться при запуске контейнера.

В нашем случае контейнер запустится и выведет в консоль сообщение «Hello world».

Разница между chroot и Docker

На первый взгляд, команда chroot и программное обеспечение Docker обеспечивают изоляцию между процессами на одном экземпляре ОС.

Однако между командой chroot и программным обеспечением Docker больше различий, чем сходств.

В последующих разделах мы подчеркнем разницу между командой chroot и контейнером Docker, сравнив несколько аспектов.

Область применения

Команда chroot – это отдельный бинарный файл, который делает одну вещь: изменяет видимый корневой каталог процесса.

Команда chroot не предлагает команд управления, таких как получение списка закрытых процессов.

С другой стороны, программный пакет Docker представляет собой комплексную платформу для контейнеризации.

Помимо изоляции процессов и виртуализации, команда docker в программном пакете Docker упрощает создание и использование контейнера.

Например, docker ps – это команда, с помощью которой можно вывести список запущенных в данный момент контейнеров:

docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS          PORTS                       NAMES
7f06453c2cab   kindest/node:v1.29.1   "/usr/local/bin/entr…"   6 weeks ago    Up 7 days       127.0.0.1:54170->6443/tcp   kind-control-plane
084a35380563   postgres:16.1          "docker-entrypoint.s…"   2 months ago   Up 2 days       0.0.0.0:5432->5432/tcp      quant_data_download_pg
87be3ef80b11   ubuntu:latest          "sleep infinity"         4 months ago   Up 49 minutes                               ubuntu

Кроме того, мы можем запустить контейнер Docker с помощью команды docker run:

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Чтобы очистить контейнер, мы можем выполнить docker rm для остановленных контейнеров:

docker rm amazing_elbakyan
amazing_elbakyan

В целом, команда chroot – это относительно простая программа по сравнению с программным обеспечением Docker.

Переносимая и многократно используемая копия контейнера

Концепция образа Docker имеет решающее значение для широкого распространения контейнерной технологии.

После создания образ Docker становится переносимым артефактом, которым можно легко поделиться с другими.

Образ Docker может воспроизводить ту же копию контейнера, что и создатель образа Docker.

Это значительно снижает трудности при распространении приложений из-за различий в окружении.

Многие популярные программы, включая PostgreSQL, Redis и Nginx, распространяются в формате образов Docker.

Кроме того, многократное использование и расширяемость контейнеров Docker также значительно снижает кривую обучения этой технологии.

Начинающий пользователь может поиграть с существующим образом Docker, чтобы понять, как он работает.

Затем можно постепенно наращивать существующий образ.

Без образа Docker кривая обучения была бы намного круче, поскольку нам пришлось бы начинать создавать контейнер с нуля.

С другой стороны, среда chroot не имеет такого же уровня многократного использования и возможностей распространения.

Когда мы создаем изолированную среду с помощью команды chroot, она, как правило, предназначена для конкретного случая использования.

Кроме того, отсутствие стандартизации среды chroot затрудняет ее распространение и совместное использование среди более широкой аудитории.

Использование пространств имен Linux

Еще одно огромное различие между chroot и контейнером Docker – это их механизм изоляции.

Команда chroot изолирует файловую систему, «изменяя компонент в процессе разрешения имени пути и не делая ничего другого», как говорится на ее man-странице.

В отличие от нее, Docker использует механизм пространств имен Linux для обеспечения изоляции различных компонентов на уровне ОС.

Среди таких пространств имен – идентификатор процесса (PID), сетевой стек и идентификаторы пользователей.

Это означает, что разные контейнеры на одном хосте получают изолированное представление PID, сетевого стека и UID.

Важно отметить, что мы можем ограничить вычислительные ресурсы для контейнеров с помощью пространств имен групп управления (cgroups).

С другой стороны, chroot не имеет возможности ограничить использование вычислительных ресурсов.

Например, мы можем установить верхнюю границу на потребление CPU и RAM с помощью опций -cpus и -memory, соответственно:

docker run --cpus 1 --memory 256m ubuntu

Приведенная выше команда ограничивает процессор одним ядром, а оперативную память – 256 МБ.

Процесс внутри контейнера не может использовать больше, чем установленный нами лимит.

Заключение

В этом руководстве  мы кратко познакомились с командой chroot и программным пакетом Docker.

Затем мы подчеркнули разницу между этими двумя командами в различных аспектах. Например, программный пакет Docker охватывает гораздо большую область, чем команда chroot.

Кроме того, мы узнали, что Docker упрощает повторное использование контейнеров с помощью конструкции образа Docker.

И наконец, мы узнали, что под капотом у обеих систем используются совершенно разные механизмы для достижения изоляции.

см. также:

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий