Представим что у нас пропал Dockerfile, а остался только собранный имейдж. Ну или скачал ты готовый имейдж с докерхаба и хочется узнать как его собирали.
Как произвести реверсинг?
ㅤ
Для примера соберем образ из такого 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.
По итогу из говна и палок собираем копию нужного нам Dockerfile.
А файлы, которые были добавлены через COPY, вытягиваем себе на локальную машину так:
docker cp <image id>:/etc/nginx/nginx.conf /tmp
Про дебаг докер имейджей и контейнеров я писал в этом посте, почитай, достаточно информативно.
Как вариант можешь воспользоваться анализаторами, например trivy.
Trivy это комплексный и универсальный сканер безопасности для docker images. Заодно еще безопасность своих решений можно позырить и приуныть.
А еще есть клевая поделка для этого на python, но про нее закину уже завтра.
Вот такие пироги, если знаешь еще способы — пиши в комменты, будет полезно!
tags: #debug #devops #docker
—
🔔 @bashdays➡️ @gitgate