Пробую докер первый раз и еще не имею "ментальной модели". Всего новичок.
Все примеры, которые я рассматриваю, включают --rm
флаг для запуска, например
docker run -it --rm ...
docker container run -it --rm ...
Вопрос:
Почему эти команды включают --rm
флаг? Я бы подумал, что если бы мне пришлось столкнуться с проблемой настройки или загрузки контейнера с хорошими вещами в нем, зачем его удалять? Я хочу сохранить его, чтобы использовать снова.
Итак, я знаю, что у меня неправильное представление о докере.
docker
docker-container
совпадающие моменты
источник
источник
--rm
удаляет остановленный контейнер (тот, которыйdocker run
создается), а не образ, на котором он был основан (то, что вы скачали).docker run --help
должно быть полезно. Если вы не хотите удалять контейнер , вы можете передать его--rm
и оно должно автоматически очищать контейнер и удалять файловую систему при выходе из контейнера, и это не означает удаление материала из контейнера.Ответы:
Контейнеры - это просто экземпляр образа, который вы используете для их запуска. Настроение при создании контейнерного приложения заключается не в том, чтобы, например, взять свежий чистый контейнер ubuntu и загрузить в него приложения и конфигурации, которые вы хотите иметь, а затем позволить ему работать.
Вы должны рассматривать контейнер как экземпляр вашего приложения, но ваше приложение встроено в изображение. Правильным использованием будет создание пользовательского образа, в который вы вставляете все свои файлы, конфигурации, переменные среды и т. Д. В образ. Подробнее о Dockerfile и о том, как это делается, читайте здесь.
Как только вы это сделаете, у вас будет образ, содержащий все, и для использования вашего приложения вы просто запустите образ с правильными настройками порта или другими динамическими переменными, используя
docker run <your-image>
Запуск контейнеров с
--rm
флагом хорош для тех контейнеров, которые вы используете очень короткое время, просто чтобы что-то сделать, например, скомпилировать свое приложение внутри контейнера или просто протестировать что-то, что оно работает, а затем вы знаете, что это недолговечный контейнер, и сообщите своему демону Docker, что после его завершения удалите все, что с ним связано, и сэкономьте место на диске.источник
--rm
когда пользователь закрывает окно терминала. т.е. не запускается намеренноexit
в оболочке контейнера, а просто закрывает окно графического интерфейса терминала. Я заметил, что контейнеры в этом случае не удаляются.Флаг
--rm
используется, когда вам нужно удалить контейнер после завершения задачи для него.Это подходит для небольших испытаний или для целей POC и избавляет от головной боли при домашнем хозяйстве.
источник
с https://docs.docker.com/engine/reference/run/#clean-up---rm
Вкратце: полезно держать хост в чистоте от остановленных и неиспользуемых контейнеров.
источник
Я использую
--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 и создаст резервную копию. После завершения команды резервного копирования контейнер полностью удаляется.
источник