Похоже, здесь есть фундаментальное недопонимание концепции: контейнеры Docker сами по себе не являются без сохранения состояния. Если вы вносите какие-либо изменения в файловую систему контейнера, они сохраняются в течение всего срока существования контейнера. Только когда контейнер уничтожен (удален), его записываемый слой файловой системы, содержащий все изменения, сделанные с момента создания контейнера, удаляется.
Когда мы говорим, что "контейнеры Docker не имеют состояния", мы имеем в виду не тот факт, что они не имеют состояния по определению , а скорее лучшую практику и рекомендации о том, как следует использовать контейнеры. Безгражданство - это шаблон использования контейнеров, который позволяет рассматривать их как одноразовые объекты, например:
- если вы потеряете контейнер без сохранения состояния из-за сбоя приложения или сбоя системы / оборудования, вам все равно, просто создайте новый, который продолжает работать как его предшественник.
- Если вы хотите перенести какое-либо контейнерное приложение с одного очень загруженного сервера на другой, недостаточно используемый (например, вы только что приобрели и установили новое оборудование), вы уничтожаете контейнер на исходном сервере и заново создаете его на новом.
Тем не менее, вы должны понимать, что Docker не обеспечивает безгражданства - вы , создатель и пользователь контейнера, должны заботиться об этом. Вы должны хранить все постоянные данные приложения во внешнем хранилище, смонтированном в контейнере снаружи или в сетевом хранилище, например в базе данных.
Итак, отвечая на первоначальный вопрос - в Alpine нет ничего особенного. Вы добавляете файлы в контейнер - они хранятся там до тех пор, пока контейнер не будет уничтожен. Это верно для любого контейнера, не только для тех, которые созданы из альпийского образа.