Как использовать Docker для упаковки приложений CLI — CloudSavvy IT

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

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Вот как вы можете использовать Docker для упаковки приложений CLI вместо традиционных диспетчеров пакетов ОС и автономных двоичных загрузок.

Зачем использовать Docker для приложений CLI?

Docker может ускорить и упростить пользователям установку вашей новой утилиты. Они могут запустить ваше приложение в докере вместо того, чтобы искать инструкции по установке для конкретной платформы. Не требуется ручное извлечение tar-архивов, копирование в системные папки или редактирование PATH.

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

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

Одним из естественных следствий Dockerized-распространения является требование, чтобы у пользователей уже был запущен Docker на их машинах. В настоящее время многие разработчики будут запускать его как само собой разумеющееся, так что это довольно безопасный выбор. Если вы беспокоитесь о том, чтобы заблокировать пользователей, которые не хотят использовать Docker, вы все равно можете предоставить альтернативные варианты через существующие каналы распространения.

Создание образа Docker для приложения CLI

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

Обычно лучше всего начинать с минимального базового образа, на котором работает оптимизированная операционная система, такая как Alpine. Добавьте только те пакеты, которые требуются вашему программному обеспечению, такие как язык программирования, фреймворк и зависимости.

Две важные инструкции Dockerfile для инструментов CLI — это ENTRYPOINT и CMD. Вместе они определяют процесс переднего плана, который будет запускаться при запуске контейнеров из вашего образа. Большинство базовых образов по умолчанию запускают оболочку при запуске контейнера. Вы должны изменить это, чтобы ваше приложение запускалось автоматически, избавляя пользователей от необходимости вручную запускать его в контейнере.

Инструкция ENTRYPOINT Dockerfile определяет процесс переднего плана контейнера. Установите это в исполняемый файл вашего приложения:

ВХОДНАЯ ТОЧКА [«demo-app»]

Инструкция CMD работает в паре с ENTRYPOINT. Он предоставляет аргументы по умолчанию для команды, установленной в ENTRYPOINT. Аргументы, которые пользователь предоставляет при запуске контейнера с помощью docker run, переопределяют CMD, установленный в Dockerfile.

Хорошо использовать CMD, когда вы хотите показать некоторую основную справку или информацию о версии, когда пользователи опускают определенную команду:

ВХОДНАЯ ТОЧКА [«demo-app»]CMD [«—version»]

Вот несколько примеров, показывающих, как эти две инструкции приводят к запуску разных команд при создании контейнеров:

# Запуск нового контейнера из образа «demo-app-image:latest» # Запускает «demo-app —version» docker run demo-app-image:latest # Запускает «demo-app demo —foo bar» docker run demo-app-image:последняя демонстрация —foo bar

Ни в одном из примеров пользователю не требуется вводить имя исполняемого файла демо-приложения. Он автоматически используется как процесс переднего плана, потому что это настроенная ENTRYPOINT. Команда получает аргументы, которые пользователь передал для запуска докера, после имени образа. Если аргументы не указаны, используется значение по умолчанию —version.

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

Собираем вместе

Вот образ Docker, который запускает простое приложение Node.js:

#!/usr/local/bin/node console.log(«Hello World»); ОТ узла: 16-alpine WORKDIR /hello-world COPY ./ . ЗАПУСК npm установить ENTRYPOINT [«hello-world.js»]

Вариант базового образа Node на основе Alpine используется для уменьшения общего размера образа. Исходный код приложения копируется в файловую систему образа с помощью инструкции COPY. Устанавливаются зависимости проекта npm, а скрипт hello-world.js устанавливается в качестве точки входа образа.

Соберите образ с помощью сборки докера:

docker build -t demo-app-image: последний

Теперь вы можете запустить образ, чтобы увидеть, как Hello World передается на ваш терминал:

docker run demo-app-image: последний

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

Управление постоянными данными

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

Вы должны записывать данные по четко определенным путям, по которым пользователи могут монтировать тома. Рекомендуется группировать все ваши постоянные данные в одном каталоге, например /data. Избегайте использования слишком большого количества местоположений, требующих подключения нескольких томов. В руководстве по началу работы должны быть описаны тома, которые нужны вашему приложению, чтобы пользователи могли настроить сохраняемость при создании своего контейнера.

# Запустить демо-приложение с томом данных, подключенным к /data docker run -v demo-app-data:/data demo-app-image:latest

Другие возможные проблемы

Проблема с монтированием возникает снова, когда вашей команде необходимо взаимодействовать с файлами в файловой системе хоста. Вот простой пример инструмента для загрузки файлов:

docker запустить загрузчик файлов cp example.txt demo-server:/example.txt

Это заканчивается поиском example.txt в пределах контейнер. В этой ситуации пользователям нужно будет связать mount свой рабочий каталог, чтобы его содержимое было доступно для контейнера:

docker run -v $PWD:/file-uploader file-uploader cp example.txt demo-server:/example.txt

Также важно подумать о том, как пользователи будут передавать значения конфигурации вашему приложению. Если вы обычно читаете файл конфигурации, имейте в виду, что пользователям нужно будет смонтировать его в каждый создаваемый ими контейнер. Предлагая альтернативные параметры, такие как флаги командной строки и переменные среды, можно упростить работу с простыми вариантами использования:

# Установка переменной среды LOGGING_DRIVER в контейнере docker run -e LOGGING_DRIVER=json demo-app-image:latest

Еще одна проблема касается интерактивных приложений, требующих ввода данных пользователем. Пользователям необходимо передать флаг -it в docker run, чтобы включить интерактивный режим и выделить псевдо-TTY:

docker run -it demo-app-image: последний

Пользователи должны не забывать устанавливать эти флаги, когда это необходимо, иначе ваша программа не сможет собирать какие-либо входные данные. Вы должны задокументировать команды, которым требуется TTY, чтобы пользователи не были застигнуты врасплох неожиданными ошибками.

Эти точки преткновения означают, что Dockerized-приложения могут стать громоздкими, если они специально не разработаны с учетом контейнеризации. Пользователи получают лучший опыт, когда ваши команды чисты, не требуют взаимодействия с файловой системой и минимальной настройки. Когда это возможно, простое имя образа запуска докера выполняет задачу простой установки и использования. Вы по-прежнему можете помещать в контейнеры более сложное программное обеспечение, но вы все больше зависите от пользователей, хорошо разбирающихся в интерфейсе командной строки Docker и его концепциях.

Резюме

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

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

Создание образа Docker обычно не более сложно, чем подпрограммы, которые вы уже используете для отправки сборок в различные диспетчеры пакетов ОС. Наиболее важными соображениями являются сохранение как можно меньшего размера вашего образа и обеспечение того, чтобы точка входа и команда соответствовали вашему приложению. Это даст пользователям наилучшие возможности при использовании вашего Dockerized программного обеспечения.

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.