Crear el fichero Dockerfile
con lo necesario para el funcionamiento de nuestra app.
# Imagen NodeJS
FROM node:20.16
# Utilizar un usuario
RUN groupadd -r usuariocontenedor && useradd -r -g usuariocontenedor usuariocontenedor
USER usuariocontenedor
# Direcotrio APP
RUN mkdir -p /usr/src/nombreapp
WORKDIR /usr/src/nombreapp
# Instalar dependencias, compilar app, etc
COPY package*.json ./
RUN npm ci
# Código de la APP
COPY . .
# Puerto en el que se inicia la APP
EXPOSE 80
# Comando que inicia la aplicación
CMD [ "npm", "start" ]
En este caso en el fichero package.json
debemos tener el script
llamado start
para iniciar nuestra APP.
Crear el fichero .dockerignore
en los que incluiremos los directorio y ficheros que debe ignorar docker como: repositorio git, directorios dist/build, node_modules, ficheros de logs, etc.
En nuestro caso también incluiremos el fichero .env para evitar que la configuración de las variables de entorno quede dentro de la imagen que generaremos.
.git
dist/
node_modules/
.vscode
logs/
*.log
.env
Dockerfile
.dockerignore
Crear fichero docker-compose.yml
services:
nombreapp:
build:
context: .
dockerfile: Dockerfile
image: nombreapp
read_only: true
security_opt:
- no-new-privileges:true
container_name: nombreapp
restart: unless-stopped
env_file: .env
ports:
- 8081:80
# Construir imagen
docker-compose build
# Reconstruir el contenedor
docker-compose up --force-recreate
# Lanzar existente
docker-compose up -d
# Para contenedor
docker-compose stop
# Borrar contenedor
docker-compose down
# Ver log app
docker logs -f nombreapp
docker build -t nombreapp:0.0.1 .
docker build -t nombreapp:latest .
docker build -t nombreapp/nombretag:0.0.1 .
docker build -t nombreapp/nombretag:latest .
run
docker run -d --name nombreapp -p 8080:80 nombreapp:latest