Alpine Linux — это высокопроизводительный, ультраминималистичный дистрибутив, разработанный для виртуальных машин (ВМ), контейнеров Docker и встраиваемых устройств. Я использовал его в течение последних шести месяцев на нескольких ВМ и образах Docker. Здесь я расскажу о причинах, по которым Alpine Linux — лучший легковесный дистрибутив Linux для вашего сервера, а также о некоторых болевых точках при его использовании.

Alpine Linux впервые попался мне на глаза во время изучения libvirt в Red Hat Enterprise Linux (RHEL). Прочитав обзор системы, я создал для нее тестовую виртуальную машину, задаваясь вопросом, сможет ли она заменить мой серверный кластер с большим количеством Ubuntu в RHEL. Имея за плечами около шести месяцев использования, я впечатлен тем, что она может сделать для пакета, с которым идет в комплекте.

1. Он хорошо работает на слабом сервере

Самый большой коммерческий аргумент, который заинтересовал меня в Alpine, заключается в том, что он может работать с ОЗУ объемом всего 128 МБ внутри гипервизора. Это позволяет моему серверу низкого уровня легко запускать несколько экземпляров сервера, не потребляя доступную память.

Терминал, на котором показана работающая Alpine Linux с объемом оперативной памяти всего лишь 128 МБ.

Alpine добилась этого, удалив все ненужные программы и утилиты, которые поставляются с большинством дистрибутивов Linux. Например, он не поставляется со стандартными основными утилитами GNU. Вместо этого он использует Busybox для UNIX-подобных инструментов.

Придя с Ubuntu и RHEL, я действительно нахожу минималистский подход Alpine к его установке по умолчанию освежающим. С ним я редко сражаюсь с операционной системой (ОС) только для того, чтобы заставить ее делать то, что я хочу.

2. Поставляется с несколькими вариантами загрузки

Еще одним преимуществом Alpine является то, что это один из немногих дистрибутивов Linux, предлагающих установочный носитель для нескольких платформ. Помимо x86_64, он также поддерживает ARM SoC, такие как Raspberry Pi, и гипервизоры, такие как Xen.

Скриншот, показывающий различные варианты загрузки Alpine Linux.

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

3. Очень легко обслуживать и обновлять

Alpine Linux — один из немногих дистрибутивов, который обеспечивает беспроблемный опыт работы с сервером Linux. Прямо из коробки он поставляется с APK, надежной программой для управления пакетами. За шесть месяцев использования у меня ни разу не было случая, чтобы APK разрешал неправильную зависимость или ломал пакет во время обновления.

Терминал, показывающий быстрое разрешение пакетов в Alpine Linux.

Говоря об обновлениях, менеджер пакетов APK также невероятно быстр. С ним я могу легко обновить свою систему и ее сторонние пакеты в течение 5-10 секунд. Для меня это огромное преимущество, поскольку это значительно сокращает общее время простоя обслуживания моих серверов по сравнению со стандартным дистрибутивом Linux.

4. Отлично запускает Docker-контейнеры

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

Терминал, на котором показан Alpine Linux, работающий с контейнером Docker.

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

Наконец, Alpine Linux также поставляет пакет для Docker и его плагинов в своем репозитории сообщества. Я ценю это, поскольку это сокращает время, необходимое для настройки хоста Docker, и устраняет необходимость поддерживать внешние репозитории.

5. Возможность настройки под различные рабочие нагрузки

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

Alpine — один из немногих дистрибутивов, который обеспечивает «чистый лист» Linux. Это, в сочетании с репозиторием сообщества дистрибутива, означает, что Alpine легко настроить для любых целей, которые вы пожелаете. В моей личной настройке я использую Alpine для моего веб-сервера, моей планеты Urbit и даже моего сервера Minecraft.

Терминал, показывающий исполняемый файл сервера Minecraft, работающий в Alpine Linux.

Alpine Linux также предоставляет различные схемы установки непосредственно из установочного ISO. Например, вы можете настроить Alpine как традиционную систему с жестким диском или создать портативную установку, записав ОС на флэш-накопитель и запустив ее полностью из оперативной памяти.

Минусы использования Alpine Linux

Хотя Alpine Linux — отличная легкая система для серверов, она не лишена недостатков. В этом разделе мы рассмотрим некоторые проблемы, с которыми я столкнулся при использовании дистрибутива.

1. Он использует musl в качестве стандартной библиотеки C.

Самый большой недостаток Alpine Linux заключается в том, что он использует musl вместо glibc для своей стандартной библиотеки C. Поскольку эти две библиотеки различаются в деталях реализации, некоторые программы, использующие особенности glibc, могут работать некорректно в Alpine.

Терминал, показывающий версию musl, используемую Alpine Linux.

Одно заметное различие между musl и glibc — разрешение DNS. В дистрибутивах на основе glibc система последовательно проходит по файлу «/etc/resolv.conf» при попытке разрешения DNS-запросов. Между тем, musl отправляет запрос всем записям параллельно. Иногда это приводит к случаям, когда мой DNS-запрос не выполняется в musl, если на DNS-сервере, который отвечает, нет нужной мне записи.

2. Некоторые пакеты отстают в обновлениях

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

Терминал, отображающий текущую версию Alpine Linux.

Лично для меня это не было большой проблемой при использовании системы в качестве сервера. Однако я столкнулся с проблемой, когда моя система Alpine застряла на версии Tailscale с критической уязвимостью. Тем не менее, я решил ее, переключившись на ветку Alpine rolling release.

3. Использует OpenRC вместо Systemd

Помимо musl и более старых пакетов, одна из проблем, с которой я столкнулся при использовании Alpine Linux, это его система инициализации. В отличие от RHEL и Ubuntu, Alpine использует OpenRC вместо Systemd для управления службами и контроля системных функций.

Терминал, показывающий различные команды OpenRC для управления и проверки служб.

Таким образом, использование Alpine Linux может стать культурным шоком, если вы привыкли работать с файлами служб и системными демонами с помощью Systemd. Хотя я уже знаком с OpenRC через Gentoo, мне пришлось быстро освежить свои знания, прежде чем я смог надежно использовать Alpine в качестве своего сервера.

Сравнение Alpine Linux с популярными легковесными серверными дистрибутивами

Alpine Linux — не единственный легковесный дистрибутив, который я запускал в качестве сервера на своих машинах. В этом разделе мы рассмотрим, как Alpine сочетается с некоторыми популярными минималистскими системами Linux, которые я пробовал на протяжении многих лет.

Ubuntu против Alpine Linux

Ubuntu Linux Server — один из первых дистрибутивов, которые я использовал в качестве серверной ОС. Его простой в использовании установщик вместе с его встроенными приложениями сделали действительно простым начало работы с хостинговыми сервисами по сети. Например, его установщик поставляется с удобным флажком, с помощью которого я могу немедленно установить любое стороннее приложение на свой сервер.

Терминал, показывающий различные приложения, которые можно установить в Ubuntu Linux Server прямо в установочном ISO-образе.

При этом я быстро обнаружил, что Ubuntu Server является ограничивающим и ресурсоемким. По сравнению с Alpine Linux, базовая установка Ubuntu Server требует не менее 1 ГБ ОЗУ и 5 ГБ дискового пространства. Это сделало невозможным для меня запуск нескольких экземпляров Ubuntu Server без использования всех ресурсов моего гипервизора RHEL.

Debian против Alpine Linux

Через некоторое время я перевел некоторые из своих серверных машин на Debian Linux. Это дистрибутив для Ubuntu Server, который обеспечивает более стабильную и легкую систему по сравнению с его нижестоящей ОС. Однако я обнаружил несколько проблем с Debian, которые не позволили мне использовать его полный рабочий день.

Для начала, пакеты в Debian Linux часто значительно отстают от обновлений функций. Хотя Alpine Linux иногда может отставать, он догоняет последние пакеты в течение шести месяцев. По сравнению с Debian, это более управляемый временной интервал для меня.

Терминал, отображающий экран по умолчанию для сервера Debian Linux.

Кроме того, Debian Stable также не предоставляет некоторые критически важные приложения, такие как Docker, в своих репозиториях по умолчанию. Это вынуждает запускать внешние репозитории, что немного усложняет поддержку системы Debian в долгосрочной перспективе. С Alpine Linux, между тем, я ни разу не обнаружил, что мне не хватает пакета, необходимого для моего сервера.

Arch Linux против Alpine Linux

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

Терминал, показывающий минимальную установку Arch Linux, работающую в качестве серверной ОС.

Сказав это, непрерывный характер релизов Arch быстро стал для меня обузой. Необходимость периодически обновлять каждые одну-две недели затрудняла поддержание актуальности моих серверов. В сочетании с беспокойством об уязвимостях нулевого дня я перешел на Alpine Linux, как только понял, что он покрывает большую часть того, что мне нужно, при этом оставаясь легким и простым в развертывании.

В конечном счете, Alpine Linux — это легкая серверная ОС, которая обеспечивает баланс между функциями, гибкостью и эффективностью использования ресурсов. Поэтому я настоятельно рекомендую Alpine всем, кто ищет простую систему Linux, которая может работать как на bare metal, так и на VM.

Изучение того, что сделало Alpine хорошим легким серверным дистрибутивом Linux и как он сравнивается с другими, является первым шагом в изучении экономичных, ресурсосберегающих ОС. Узнайте, как реанимировать ваш старый, устаревший ПК, изучив некоторые из лучших легких настольных дистрибутивов Linux сегодня.

Кредит изображения: Тим ван дер Кёйп через Unsplash. Все изменения и скриншоты сделаны Ramces Red.

Written by Иван Васильков

Системный администратор и DevOps с опытом 10+ лет.