Tengo una biblioteca angular que construyo así: ng build my-library -- --watch y se genera un directorio dist .
Tengo una aplicación angular ficticia para probar mi biblioteca, en package.json : docker:start : ng serve --host 0.0.0.0 --poll 1
Cuando ejecuto mi terminal, durante el desarrollo, ejecuto la build en un terminal y la aplicación en otro. A medida que realizo cambios, la compilación los recoge y, una vez que se crea la nueva biblioteca, el servicio toma los cambios y los veo en el navegador.
Estoy tratando de recrear esto en Docker así:
FROM node:10-alpine WORKDIR /app EXPOSE 4200 # Install Angular/CLI to use `ng` RUN npm install -g @angular/cli # My Application COPY ./package*.json ./ RUN npm install # Build ./dist/my-library COPY ./ ./ RUN cd ./projects/my-library && npm run build CMD ["npm","run","docker:start"] Mi docker-compose.yml :
version: '3' services: app: container_name: 'app' build: context: . dockerfile: Dockerfile.dev ports: - '4200:4200' volumes: - /app/node_modules - .:/app Quiero poder ejecutar docker-compose up y desarrollar como lo hago en múltiples terminales.
Si desea emular múltiples terminales, puede ejecutar múltiples 'servicios' en docker-compose:
version: '3' services: app: container_name: 'app' build: context: . dockerfile: Dockerfile.dev ports: - '4200:4200' volumes: - /app/node_modules - .:/app lib: container_name: 'lib' build: context: . dockerfile: Dockerfile.dev volumes: - /app/node_modules - .:/app command: sh -c 'ng build my-library -- --watch'Este es un ejemplo de una definición de aplicación/prueba docker-compose que uso comúnmente:
version: '3.7' services: web: image: node:12-alpine volumes: - .:/src/app:cached ports: - 4200:4200 working_dir: /src/app command: /bin/sh -c "npm install && npm run start-docker" tests: image: node:12-alpine volumes: - .:/src/app:cached working_dir: /src/app command: /bin/sh -c "npm install && npm run test:watch"