Как запустить точную копию Docker-контейнера без головной боли

27 Apr, 2026
2,933
🔱 168
👥 20

Знакомая ситуация? У вас есть работающий Docker-контейнер с кучей параметров — проброшенные порты, переменные окружения, монтированные тома. И вдруг нужно запустить его точную копию. Вручную переписывать все эти -v, -e и --link — настоящее мучение. Именно эту проблему решает Runlike.

Что такое Runlike?

Runlike — это утилита командной строки, которая анализирует запущенный контейнер и выводит команду docker run со всеми его параметрами. По сути, это «обратный инжиниринг» для Docker-команд.

Проект написан на Python, имеет открытый исходный код и уже собрал почти 3 тысячи звезд на GitHub — явный признак того, что он решил реальную боль разработчиков.

Кому это нужно?

  • Администраторам, которые управляют множеством контейнеров
  • Разработчикам, работающим с комплексными конфигурациями
  • DevOps-инженерам, переносящим контейнеры между средами
  • Всем, кто устал копировать параметры из docker inspect

5 причин попробовать Runlike

  1. Мгновенное клонирование контейнеров Просто укажите имя контейнера — и получите готовую команду для его запуска:

    runlike your-container
    
  2. Человекочитаемый вывод С флагом -p команда форматируется в удобные многострочные блоки:

    Реклама
    $ runlike -p redis
    
    docker run \
        --name=redis \
        -e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
        -p 0.0.0.0:6379:6379/tcp \
        --detach=true \
        myrepo/redis:7860c450dbee9878d5215595b390b9be8fa94c89 \
        redis-server --slaveof 172.31.17.84 6379
    
  3. Работа с выводом docker inspect Можно анализировать контейнеры, к которым нет прямого доступа:

    docker inspect <container-name> | runlike --stdin
    
  4. Гибкость именования Опция --no-name позволяет исключить имя контейнера из вывода, чтобы избежать конфликтов.

  5. Запуск без установки Runlike доступен как Docker-образ, поэтому его можно использовать временно:

    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
        assaflavie/runlike YOUR-CONTAINER
    

Как это работает технически?

Runlike под капотом:

  1. Получает JSON-описание контейнера через Docker API
  2. Анализирует все параметры запуска
  3. Транслирует их обратно в синтаксис docker run
  4. Форматирует вывод для удобства чтения

Проект поддерживает большинство популярных параметров Docker, включая:

  • Проброс портов (-p)
  • Переменные окружения (-e)
  • Монтирование томов (-v)
  • Политики перезапуска (--restart)
  • Лимиты ресурсов (--memory, --cpuset-cpus)

Полный список поддерживаемых параметров можно найти в README проекта.

Практические кейсы использования

  1. Миграция контейнеров Перенос сервисов между серверами становится тривиальной задачей — просто копируете команду и запускаете на новом хосте.

  2. Документирование конфигураций Runlike помогает сохранять сложные конфигурации для будущего использования.

  3. Отладка Быстрое создание тестовых окружений с теми же параметрами, что и в production.

  4. Обучение Отличный способ изучать, как работают сложные Docker-команды.

Ограничения и предостережения

Автор честно предупреждает, что проект находится в стадии активной разработки и:

  • Не все параметры Docker поддерживаются
  • Возможны баги в преобразовании сложных конфигураций
  • Пока не рекомендуется для production-использования без проверки

Тем не менее, для большинства повседневных задач Runlike работает отлично.

Как установить?

Проще простого:

pip install runlike

Или через Docker (как показано выше). Для постоянного использования можно добавить алиас в .bashrc:

alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

Вывод: стоит ли пробовать?

Если вы:

  • Регулярно работаете с Docker
  • Устали запоминать или записывать сложные команды запуска
  • Часто копируете контейнеры между окружениями

...то Runlike сэкономит вам кучу времени и нервов. Это один из тех инструментов, которые кажутся очевидными только после того, как их узнаешь.

Попробуйте — и вам сразу станет понятно, почему у проекта почти 3 тысячи звезд на GitHub. А если найдете баг или захотите добавить поддержку нового параметра — проект открыт для contributions!

Build Status

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.