Microsoft недавно представила Edit — новый терминальный текстовый редактор, разработанный на языке Rust. Он отличается простым интерфейсом, напоминающим старый добрый nano, но при этом обладает уникальным стилем, навевающим воспоминания о временах MS-DOS. Для многих пользователей Apple Silicon Mac возник вопрос: как запустить этот редактор на их устройствах, ведь официальных сборок под архитектуру ARM64 от Microsoft пока нет? Один из простых и эффективных способов — использование Docker-контейнера, поскольку Microsoft предлагает сборку для платформы aarch64-linux-gnu, совместимую с ARM64. Docker позволяет запускать приложения в изолированной среде и облегчает переносимость программ между разными платформами. В этой статье рассмотрим весь процесс создания, сборки и публикации Docker-образа для Microsoft Edit, чтобы каждый пользователь с Apple Silicon Mac мог комфортно работать с этим редактором.
В самом начале пути была попытка запустить редактор единой командой с помощью Ubuntu-образа. Такая стратегия позволяла установить необходимые зависимости и загрузить сам бинарный файл редактора. Для этого нужно было обновить пакеты, установить curl и zstd, скачать архив с редактором, распаковать его и запустить. Однако за каждым запуском контейнера происходила повторная загрузка и установка зависимостей, что сказывалось на времени старта контейнера и общем удобстве. Последующая попытка использовать Alpine Linux в качестве базового образа оказалась более привлекательной из-за компактного размера Alpine.
Однако возникла проблема: Microsoft Edit компилирован с использованием glibc, а Alpine по умолчанию поставляется с musl — другой библиотекой стандартных функций. Решением стало добавление в контейнер пакета gcompat, эмулирующего необходимые вызовы glibc. Это позволило успешно запускать бинарный файл редактора на Alpine. Тем не менее, описанные выше команды оставались неэффективными из-за повторяющихся скачиваний и установки утилит curl и zstd при каждом запуске контейнера. Оптимальным выходом стала разработка многоступенчатого Dockerfile с использованием многоступенчатой сборки.
Суть подхода: в первом этапе загружаются и распаковываются все файлы, а затем во второй стадии формируется минимальный контейнер, содержащий только необходимые для работы редактора зависимости и сам исполняемый файл. Такой способ значительно снижает размер финального образа и ускоряет запуск. В Dockerfile, предназначенном для этого проекта, в первом этапе используется базовый образ Alpine с пакетами curl и zstd. Здесь происходит загрузка архива с последней версией редактора Microsoft Edit, её распаковка и установка прав на исполнение файла. Во втором этапе создаётся минимальный Alpine-образ, в который добавляются только пакеты gcompat и libgcc — необходимые для запуска бинарного файла.
Затем собранный исполняемый файл копируется из билд-стадии в финальный образ. В результате пользователь получает компактный и быстрый контейнер для запуска редактора при работе с файлами. Конфигурация Dockerfile предусматривает установку рабочей директории в /workspace, что позволяет напрямую подключать текущую папку пользователя с хост-машины. Также ENTRYPOINT настроен на запуск редактора, а по умолчанию запускается редактор на текущей директории. Такой подход обеспечивает удобство и минимизирует необходимость дополнительных настроек со стороны пользователя.
Сборка образа для целевой архитектуры linux/arm64 выполняется с помощью стандартной команды docker build с указанием соответствующей платформы. Тестирование показало, что команда запуска контейнера с привязкой текущей директории пользователя позволяет мгновенно открыть и редактировать нужные файлы с помощью Microsoft Edit. Далее — логичный шаг к публикации готового образа в GitHub Container Registry (GHCR). Этот сервис предоставляет хранилище для Docker-образов с удобным управлением доступом и интеграцией с репозиториями GitHub. Для публикации требуется создать персональный токен доступа (PAT) с нужными правами, в частности с возможностями чтения и записи в пакеты (write:packages и read:packages).
Токен вводится при входе в регистр Docker, после чего можно тегировать локально собранный образ с указанием адреса на GHCR и публиковать его командой docker push. После успешной загрузки образа на GitHub пользователь может настроить видимость пакета, сделав его публичным для широкого круга пользователей. Создаётся отдельный репозиторий с Dockerfile и документацией, чтобы все заинтересованные могли ознакомиться с процессом установки и использования. Интеграция между пакетом и репозиторием на GitHub позволяет обеспечивать актуальность и удобство работы с проектом. Публикация Docker-образов в GHCR имеет ряд преимуществ.
Прежде всего, это возможность удобного распространения приложений без необходимости самостоятельной настройки окружения. Особенно актуально для пользователей Apple Silicon Mac, которым часто приходится сталкиваться с несовместимостью программ с native-архитектурой. Использование контейнеров и GitHub Container Registry снижает барьеры для установки и использования новых инструментов. Кроме того, такая практика способствует внедрению современных подходов к разработке и распространению ПО. Многоступенчатая сборка, минимальный образ и продуманная настройка ENTRYPOINT повышают эффективность и удобство применения.