Принцип работы докера

Осваиваю работу с докером и там написано:

"После запуска образа Docker вы можете создавать, изменять и удалять файлы так же, как и с скоростью машины. Эти изменения ведутся только к контейнеру. Вы можете запустить и остановить его, но после того, как вы его уничтожите с помощью команды docker rm, изменения будут утрачены навсегда."

Получается, что я например, скачал оф.образ докера Ubuntu, поставил на него программы (Python, NGINX, MYSQL), потом сохранил под своим именем и запустил егона другой машине.

Если, например, мой скрипт создает файлы (например, f1.txt, f2.txt) и дирректории (например, dir1, dir2), то если я остановлю работу этого докера через:

sudo docker stop [CONTAINER ID]

а потом если запущу, то файлов (f1.txt, f2.txt) и директорий (dir1, dir2) уже не будет созданных тем приложением?

Или я то-то не так понял?


Ответы (1 шт):

Автор решения: Total Pusher

Нужно понимать, чем образ отличается от контейнера.

Получается, что я например, скачал оф.образ докера Ubuntu, поставил на него программы (Python, NGINX, MYSQL), потом сохранил под своим именем и запустил его на другой машине.

Если сохранили образ (docker build или docker commit), то все файлы сохранятся и будут доступны везде, где будет запущен образ (docker run). Контейнеры же создаются из образов, функционируют и умирают, теряя все свои данные - это концепция. Чтобы обмениваться образами, есть репозитории, например https://hub.docker.com

если я остановлю ... sudo docker stop ... а потом если запущу

Файлы останутся. Остановка контейнера (docker start) - все слои файловой системы остаются на месте, данные не теряются. Но не перепутайте с запуском нового контейнера (docker run) на основе образа - там файлов не будет.

Удаление контейнера (docker stop, затем docker rm)- слои удаются, данные теряются.

Исключение: если данные сохраняются в volume (томах), которые подмонтированы в контейнер, они останутся.

→ Ссылка