Docker совет №22: Получаем список изменений в контейнере

Apr 26, 2018 07:59 · 292 words · 2 minute read docker

Бывают случаи, когда вносятся изменения внутри уже запущенного docker-контейнера, после чего нужно увидеть, насколько измененный контейнер отличается от оригинального образа. Давайте разберемся!

Всем хорошо известно, что контейнеры являются идемпотентными - внесенные изменения внутри запущенного контейнера будут утеряны при следующем запуске контейнера. Именно поэтому, все внесенные изменения (если, конечно, в них есть смысл и они привели к нужному результату) внутри запущенного docker-контейнера необходимо дописать в Dockerfile и пересобрать docker-образ. Как же получить список изменений внутри контейнера?

Все просто - используйте команду docker container diff <container_name>. Рассмотрим конкретный пример - запускаем docker-контейнер из образа alpine и вносим некоторые изменения:

docker run --rm -it --name difftest alpine:3.7
> mkdir exampledir
> cd /tmp
> touch hello.txt

Во второй вкладке терминала проверим, что же изменилось внутри docker-контейнера с именем difftest:

docker container diff difftest
> A /exampledir
> C /root
> A /root/.ash_history
> C /tmp
> A /tmp/hello.txt

При выводе результата команды docker container diff <container_name> можно увидеть, что каждая строка вначале содержит один из трех возможных символов - A,C,D:

  • A - файл (помним, что с точки зрения Linux каталог это тоже файл) был добавлен;
  • C - файл был изменен;
  • В - файл был удален.

В нашем примере мы ничего не удаляли, поэтому в результате вывода есть только строки с символами A и С. Файл /root/.ash_history, как вы наверняка уже догадались, это стандартный файл с историей команд.

Команда diff выведет в результате только те файлы, которые были добавлены/изменены/удалены. Если нужно получить всю историю действий в запущенном docker-контейнере, то можно воспользоваться такой командой:

docker exec difftest cat /root/.ash_history

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

tweet Share