#docker #docker-compose #dockerfile
#docker #docker-compose #dockerfile
Вопрос:
У меня есть конфигурация docker-compose для приложения MEAN, которое работает нормально.
Я бы хотел, чтобы мои серверы angular (ng serve) и express (nodemon) запускались автоматически при нажатии ctrl s, как если бы я запускал свое приложение в local.
Для этого мои контейнеры должны знать, что файлы изменились.
Как я могу это сделать ?
Файл докер-файла Angular :
FROM node:10
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . ./
EXPOSE 4200
CMD ["npm", "start"]
Докер-файл экспресса :
FROM node:6
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . ./
EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml :
version: '3'
services:
angular: # name of the first service
build: client # specify the directory of the Dockerfile
ports:
- "4200:4200"
express: #name of the second service
build: server # specify the directory of the Dockerfile
ports:
- "3000:3000"
links:
- database
database: # name of the third service
image: mongo
ports:
- "27017:27017"
И Angular, и Express имеют .dockerignore для node_modules
Комментарии:
1. Что вы надеетесь получить, запустив это в Docker, в отличие от простого запуска
npm start
в стандартной среде разработчика?2. Я хочу научиться использовать Docker и Kubernetes. Я обнаружил, что было бы неплохо использовать его в процессе разработки. В противном случае я бы не был уверен, что смогу использовать его в prod.
3. Разработайте свое приложение вне Docker и разверните его, используя показанную вами настройку Dockerfile. Хотя существует «стандартный» шаблон Node-in-Docker, который вы должны легко найти, он одновременно менее удобен, чем просто использование Node, и принципиально отличается от производственного развертывания.
Ответ №1:
Если вы работаете в среде разработки, вы можете добавить volumes
раздел в свой docker-compose.yml
, как показано ниже. :
services:
angular: # name of the first service
build: client # specify the directory of the Dockerfile
ports:
- "4200:4200"
volumes:
- /path/in/host/machine:/path/in/container
express: #name of the second service
build: server # specify the directory of the Dockerfile
ports:
- "3000:3000"
links:
- database
volumes:
- /path/in/host/machine:/path/in/container
database: # name of the third service
image: mongo
ports:
- "27017:27017"
Ссылка: