
DE ESTO QUE ESTA ARRIBA VAMOS A REFORMARLO
debo copiar package.json solamente
VAMOS A ESTO
Vamos a reformarlo asi copiamos solo el package json y despues del npm install que es la instalacion de dependencias hacemos eso y docker en la linea 9 docker se da cuenta que no debe copiar de nuevo el package json
ahora si cambio las cosas usa el cache del npm install cada vez que reconstruya
hago cambios

cambio a node mon y queda asi para estar pendiente

toalsa
DA un error de dependencias como anteriormente tenia que desaparece node_modules
entonces tenemos que especificar el nombre del archivo a la hora de la ejecucion


nuevo
redes conectando dos contenedores
Comandos:
$ docker network ls (listo las redes)
$ docker network create –atachable plazinet (creo la red)
esta eituqeta da la posibilidad de conectarse con otros contenedores
$ docker inspect plazinet (veo toda la definición de la red creada)
$ docker run -d –name db mongo (creo el contenedor de la BBDD)
$ docker network connect plazinet db (conecto el contenedor “db” a la red “platzinet”)
$ docker run -d -name app -p 3000:3000 –env MONGO_URL=mondodb://db:27017/test platzi (corro el contenedor “app” y le paso una variable)
$ docker network connect plazinet app (conecto el contenedor “app” a la red “plazinet”)
Docker viene con unas redes ya hechas
$ docker run –d –name app -p 3000:3000 –env MONGO_URL=mondodb://db:27017/test platzi (corro el contenedor “app” y le paso una variable) aparentemente esta mal

es el default bridge es por la retrocompiabilitaddad
host es larepresentacion de la red reales interfaces todal a network e intertfaces reales de mi maquina
none es ningun tipo de aceso a redes basicamente edhabilitar el networkimng

coonectadmos
y ahora damos inspect y veras

tiene una vvariable de entorno



docker compose
docker compose viene en windows y mac en linux hay que instlarla
escribir de forma declarativa
primero versiones eso indica las versiones permitidas e incluso cambias las llaves


############################################################
# Dockerfile para configurar aplicación en node.js - Express
############################################################
# Establece la imagen base
FROM node
# Crear directorio de trabajo
RUN mkdir -p /opt/app
# Se estable el directorio de trabajo
WORKDIR /opt/app
# Instala los paquetes existentes en el package.json
COPY ./project/package.json .
RUN npm install --quiet
# Copia la Aplicación
COPY ./project/. .
# Instalación de Nodemon en forma Global
# Al realizarse cambios reiniciar el servidor
RUN npm install nodemon -g --quiet
# Expone la aplicación en el puerto 8000
EXPOSE 8000
# Inicia la aplicación al iniciar al contenedor
CMD nodemon -L --watch . app.js
clase 23
Comandos:
$ docker network ls (listo las redes)
$ docker network inspect docker_default (veo la definición de la red)
$ docker-compose logs (veo todos los logs)
$ docker-compose logs app (solo veo el log de “app”)
$ docker-compose logs -f app (hago un follow del log de app)
$ docker-compose exec app bash (entro al shell del contenedor app)
$ docker-compose ps (veo los contenedores generados por docker compose)
$ docker-compose down (borro todo lo generado por docker compose)




con docker compose los nombres son diferntes pero docker se encarga de conectarlos entre si



usamos la imagen con .
command: npx nodemon --legacy-watch index.js
CMD ["npx", "nodemon", "-L", "index.js"]
docker run --env-file ./.env image
asdasd dasdasdasdad
Usa la barra lateral para añadir la URL del repositorio GitHub a incrustar.
php artisan serve
CMD ["npx", "nodemon", "-L", "index.js"]
shell
1312321
git commit -m "hola"
esto es una preuba
21312312
312321312312
asi lo ignoro

poniendole dos puntos (:) le digo que no toque los dos puntos
alli en ese punto no hay hot reload esta funcionando pero alli no funciona
ahora usamos este comando

con NPX porque no esta instalado globalmente node mon
instalar https://platzi.com/blog/django-docker/
Compose OVERRIDE
Comandos:
$ touch docker-compose.override.yml (creo el archivo override)
$ docker-compose up -d (crea los servicios/contenedores)
$ docker-compose exec app bash (entro al bash del contenedor app)
$ docker-compose ps (veo los contenedores del compose)
$ docker-compose up -d –scale app=2 (escalo dos instancias de app, previamente tengo que definir un rango de puertos en el archivo compose)
$ docker-compose down (borro todo lo creado con compose)}
sirve para hacer pequeños cambios sobre el composer override

esto agrega dos variables la de docker y la otra
Nota los puertos no funcionan bien es mejor dejarlos en un solo lugar
podemos escalar en mas de un puerto con el comando
docker-compose up -d –scale app=2 (escalo dos instancias de app, previamente tengo que definir un rango de puertos en el archivo compose)
asi se define el rango

