Можно ли в Docker сделать одну операционную систему на два образа, таких как "Интерпрeтатор серверного языка" и "база данных"?
Допустим, мне требуетмя стэк из NodeJS и базы данных PostgreSQL. Файл docker-compse.yml в данном случае будет выглядеть как-то так:
version: "3"
services:
node:
container_name: node_express
build: ./app
volumes:
- ./app:/app
tty: true
ports:
- 3000:3000
postgres:
container_name: postgres
image: postgres:13
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
volumes:
- db_data:/var/lib/posrgresql/data
- ./initdb:/docker-entrypoint-initdb.d
volumes:
db_data: {}
Насколько мне известно, образы node и posgres независимы, иначе говоря, каждый находится внутри собственной изолированной операционной системы (скорее всего семейста Linux). Если это так, то отдельная OS для NodeJS и Posgres - это слишком большой расход дисковой памяти, а в условиях VPS за неё платить каждый месяц (и немало, ибо как правило это SSD). Даже образ с пустым Node.JS-приложением образ уже весит порядка 1гБ, а если ещё и база данных со своей ОС, то под один только "Hello, world" из Node.js и Posgres придётся арендовать гигабайта 2.
Я прекрасно понимаю, что с точки зрения хорошей инстраструктуры лучше отдельные образы для NodeJS и Postgres (более того, по мере развития приложения у базы данных наверняка появится дублирование для повышения безопасности), но для стадии разработки, альфа- и бета- тестирования нужно более экономное решение.
Если ли способ в Docker как-нибудь обобщить OS для NodeJS и Posgre (впрочем, на их месте может быть любой язык, поддерживающий серверное программирование и любая база данных)?