LINUX.ORG.RU

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

 


1

4

У меня всегда было удтверждение, что данные в контейнере теряются при остановке или перезапуске. Во всех гайдах, которые я встречал, так и говорилось. Но ко мне недавно обратился приятель, который мыслит как и я, у него есть контейнер на основе 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 ★★★★★
()