Я попытался запустить 2 node приложения в одном контейнере, доступен только один:
dockerfileFROM 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-composeversion: '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...