Русский

Инструменты разработчика · Конвертер docker run в Docker Compose

Как флаги запуска Docker сопоставляются с ключами Compose: -p, -v, -e, --name и других.

· Как это работает

докер сочинять рабочий процесс разработчика

Сопоставление параметров команды запуска Docker с портами, томами и ключами среды в Compose
Оригинальная векторная иллюстрация ToolAcre

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

Запуск докера, заключающий три строки в README — он работает, никто не может его просмотреть, а команде нужен compose.yaml.

Многострочный запуск докера может запустить службу сегодня, скрывая ее рабочий контракт в псевдониме оболочки или README. Файл Compose переносит те же параметры в проверяемое определение службы, но преобразование должно учитывать каждый флаг, а не автоматически удалять настройки безопасности. ToolAcre анализирует команду как текст: он никогда не запускает образ, не открывает сокет Docker и не развертывает контейнер. Считайте выходные данные черновой конфигурацией, для которой по-прежнему требуется, чтобы оператор проверил пути к хостам, учетные данные и предположения о сети.

Форма службы — изображение, затем набор ключей, отражающих флаги, в разделе «Службы:» и имя службы.

Создание YAML начинается с раздела Services:, за которым следует имя службы и изображение:. В отличие от командной строки, ее ключи группируют повторяющиеся значения, такие как порты и записи среды, в последовательности. ToolAcre получает имя службы из --name или образа и строит модель перед сериализацией YAML. Текущим файлам Compose не требуется версия верхнего уровня: key; добавление одного из них, поскольку в старом сообщении в блоге показано, что это создаст устаревшее предупреждение, а не улучшит совместимость.

Общие флаги — -p для портов, -v для томов, -e для среды, --name для имени контейнера, --restart для перезапуска, --network для сетей

Общие сопоставления делают файл узнаваемым: -p 8080:80 становится портом: при сопоставлении в кавычках -v хост:контейнер становится записью тома, -e KEY=значение переходит в среду, --name становится имя_контейнера, --restart перезагружается, а --network требует сетевого контекста. Цитирование сопоставления портов имеет значение, поскольку YAML должен обрабатывать его как строку, а не интерпретировать знаки препинания как другой тип. Именованный том может потребовать собственного объявления томов верхнего уровня; монтирование привязки хоста должно быть проверено на компьютере, на котором будет работать Compose.

Менее распространенные флаги — --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label, --add-host и их ключи.

Такие флаги, как --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label и --add-host, имеют соответствующие концепции обслуживания, но их семантика может зависеть от среды выполнения и хозяин. Неподдерживаемый --security-opt нельзя изобретать как правдоподобно выглядящий ключ или незаметно отбрасывать. ToolAcre перечисляет предупреждения с именами неподдерживаемых параметров, чтобы проверяющий мог завершить сопоставление вручную или решить, что Compose не является подходящей заменой. Наличие ключа YAML не доказывает, что служба запускается с теми же привилегиями.

Позиционные аргументы — изображение становится image:, а все, что после него, становится командой:

Имя изображения является позиционным аргументом после запуска и его параметров. Аргументы после изображения становятся служебной командой, а не флагами запуска Docker; перемещение токена через эту границу меняет то, какая программа его получает. Кавычки оболочки и обратные косые черты также имеют значение при разбиении одного примера README на токены. Синтаксический анализатор ToolAcre не является интерпретатором оболочки, поэтому такую ​​переменную, как $HOME, следует рассматривать в контексте, а не предполагать, что она расширяется, как это было бы в исходной интерактивной оболочке.

Рабочий пример: преобразование запуска докера Postgres — полная команда, результирующее определение сервиса и построчное сравнение.

Рассмотрим примерный запуск команды docker -d --name demo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=только демо --restart, если не остановлен postgres:16. ToolAcre выдает services.demo-db с изображением postgres:16, имя_контейнера demo-db, цитируемый порт 5432:5432, том pgdata, запись в списке среды, перезапуск: если не остановлен и объявление тома pgdata верхнего уровня. Он предупреждает, что -d — это выбор командной строки; docker compose up -d справится с этим. «Только демо» — это намеренно небезопасный заполнитель для обучения — никогда не вводите реальный пароль базы данных в этот сгенерированный YAML.

Что это не охватывает — флаги без служебного эквивалента (-d, --rm) и вещи, которых вообще нет в команде, например контексты сборки.

Не каждый флаг запуска имеет надежный аналог свойства службы. -d обрабатывается командой компоновки, которую вы вызываете; --rm относится к одноразовому запуску составления, а не к длительной службе. Контекст сборки, секретное хранилище, стратегия работоспособности или зависимость нескольких служб, отсутствующие в исходной команде, не могут быть выведены. Инструмент сообщает о неподдерживаемых флагах вместо того, чтобы притворяться, что его выходные данные представляют собой полный план развертывания. Прежде чем развертывать привилегированный или чувствительный к сети контейнер, прочтите справочник по сервису Docker Compose.

Вывод: Compose — это та же самая структурированная конфигурация, и конвертер создает определение сервиса из вставленной вами команды.

Compose — это та же конфигурация, структурированная для просмотра и повторяемости. Конвертер Docker run в Docker Compose дает вам определение потенциальной службы в вашем браузере и сохраняет вставленную команду локально; он не запускает Docker. Сравните каждый флаг источника с его ключом YAML, устраните предупреждения и удалите секреты из простых блоков среды, прежде чем применять результат к реальному хосту.