Docker Run: зачем использовать --rm (Докер новичок)

Я пробую докер впервые и пока не имею "ментальной модели". Тотальный новичок.

Все примеры, на которые я смотрю, включают флаг --rm для запуска, например

docker run -it --rm ...
docker container run -it --rm ...

Вопрос:

Почему эти команды включают флаг --rm? Я бы подумал, что если мне нужно было решить проблему с настройкой или загрузкой контейнера с хорошим содержимым, зачем его удалять? Я хочу сохранить его для использования снова.

Итак, я знаю, что у меня неправильное представление о докере.

Ответ 1

Контейнеры являются просто экземпляром изображения, которое вы используете для их запуска. При создании приложения в контейнере вы не должны брать свежий, чистый контейнер Ubuntu, загружать приложения и конфигурации, которые вы хотите иметь в нем, а затем запускать его.

Вы должны рассматривать контейнер как экземпляр вашего приложения, но ваше приложение встроено в изображение. Правильное использование будет создавать пользовательский образ, в который вы встраиваете все файлы, конфигурации, переменные среды и т.д. В образ. Узнайте больше о Dockerfile и о том, как это делается здесь

После того, как вы это сделали, у вас есть изображение, которое содержит все, и чтобы использовать ваше приложение, вы просто запускаете образ с правильными настройками порта или другими динамическими переменными, используя docker run <your-image>

Запуск контейнеров с флагом --rm хорош для тех контейнеров, которые вы используете очень короткое время, просто для чего-то, например, для компиляции вашего приложения внутри контейнера или просто для проверки того, что он работает, и тогда вы знаете, что он недолговечный Контейнер, и вы сообщаете своему демону Docker, что, как только он будет запущен, сотрите все, что с ним связано, и сэкономьте место на диске.

Ответ 2

от https://docs.docker.com/engine/reference/run/#clean-up---rm

По умолчанию файловая система контейнеров сохраняется даже после выхода из контейнера. Это значительно упрощает отладку (поскольку вы можете проверить конечное состояние), и вы сохраняете все свои данные по умолчанию. Но если вы выполняете краткосрочные процессы переднего плана, эти контейнерные файловые системы действительно могут накапливаться. Если вместо этого вы хотите, чтобы Docker автоматически очищал контейнер и удалял файловую систему при выходе из контейнера, вы можете добавить флаг --rm

Коротко говоря: полезно хранить хост в чистоте от остановленных и неиспользуемых контейнеров.

Ответ 3

Флаг --rm используется, когда необходимо удалить контейнер после того, как задание для него выполнено.

Это подходит для небольших испытаний или в целях POC и избавляет от головной боли при ведении домашнего хозяйства.

Ответ 4

Я использую --rm при подключении к запущенным контейнерам для выполнения некоторых действий, таких как резервное копирование базы данных или копирование файла. Вот пример:

docker run -v $(pwd): /mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f/mnt/docker_pg.dump1 app_db

Вышеупомянутый соединит запущенный контейнер с именем "app_postgres_1" и создаст резервную копию. После завершения резервного копирования контейнер полностью удаляется.