@historydev
Острая аллергия на анимешников

Как создавать новый image в dockerfile и нужно ли?

Я попытался запустить 2 node приложения в одном контейнере, доступен только один:

dockerfile
FROM node:16
WORKDIR /usr/src/app

COPY ./package*.json ./
COPY ./lerna.json ./

RUN npm install

WORKDIR /usr/src/app/packages/backend

COPY ./packages/backend ./

RUN npm install

WORKDIR /usr/src/app/packages/frontend

COPY ./packages/frontend ./

RUN npm install --legacy-peer-deps

WORKDIR /usr/src/app/packages/static_hoster

COPY ./packages/static_hoster ./

RUN npm install

WORKDIR /usr/src/app

RUN npm run build

COPY . .

CMD ["npm", "start"]


Это работает, команды вызываются однако работает только порт 4200 (4200 фронт, 4000 сервер)

docker-compose
version: '3.6'
# Deploys MongoDB with customization scripts and container with Mongo client
# https://fabianlee.org/2018/05/20/docker-using-docker-compose-to-link-a-mongodb-server-and-client/
#
# usage:
# sudo docker-compose build
# sudo docker-compose up


services:
  my-mongodb:
    image: 0850fead9327
    container_name: my-mongodb
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_DATABASE=you_need
      - MONGO_INITDB_ROOT_USERNAME=
      - MONGO_INITDB_ROOT_PASSWORD=
    volumes:
      # seeding scripts
      - ./mongo-entrypoint:/docker-entrypoint-initdb.d
      # named volumes
      - mongodb:/data/db
      - mongoconfig:/data/configdb
    networks:
      - test

  my-mongoclient:
    # build will get tagged with 'image'
    image: 5db0a73c35fe
    container_name: my-mongoclient
    ports:
      - 4200:4200
      - 4000:4000
    expose:
      - 4000-5000
    environment:
      - MONGO_IP=http://my-mongodb
      - MONGO_INITDB_DATABASE=you_need
      - MONGO_INITDB_ROOT_USERNAME=
      - MONGO_INITDB_ROOT_PASSWORD=
    networks:
      - test
    depends_on:
      - my-mongodb

volumes:
  # default dir on Ubuntu: /var/lib/docker/volumes
  mongodb:
  mongoconfig:

networks:
  test:
    driver: bridge


Я использую lerna.js, таким образом всё что мне нужно сделать для сборки всех пакетов npm i => npm run build
Я так понял что мне придётся создавать по докер конфигу на каждый пакет?
front => dockerfile
back => dockerfile
...

Для запуска собранных пакетов я использую npm пакет concurrently:

package.json
{
  "name": "root",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "scripts": {
    "start_server": "node dist/backend/server.js",
    "start_hoster": "node dist/static_hoster/static.js",
    "start": "concurrently \"npm run start_server\" \"npm run start_hoster\"",
    "dev": "lerna run start",
    "build": "lerna run build",
    "params": "node test.js"
  },
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^5.47.1",
    "@typescript-eslint/parser": "^5.47.1",
    "concurrently": "^7.6.0",
    "eslint": "^8.30.0",
    "lerna": "^6.1.0"
  }
}


Докер всё собирает, следом запускает, но запускает только hoster:
"start": "concurrently \"npm run start_server\" \"npm run start_hoster\"",


После этого я пришёл к выводу что возможно стоит создавать на каждый пакет по изображению, однако хочется это автоматизировать, чтобы не создавать 10 докерфайлов, если это возможно.

P.S. Только что прочитал что через docker-compose я могу настроить порты и запуск определённых приложений, буду пробовать: https://stackoverflow.com/questions/63463315/docke...
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vitaly_il1
DevOps Consulting
Во-первых, присоединяюсь к комментариям shurshur.
Во-вторых, советую прочитать пару статей по основам Докера, потом ""Docker best practices, плюс с примером контейниризации full-stack апликации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 21:17
5000 руб./за проект
28 мар. 2024, в 20:46
150000 руб./за проект
28 мар. 2024, в 20:37
50000 руб./за проект