LINUX.ORG.RU

Почему везде в гайдах говорится что изменения в контейнерах Docker пропадают при остановке, хотя это не так

 


0

3

У меня всегда было удтверждение, что данные в контейнере теряются при остановке или перезапуске. Во всех гайдах, которые я встречал, так и говорилось. Но ко мне недавно обратился приятель, который мыслит как и я, у него есть контейнер на основе python образа, где он при помощи docker exec -it изменил некоторые файлы кода python и эти изменения сохранились после перезапуска.

Я решил провести эксперимент:

merqury@home-pc:~$ sudo docker container run -d ubuntu tail -f /dev/null
ef1ba0a89ea93995a97c2ee3200c66018ffaa9e3671494b813437cc75f082080
merqury@home-pc:~$ sudo docker exec -it ef1 bash
root@ef1ba0a89ea9:/# ls /root
root@ef1ba0a89ea9:/# touch /root/first /root/second
root@ef1ba0a89ea9:/# ls /root
first  second
root@ef1ba0a89ea9:/# exit
exit
merqury@home-pc:~$ sudo docker restart ef1
ef1
merqury@home-pc:~$ sudo docker exec -it ef1 bash
root@ef1ba0a89ea9:/# ls /root
first  second
root@ef1ba0a89ea9:/# exit
exit
merqury@home-pc:~$

Из него видно что данные сохраняются в контейнере. Так почему в большинстве гайдов пишется, что изменения в контейнере теряются при его остановке



Последнее исправление: merqury (всего исправлений: 1)
Ответ на: комментарий от merqury

А что такое рестарт - вот это уже клоунский вопрос.

Да? Вот есть у меня docker swarm, сделал я рестарт контейнера и он остановился на одном хосте, а поднялся на другом...

Всё, что есть внутри докера должно или маппиться снаружи, или формироваться при сборке. Всё, что создано в runtime по умолчанию считается временным и об этом тебе и говорят в «гайдах». Потому что гайды по определению описывают только частные случаи и не раскрывают всё, что под капотом. Подробности - в документации. А лучше сразу начинать с изучения документации, а не по ютубчикам учиться.

shell-script ★★★★★
()
Ответ на: комментарий от merqury

Вся суть docker в том, что ты одной командой получаешь повторяемое окружение. Вне зависимости от фаз Луны и положении Юпитера в Козероге. Если в рантайме у тебя появляются данные, которые нужно сохранить, их надо сохранять на примонтированном в контейнер томе. То, что ты остановил у себя на локалхосте контейнер, а потом запустил его - это частный случай, полезный разве что при отладке. Пускать такое в бой нельзя. Это неправильное использование инструмента. Запрещено. Отказать. Нихьт. Найн! У тебя появится или изменится слой, контейнер пересоберётся, данные пропадут. Ты запустишь сборку мусора и удалятся образы незапущенных контейнеров, данные пропадут. И так далее. Поэтому во всех гайдах об этом говорят. Потому что любой человек, работающий с докером, ожидает от тебя, что значимых данных внутри нет.

Если ты сам для себя на локалхосте что-то пилишь, можешь, конечно надеяться, что повезёт и ты никогда не наткнёшься на такую ситуацию. Точно так же можно не делать бекапов, можно не хранить код в vcs и ещё много всяких не.

shell-script ★★★★★
()
Ответ на: комментарий от CrX

В одном конкретном информационном пузыре, описанном выше. Дальше комментировать особого смысла нет

Это не пузырь, это общепринятое понимание виртуализации. Кроме вышеприведённых примеров, можно добавить, что производители x86 процессоров под виртуализацией понимают именно это - задачу виртуализацию машины, железа. Называешь контейнеры виртуализацией именно ты из отдельно взятого пузыря.

контейнеризация […] использует возможности ядра по этой самой виртуализации

Общепринятое понимание таково, что ядерные возможности виртуализации - это то, дает доступ к аппаратной поддержке виртуализации в процессоре (intel vt). То есть то, чем пользуется qemu, чтобы ускорить виртуализацию машины. С контейнерами это не связано.

docker использует виртуализацию

В контейнере нет ничего виртуального что можно было бы сравнить с более реальным. В вирутальной машине флоппи-дисковод виртуален, а реальный - в шкафу или его вообще не существует, а обесточенный виртуальный процессор «qemu cpu» виртуален, а процессор с маркировкой интел в системном блоке и он запитан. Выхлоп ps в докере не более виртуален чем выхлоп ps на хосте.