creando varios ambientes
https://medium.com/it-dead-inside/making-sense-of-docker-compose-overrides-efb757460d64
docker-compose up -d --scale [nameService]=[numberContainers]
clase 26 Administrando tu ambiente de Docker
Comandos:
$ docker ps -a (veo todos los contenedores de mi máquina)
$ docker container prune (borra todos los contenedores inactivos)
$ docker rm -f $(docker ps -aq) (borra todos los contenedores que estén corriendo o apagados)
$ docker network ls (lista todas las redes)
$ docker volume ls (lista todos los volumes)
$ docker image ls (lista todas las imágenes)
$ docker system prune (borra todo lo que no se esté usando)
$ docker run -d –name app –memory 1g platziapp (limito el uso de memoria)
$ docker stats (veo cuantos recursos consume docker en mi sistema)
$ docker inspect app (puedo ver si el proceso muere por falta de recursos)
# Remove All sudo docker rm -vf $(sudo docker ps -a -q) sudo docker rmi -f $(sudo docker images -a -q) sudo docker system prune -f sudo docker volume prune -f
# Eliminar todos los contenedores que no estan corriendo o apagados
docker container prune
# Eliminar todos los contenedores incluyendo los que estan corriendo (-q: muestra ID, -a: todos, -f: fuerza bruta)
docker rm -f $(docker ps -aq)
# Listar redes
docker network ls
# Eliminar las redes que no estamos usando
docker network prune
# Listar volumenes
docker volume ls
# Eliminar los volumenes que no estamos usando
docker volume prune
# Eliminar todos los contenedores, imagenes, redes y cache
docker system prune
# Limito el uso de memoria
docker run -d --name app --memory 1g platziapp
# Ver cuantos recursos consume docker en mi sistema
docker stats
# Ver si el proceso muere por falta de recursos
docker inspect app
el minimo es de 4 megabytes


En cmd de windows
para eliminar todos los containers
FOR /f "tokens=*" %i IN ('docker ps -q') DO docker stop %i
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
superior a 128 no es correctamente

https://dockertips.com/comandos-run-cmd-y-entrypoint-en-el-dockerfile
esto es una forma
shell

exec form

lo pongo asi correrara correctamente
se detiene inmediatabamente

27. Deteniendo contenedores correctamente: SHELL vs. EXEC
Contexto de la lección SHELL vs. EXEC
Al estar activo o recién crear un contendor, este debería estar ejecutando un proceso principal o main process para mantenerse en funcionamiento. En caso de que el main process se detenga el contendor debería dejar de funcionar.
Docker tiene una manera de manejar los procesos de los contenedores de manera estándar, cuando se manda detener el contenedor con la instrucción
docker stop <name-container>; con esta instrucción Docker manda una señal estándar de linux llamada SIGTERM al proceso; después de un tiempo el proceso deberá detenerse; en caso de no detenerse el proceso enviará otra señal llamada SIGKILL; con esta señal se garantiza que el proceso se ha terminado de manera forzada.
Existen problemas en la terminación de procesos ejecutados en los contenedores, una de las causas está asociado a ¿Cómo se debería declarar en Dockerfile el proceso a ejecutar?
digamos que tenemos estos dos archivos configurados de la siguiente manera
El primero es el dockerfile; sirve para construir nuestra imagen y el segundo es el archivo bash que se ejecutará como un main process o proceso principal del contenedor. Es importante destacar que la línea de CMD ejecuta nuestro archivo bash, a través de un shell, esta forma de expresar esta línea se conoce como shell form y esto genera que al momento de detener un contenedor que esté ejecutando un proceso por shell form necesariamente tendrá que usar un SIGKILL. Para evitar esto, el CMD debe ejecutar nuestro main process de form exec form , es decir nuestro archivo debe estar configurado de esta manera.
La idea de que el archivo esté configurado de esta manera es que de tiempo a que el contenedor procese las solicitudes restantes y pueda hacer un Great full shutdown. Otra nota importante es que los códigos de salida mayor a 128 es el resultado de una salida por un código de excepción.
comando utilizados en clases
- $ cd ~/docker/avanzado
- $ docker build -t loop .
build -t <nombre imagen> <contexto de construccion>
Construir la imagen se le coloca un tag de loop - $ docker run -d –name looper loop
run -d –name <nombre contenedor> <nombre imagen>
Crear un contenedor con un nombre basado en una imagen - $ docker stop looper
stop <nombre contenedor>
Envía la señal SIGTERM al contenedor - $ docker ps -l
Muestra el último proceso ejecutado - $ docker kill looper
Kill <nombre contenedor>
Envía la señal SIGKILL al contenedor - $ docker exec looper ps -ef
exec <nombre contenedor> ps -ef
Muestra los procesos del contenedor
Responder
Manuel Perez GarridoHace un año1
En la segunda imagen debería ser
#!/usr/bin/env bash
trap 'exit 0' SIGTERM
while true; do :; don
US
SIEMPRE USA EXEC ES IMPORTANTE
dsadasdsa
2313213