Томи та мережі Docker: дані й зв’язки для контейнерів
Коротко: Контейнери ефемерні: томи (volumes) зберігають дані постійно поза контейнером, мережі зв’язують контейнери одне з одним.
Докладніше: Файлова система контейнера належить до його життєвого циклу: під час видалення дані в ній зникають. Для баз даних, завантажень і конфігурацій тому потрібні томи. А щоб кілька контейнерів (наприклад, вебзастосунок і база даних) могли спілкуватися, Docker використовує мережі.
Подробиці
Томи та bind mount
- Том (volume): сховище, яким керує Docker.
docker run -v data:/var/lib/postgresql/data postgresстворює томdataі підключає його до контейнера. Він переживає видалення контейнера. - Bind mount: тека хоста монтується напряму (
-v $(pwd)/code:/app). Зручно для розробки, бо зміни одразу видно в контейнері. - tmpfs: пам’ять у RAM, втрачається під час зупинки.
docker volume ls
docker volume inspect data
docker volume rm data
Мережі
Контейнери в користувацькій bridge-мережі звертаються один до одного за іменами контейнерів як за іменами хостів:
docker network create appnet
docker run -d --name db --network appnet postgres
docker run -d --name web --network appnet -p 8080:80 my-app
У застосунку адреса бази даних тоді db:5432. Лише з -p (публікація порту) сервіс доступний також з хоста або з інтернету; без нього він лишається прихованим у мережі, що добре для безпеки (не публікуйте базу даних).
Docker Compose
У compose.yaml ви описуєте кілька контейнерів разом із томами та мережами:
services:
web:
build: .
ports: ["8080:3000"]
depends_on: [db]
db:
image: postgres:17
volumes: [dbdata:/var/lib/postgresql/data]
volumes:
dbdata:docker compose up -d запускає все, docker compose down зупиняє (томи лишаються, окрім випадку з -v).
Примітки
Дані, що зберігаються в томах, потрібно резервувати, як будь-яку іншу базу даних (резервні копії!). Права між хостом і контейнером (ідентифікатори користувачів) — часта перешкода під час bind mount. Мережеві режими на кшталт host знімають ізоляцію. У Kubernetes ці завдання беруть на себе PersistentVolume та Service.
Див. також: Docker, Dockerfile, Основи Kubernetes, Стратегія резервного копіювання