asdpm
()
Ответ на: комментарий от asdpm

Это не пузырь, это общепринятое понимание виртуализации.

Да-да, именно так. А то, что в википедии, во всяких статьях, да всюду по интернету используется и в другом понимании тоже — это так, глюки. Или диверсия, два человека на весь мир сидят и клепают это, чтоб всех запутать.

Общепринятое понимание таково

Ага, только такое. Конечно…

А если повторить ещё несколько раз, что оно общепринятое, то оно ещё общее и принятее станет. Это так работает.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от X512

В контенеру подключается вольюм (по сути монтируется внутрь мамка), и данные, которые нужно сохранить пишутся в нее, тем самым оставаясь на хосте, а не в контейнере. Сам контейнер при этом может удаляться, пересоздаваться и так далее.

В случае кубов это PV (Persistent Volume), также подключаемый к поду.

Zhbert ★★★★★
()
Ответ на: комментарий от merqury

братан, а ты бываешь вообще когда-нибудь неправ? по твоей манере общения складывается ощущение, что у тебя нарциссическое растройство личности, когда все вокруг тридварасы, а ты один дАртаньян

anonymous
()
Ответ на: комментарий от shell-script

повторяемое окружение. Вне зависимости от фаз Луны и положении Юпитера в Козероге.

посмеялся. прежде чем говорить советую немного думать сначала

asdpm
()
Ответ на: комментарий от CrX

Почему у ЛОРовцев всегда так сложно с тем, что у одного слова может быть больше одного значения?

Потому что у технических терминов обычно нет двух, трёх, пяти и десяти значений.

Виртуализация (не железа) необходима для контейнеризации.

Это не означает, что слово «виртуализация» имеет какую-либо семантику «изоляции». Виртуальная память и виртуальный CD-Rom тому яркие иллюстрации.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Потому что у технических терминов обычно нет двух, трёх, пяти и десяти значений.

Очень часто есть. Просто они обычно разные не внутри одной области, а в разных.

CrX ★★★★★
()
18 декабря 2025 г.
Ответ на: комментарий от merqury

Почему везде люди говорят что при РЕСТАРТЕ данные теряются.

Возможно этот вопрос надо задать в том направлении где обитают эти люди которые так говорят?

Впервые слышу что при остановке контейнера сбрасывается его состояние. И да, про официальную документацию вам верно отметили - это более надёжный источник чем некие сторонние ресурсы где «говорят».

frunobulax ★★★★
()
Ответ на: комментарий от frunobulax

Да, вы правы, но просто мне сложно было читать техническую документацию, она скорее как справочник (да там есть Getting Started, но даже с ним сложно найти такие аспекты как этот)

Мне было проще посмотреть гайд.

merqury
() автор топика
Ответ на: комментарий от merqury

Мне было проще посмотреть гайд.

Я считаю гайды и видео годятся чтобы в общем обозреть технологию и понять вообще нужно ли оно тебе для решения какой-то задачи или что-то другое подойдёт лучше.

А уже для копания и применения лучше в процессе обращаться к официальным докам. Кстати по этой причине когда на бумаге читаю книги, если там есть предисловие с настройкой обсуждаемого далее софта я их пролистываю и иду на странички этих инструментов и ставлю по их официальным докам. Очень часто «в бумаге» бывает что-то в мелочах устаревшее и можно много времени потратить впустую.

Вот по теме топика текст про волюмы

В первых же двух абзацах кстати возможная причина непонимания пересказчиков:

When a container starts, it uses the files and configuration provided by the image. Each container is able to create, modify, and delete files and does so without affecting any other containers. When the container is deleted, these file changes are also deleted.

While this ephemeral nature of containers is great, it poses a challenge when you want to persist the data. For example, if you restart a database container, you might not want to start with an empty database. So, how do you persist files?

В первом абзаце - про удаление контейнера, а далее - про рестарт. Возможно автор не совсем точно выразился, но конечно общая идея контейнеров в том, что они не должны хранить пользовательские данные\состояния внутри - это просто такой как бы перераздутый запускаемый бинарник, если совсем-совсем упростить :)

frunobulax ★★★★
()