dev-resources.site
for different kinds of informations.
Dockerando una aplicaci贸n de Angular
En este post vamos a crear un contenedor para correr una aplicaci贸n de Angular para desarrollo. Angular es uno de los marcos de trabajo m谩s famosos del mundo, hago este post para ayudar a los equipo de desarrollo que est茅n migrando sus proyectos a contenedores.
En el equipo que desarrollo hicimos el paso decidimos hacer este contenedor porque a pesar de tener las mismas dependencias instaladas y las mismas versiones tanto de Angular como de NodeJS ten铆amos comportamientos no esperados. Es por ello que se decidi贸 crear un contenedor para que todo sea absolutamente todo lo mismo. En el pr贸ximo articulo les voy ayudar a crear una imagen personalizada para ambiente productivo.
Regularmente a mi me gusta ocupar dos archivos de configuraci贸n
- dev.Dockerfile
- docker-compose.override.yml
El primero regularmente lo ocupa para la personalizaci贸n de la imagen base y agregar capas personalizadas a la misma de acuerdo con mis necesidades. Y el otro archivo regularmente lo ocupo para configurar los vol煤menes persistentes y tambi茅n los puertos que van a estar expuesto.
A continuaci贸n muestro el contenido del archivo de dev.Dockerfile, regularmente debe de estar a nivel de proyecto, como se muestra a continuaci贸n:
Estructura de proyecto de ejemplo ignorar el archivo docker-compose.yml
Contenido de dev.Dockerfile
FROM node:20.10.0
RUN mkdir -p /app
WORKDIR /app
COPY ["app-angular/package.json", "app-angular/package-lock.json", "/app/"]
COPY ["app-angular", "/app/"]
RUN npm install -g @angular/cli @angular-devkit/build-angular && npm install
CMD ["npm", "run", "start"]
Las lineas se describen a continuaci贸n:
- La primera parte es el nombre de la imagen de node puedes optar por la completa o por alguna versi贸n de Alpine Linux que regularmente son mucho mas ligeras lo cual agiliza el proceso de despliegue cuando se hace por medio de pipelines.
- Creamos una carpeta dentro de contenedor a nivel de raiz en donde se van a almacenar los archivos de nuestro proyecto.
- Establecemos el directorio en donde nos queremos mover y en donde se ejecutaran los comandos siguientes.
- Se copian los archivos de configuraci贸n de NPM (package.json y package-lock.json) que se encuentran dentro de la carpeta app-angular dentro del contenedor.
- Se copian todos los archivos que se encuentran dentro de la carpeta del proyecto de app-angular dentro del contenedor.
- Se instalan las dependencias que est谩n configuradas dentro del contenedor.
- Se corre el proyecto dentro del contenedor.
Todos los pasos anteriores deber铆amos de tener una imagen lista para poder ocupar con nuestro archivo de docker-compose.yml
Contenido del archivo de docker-compose.yml
name: angular-project
services:
angular-container:
build:
context: .
dockerfile: dev.Dockerfile
ports:
- "4200:4200"
volumes:
- ./app-angular:/app
- /app/node_modules
El archivo de configuraci贸n de docker-compose.yml es importante porque yo regularmente lo ocupo para configurar puertos y vol煤menes persistentes. Ocupo este archivo porque es sencillo modificar y bastante visual.
- La primera linea es el nombre del stack
- El segmento de build es importante porque ah铆 se especifica cual es el documento de Dockerfile que se va ocupar.
- En el segmento de ports se especifica cual es el puerto que se va exponer en tu localhost. El puerto de la izquierda es de tu host o computadora y del lado derecho es el del contenedor, no necesariamente deben de coincidir.
- Se configura un volumen, este volumen es para que todos los archivos dentro de app-angular si son modificados se vean reflejados autom谩ticamente en el contenedor. El segundo es para decir que ignore la carpeta de node_modules y no la sincronice con el host.
Teniendo estos dos archivos ahora solo se debe de ejecutar el siguiente comando:
docker-compose up -d --build
Este comando har谩 que no solo se cree la imagen a partir del dev.Dockerfile sino que tambi茅n corra la imagen con las configuraciones del docker-compose.yml
Featured ones: