Docker в репозитории вашего дистрибутива Linux — это не тот Docker, о котором вы думаете

Docker в репозитории вашего дистрибутива Linux — это не тот Docker, о котором вы думаете


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

Последовательность — это черта характера, даже если это звучит скучно.

Во многих дистрибутивах Linux «Docker», который вы устанавливаете из репозитория по умолчанию, не является исходным стеком Docker, как предполагается в большинстве руководств. Это может быть другое имя пакета, другая частота выпуска или другое разделение компонентов. Также могут отсутствовать детали, которые в последних документах считаются стандартными. Имя на консервной банке — Docker, но поведение может варьироваться настолько, что может создавать хаос.

«Докер» — динамическая цель, а не статическая.

Название пакета скрывает реальную разницу

Когда в руководстве говорится «установите Docker», обычно имеется в виду движок Docker, опубликованный Docker, а также современный плагин для создания композиций, который находится под ним. docker compose. Многие репозитории дистрибутивов поставляют что-то похожее, но не идентичное по версии, настройкам по умолчанию или включенным инструментам. Некоторые люди упаковывают наследование docker-compose Отдельно кто-то присылает только один вариант, а кто-то делает выбор, что должно быть установлено по умолчанию. В результате получается система, которая может быть правильной в дальновидном смысле, но в то же время удивительной в руководящем смысле.

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

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

Где Repo Docker может навредить вам больше всего

Маленькие несоответствия приводят к большим потерям времени.

Docker в репозитории вашего дистрибутива Linux — это не тот Docker, о котором вы думаете

Самая распространенная ловушка — компот, потому что экосистема изменилась, и многие этого не заметили. Многие новые руководства рассматривают Compose v2 как плагин, использующий docker compose И поведение конфигурации совпадает с текущим интерфейсом командной строки Docker. Если в вашем дистрибутиве установлена ​​автономная версия docker-compose Вместо двоичных файлов вы можете столкнуться с различиями в флагах, обработке файлов среды и выводе ошибок. Даже когда все работает, автоматизация может дать сбой, поскольку поверхность команд и форматирование вывода не соответствуют ожиданиям вашего инструмента.

Возможно, самым неприятным аспектом этого является тот факт, что изменения между выпусками Docker вводят синтаксис команд, который отличается лишь незначительно. Например, использовался устаревший Compose v1. -d/--detach В качестве альтернативы команде «вверх» при составлении 2 угощений detach в качестве аргумента up После этого приходит заказ. Руководства в этом вопросе непоследовательны, что может привести к путанице и ошибочным представлениям о том, что что-то сломано, хотя на самом деле это не так.

Следующая ловушка — это скатывание к машинам, которые «работают на своей коробке». Если у вас есть один хост, который использует исходные пакеты Docker, а другой — репозиторий Docker, ваша HomeLab по умолчанию становится несовместимой. Сценарий, который подготавливает контейнеры на вашем мини-ПК, может дать сбой на вашем SBC, и сообщение об ошибке редко будет кричать «несоответствие упаковки». Это может выглядеть как проблема с разрешениями, проблема с сетью или ошибка в развертываемой службе. Таким образом, быстрая установка превращается в час погони за призраками.

Интеграция сети и брандмауэра — еще одна повторяющаяся проблема. Поведение Docker в сети зависит от того, как настроены iptables или nftables, а дистрибутивы различаются по умолчанию и инструментам. Сборки репозитория также могут включать в себя сервисные модули и настройки по умолчанию, специфичные для дистрибутива, которые изменяют то, как Docker манипулирует правилами на хосте. Вы можете столкнуться с ситуациями, когда порты опубликованы, но недоступны, или когда доступ контейнера к локальной сети ведет себя иначе, чем предлагает руководство. Не всегда виноват движок, но вы все равно платите за отладку.

Что с этим делать, когда непоследовательность становится слишком надоедливой?

Прежде чем что-либо менять, выберите непрерывность

Сохранение Docker-контейнера в файл

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

Если вы хотите свести к минимуму трудности с основными руководствами, пакеты Docker из исходной версии часто являются более простым способом. Они соответствуют предположениям большей части документации, особенно в отношении Compose v2 и нового поведения CLI. Они также упрощают синхронизацию нескольких хостов, что важно, если у вас более одного сервера. Последовательность — это черта характера, даже если это звучит скучно.

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

Чистое переключение делает ситуацию предсказуемой

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

Вот практическое изложение шагов, не превращая его в огромное руководство. Начните с проверки того, что установлено и что предоставляет вам текущую docker И compose Заказ. Затем остановите службы, чтобы не менять местами части, когда контейнер записывает на диск. Удалите конфликтующие пакеты репозитория, установите официальный движок и плагин компоновки, а также проверяйте версии по одной. После этого поднимите известный стек и убедитесь, что сеть и монтирование ведут себя так, как вы ожидаете.

  1. ваш инвентарь текущие пакеты, связанные с докером И подтвердите, какую версию Compose вы используете.

  2. остановить службу докера И любые запущенные контейнеры для поддержания стабильного состояния файловой системы.
  3. удалить докер дистрибутива Пакеты, которые будут конфликтовать с вышестоящими установками.
  4. установить докер-движок И плагин Compose из официальных пакетов Docker для вашего семейства дистрибутивов.
  5. Пожалуйста, подтвердите это docker version И docker compose versionЗатем перезапустите известный рабочий стек.

Выводы о здравомыслии в домашней лаборатории

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

Leave a Reply

Your email address will not be published. Required fields are marked *