Реверсим Dockerfile

Представим, что у нас пропал Dockerfile, а остался только собранный образ. Ну или скачал ты готовый образ с Docker Hub и хочется узнать, как его собирали.

Как произвести реверсинг?

Для примера соберём образ из такого Dockerfile:

FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]

Запускаем сборку образа:

docker build -t pythoner:latest .

Теперь нативными командами вытягиваем начинку, без всяких Dive и т. п. Но придётся немного глазками пробежаться.

docker history pythoner:latest

Результат команды выведет протокол сборки плюс команды. Но команды будут урезанными. Для того чтобы получить полный листинг, делаем так:

docker history --no-trunc pythoner:latest

Вылетит простыня, но при сноровке и насмотренности всё вполне предсказуемо.

В идеале совмещаем с Dive, смотрим окно Layers и стрелками перемещаемся по слоям, а там уже видно все команды, которые выполнялись из Dockerfile.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
По итогу из говна и палок собираем копию нужного нам Dockerfile.

А файлы, которые были добавлены через COPY, вытягиваем себе на локальную машину так:

docker cp <container-id>:/etc/nginx/nginx.conf /tmp

Как вариант, можешь воспользоваться анализаторами, например Trivy.

Trivy — это комплексный и универсальный сканер безопасности для Docker-образов. Заодно ещё безопасность своих решений можно позырить и приуныть.

А ещё есть клёвая поделка для этого на Python, но про неё закину уже завтра.

Вот такие пироги, если знаешь ещё способы — пиши в комменты, будет полезно!