8 бесплатных альтернатив Docker на 2022 год
В августе 2021 года Docker Desktop перестал быть бесплатным для компаний, в которых работает 250+ сотрудников или доход которых превышает $10 млн. Однако есть масса альтернативных инструментов, которые порой дают даже лучший результат, чем Docker. О восьми лучших, которые пригодятся вам в 2022 году, рассказываем далее.
Примечание: каждый инструмент, рассматриваемый ниже, придерживается спецификации Open Containers Initiative (OCI).
Контейнерный движок с открытым исходным кодом, разработанный компанией Red Hat. Одна из наиболее известных альтернатив Docker для создания, запуска и хранения образов контейнеров. Podman, как и Docker, поддерживает совместимость со спецификацией образа контейнера OCI, то есть может запускать образы контейнеров, созданные Docker, и наоборот.
Интерфейс командной строки Podman идентичен интерфейсу Docker, включая аргументы. Можно просто переименовать команду docker
в podman
, и даже не заметить разницы, что упрощает переход на Podman для текущих пользователей Docker:
# .bashrc alias docker=podman
В отличие от Docker, который использует докер-демон для управления всеми контейнерами, находящимися под его контролем, Podman не имеет демона. Поэтому нет постоянного соединения с каким-то долгоживущим процессом, что устраняет проблему единой точки отказа в Docker, когда внезапный сбой в процессе демона может «убить» запущенные контейнеры.
Podman взаимодействует с реестром образов, хранилищем и ядром Linux, а его контейнеры не зависят от какого-либо центрального процесса. Вместо этого контейнеры запускаются как дочерние процессы процесса Podman, в значительной степени используя пространства имен пользователей и сетевые пространства имен.
Podman также отличается от Docker тем, что по умолчанию использует контейнеры без рута. Root-доступ не требуется для запуска и работы контейнера, но он помогает смягчить потенциальные уязвимости в среде выполнения контейнера, которые могут привести к повышению привилегий.
Стоит отметить, что Docker с недавних пор поддерживает rootless-режим, который появился в качестве экспериментальной функции в Docker Engine v19.03, а затем был стабилизирован в v20.10. Однако его использование еще не получило широкого распространения в экосистеме.
Еще одна функция Podman, которой еще нет в Docker, — это возможность создавать и запускать так называемые поды (pods) — группы контейнеров, развернутые совместно. Поды также — наименьшая единица выполнения в Kubernetes, что, при необходимости, облегчает переход на Kubernetes.
Альтернатива Docker для создания образов. Инструмент также разработан компанией Red Hat и часто используется в связке с Podman. Последний использует часть функциональности Buildah для реализации своей подкоманды build
.
Если нужен точечный контроль над образами, можно использовать инструмент Buildah CLI. На момент написания статьи Buildah работает на нескольких дистрибутивах Linux, но не поддерживается на Windows или macOS.
Образы, которые создает Buildah, полностью соответствуют спецификации OCI и работают так же, как образы, созданные с помощью Docker. Buildah также может создавать образы с помощью существующий Dockerfile
или Containerfil
e, что значительно упрощает миграцию. Buildah позволяет использовать Bash-скрипты, которые обходят ограничения Dockerfiles, упрощая автоматизацию процесса.
Как и Podman, Buildah следует модели fork-exec, которая не требует для работы центрального демона или root-доступа.
Одно из преимуществ использования Buildah перед Docker — возможность фиксировать множество изменений на одном уровне. Это востребованная функция среди пользователей контейнеров. С помощью Buildah также можно создать пустой образ контейнера, хранящего только метаданные. Это позволяет добавлять в образ только необходимые пакеты. Конечный результат получается меньше, чем его эквивалент в Docker.
Еще одно отличие заключается в том, что изображения Buildah зависят от пользователя, поэтому ему будут видны только те изображения, которые построены им самим.
Механизм построения образов для Docker, разработанный в рамках проекта Moby. Начиная с Docker v18.09 интегрирован в docker build
, но также поставляется как отдельный инструмент.
Особенности:
Чтобы включить Buildkit перед сборкой образа, нужно использовать переменную окружения DOCKER_BUILDKIT
:
$ DOCKER_BUILDKIT=1 docker build .
При желании можно настроить Docker для использования Buildkit по умолчанию. Для этого нужно отредактировать файл /etc/docker/daemon.json
следующим образом:
{ "features": { "buildkit": true } }
После сохранения файла перезагрузите демон, чтобы изменения вступили в силу:
$ systemctl reload docker
Инструмент для разработки образов контейнеров внутри контейнера или кластера Kubernetes от Google. Как и Buildah, Kaniko не требует демона и может создавать образы из Docker-файлов, не зависят от Docker.
Основное различие между Docker и Kaniko в том, что Kaniko больше ориентирован на рабочие процессы Kubernetes, и предназначен для запуска в виде образа, что делает его неудобным для локальной разработки.
Еще один инструмент от Red Hat для выполнения операций с образами контейнеров и репозиториями образов. Может использоваться как вспомогательный инструмент для Podman и Buildah, которые предназначены для проверки образов, переноса их из одного реестра в другой и массового удаления.
В инструменте есть подкоманда inspect
, которая дает информацию об образе контейнера, аналогичную docker inspect
.
В отличие от Docker, Skopeo может собирать полезную информацию о хранилище или теге без предварительной загрузки:
$ skopeo inspect docker://docker.io/fedora # inspect remote image { "Name": "docker.io/library/fedora", "Digest": "sha256:72c6c48a902baff1ab9948558556ef59e3429c65697287791be3c709738955b3", "RepoTags": [ "20", "21", "22", "23", "24", "25", "26", "26-modular", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "branched", "heisenbug", "latest", "modular", "rawhide" ], "Created": "2021-11-02T21:29:22.547065293Z", "DockerVersion": "20.10.7", "Labels": { "maintainer": "Clement Verna \u003ccverna@fedoraproject.org\u003e" }, "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:fc811dadee2400b171b0e1eed1d973c4aa9459c6f81c77ce11c014a6104ae005" ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "DISTTAG=f35container", "FGC=f35", "FBR=f35" ] }
Команду skopeo copy
можно использовать для копирования образа контейнера из одного удаленного реестра в другой или локальный каталог. Также Skopeo синхронизировать образы между реестрами контейнеров и локальными каталогами. Это можно сделать с помощью команды skopeo sync
.
Инструмент для проверки, анализа и оптимизации образов контейнеров. Может показать содержимое образа по слоям, выделяя различия между каждым из них. Инструмент способен анализировать изображение, предоставляя процентную оценку эффективности, оценивая потерянное пространство, что полезно при попытке уменьшить размер изображения.
Еще одна полезная функция — CI-интеграция, которая выдает результат pass или fail, основываясь на эффективности изображения и количестве потраченного впустую пространства. Чтобы получить доступ к CI-интеграции, при вызове любой dive-команды
установите значение переменной окружения CI
в true
:
runc — это CLI-инструмент, который создает и запускает контейнеры на Linux в соответствии со OCI-спецификацией. runc ранее был встроен в Docker в качестве модуля, но в 2015 году стал отдельным инструментом.
runc остается контейнерной средой выполнения по умолчанию в Docker, Podman и большинстве других контейнерных движков.
Альтернатива runc, которая разработана компанией RedHat и написана на языке C, а не на Go, как большинство контейнерных инструментов Linux.
Инструмент может похвастаться более высокой производительностью и меньшим использованием памяти по сравнению с runc, а также возможностью устанавливать более строгие ограничения на память, допустимую в контейнере. crun также совместим с OCI и функционально совместим с runc, поэтому можно использовать его в качестве замены runc в Docker, Podman, containerd
и любом другом контейнерном движке, который использует OCI-совместимые контейнерные среды выполнения.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…