Ответ 1
Насколько я понимаю, как только контейнер остановлен/закончен (т.е.: выход после интерактивного сеанса), то этот контейнер ушел вместе со всеми изменениями файла?
Нет, контейнер сохраняется после его выхода, если только вы не начали его с помощью аргумента --rm
до docker run
. Рассмотрим это:
$ docker run -it busybox sh
/ # date > example_file
/ # exit
Так как мы exit
изменили нашу оболочку, контейнер больше не работает:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Но если бы у нас была опция -a
, мы можем ее увидеть:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79aee3e2774e busybox:latest "sh" About a minute ago Exited (0) 54 seconds ago loving_fermat
И мы можем перезапустить его и снова подключить к нему:
$ docker start 79aee3e2774e
$ docker attach 79aee3e2774e
<i press RETURN>
/ #
И файл, который мы создали ранее, все еще существует:
/ # cat example_file
Wed Feb 18 01:51:38 UTC 2015
/ #
Вы можете использовать команду docker commit
, чтобы сохранить содержимое контейнера в новом изображении, которое затем можно использовать для запуска новых контейнеров или совместного использования с кем-то еще и т.д. Однако обратите внимание, что если вы окажетесь регулярно используя docker commit
, вы, вероятно, оказываете себе плохую услугу. В общем, более удобно рассматривать контейнеры только для чтения и создавать новые изображения с использованием файла Docker и docker build
.
Используя эту модель, данные обычно хранятся вне контейнера, либо с помощью монтирования хоста, либо с помощью контейнера только для данных.