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


Ответы (0 шт):