Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

02.04.2025

Docker та стан у файлах

#Docker

Docker це чудово, питань нема. Сервіси ізольовані, запускай хоч один хоч десять. Можна без простою запустити нову копію, а потім моментально на неї перемкнутись. Але є ситуація, в якій модель контейнеризації трохи розвалюється. Це коли контейнер має приєднану директорію, яка ще й зберігає стан.

Як яскравий приклад: в Docker недоцільно запускати базу даних. Якщо воно у вас локально та не страшно все зупинити та запустити наново — то най буде. Але в живому використанні, а то ще й на хмарному сервісі чи в Kubernetes - відразу виявиться проблемка: директорії зі станом зазвичай не розраховані на одночасне використання двома копіями сервісу. В кращому випадку отримаємо помилку на кшталт “сервіс вже запущений”, а в гіршому — вони тихо потроху псуватимуть стан.

Якщо вже сервіс розрахований на зберігання стану в файлах, я просто не знаю гарного рішення для запуску його в Docker. Окрім баз даних, це стосується, наприклад, WordPress, який погано почувається без можливості редагування власних файлів. Стан у файлах не є частиною застосунку 12 факторів. (Звісно, реальність така, що десь на файлах сидить база даних.)

Це не те щоб провина Docker - очевидно, що дві копії PostgreSQL в принципі не можна запустити одночасно з однієї директорії. Але з традиційною моделлю розгортування такої потреби й не виникає. (Щоправда, способу оновити PostgreSQL без простою я теж не знаю.)