Как запустить точную копию Docker-контейнера без головной боли
Знакомая ситуация? У вас есть работающий Docker-контейнер с кучей параметров — проброшенные порты, переменные окружения, монтированные тома. И вдруг нужно запустить его точную копию. Вручную переписывать все эти -v, -e и --link — настоящее мучение. Именно эту проблему решает Runlike.
Что такое Runlike?
Runlike — это утилита командной строки, которая анализирует запущенный контейнер и выводит команду docker run со всеми его параметрами. По сути, это «обратный инжиниринг» для Docker-команд.
Проект написан на Python, имеет открытый исходный код и уже собрал почти 3 тысячи звезд на GitHub — явный признак того, что он решил реальную боль разработчиков.
Кому это нужно?
- Администраторам, которые управляют множеством контейнеров
- Разработчикам, работающим с комплексными конфигурациями
- DevOps-инженерам, переносящим контейнеры между средами
- Всем, кто устал копировать параметры из
docker inspect
5 причин попробовать Runlike
-
Мгновенное клонирование контейнеров Просто укажите имя контейнера — и получите готовую команду для его запуска:
runlike your-container -
Человекочитаемый вывод С флагом
-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 -
Работа с выводом docker inspect Можно анализировать контейнеры, к которым нет прямого доступа:
docker inspect <container-name> | runlike --stdin -
Гибкость именования Опция
--no-nameпозволяет исключить имя контейнера из вывода, чтобы избежать конфликтов. -
Запуск без установки Runlike доступен как Docker-образ, поэтому его можно использовать временно:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
Как это работает технически?
Runlike под капотом:
- Получает JSON-описание контейнера через Docker API
- Анализирует все параметры запуска
- Транслирует их обратно в синтаксис
docker run - Форматирует вывод для удобства чтения
Проект поддерживает большинство популярных параметров Docker, включая:
- Проброс портов (
-p) - Переменные окружения (
-e) - Монтирование томов (
-v) - Политики перезапуска (
--restart) - Лимиты ресурсов (
--memory,--cpuset-cpus)
Полный список поддерживаемых параметров можно найти в README проекта.
Практические кейсы использования
-
Миграция контейнеров Перенос сервисов между серверами становится тривиальной задачей — просто копируете команду и запускаете на новом хосте.
-
Документирование конфигураций Runlike помогает сохранять сложные конфигурации для будущего использования.
-
Отладка Быстрое создание тестовых окружений с теми же параметрами, что и в production.
-
Обучение Отличный способ изучать, как работают сложные 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!
