Как включить тома в мою конфигурацию docker?

#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"
 

Ссылка:

тома в docker-compose