En el post de hoy abordaremos temas acerca de Docker, entre ellos cómo crear imágenes multietapas optimizadas, cómo ejecutar un contenedor de docker pasando variables de entorno y ajustes personalizados utilizando técnicas avanzadas
Ten presente que este blog es la introducción basada en el video original del curso de Docker desde cero. Los temas abordados en el curso son los siguientes:
- DockerFile.
- Imagen (una) etapa.
- Docker Run.
- Dockerignore (RUN vs CMD).
- Docker build.
- Docker images.
- Docker images | grep
- Imagen (multi) etapas.
- No-cache.
- Docker run.
- Enviroments env-file.
- Docker ps.
- Docker stop.
- Docker -e (env).
- Docker --name.
- Docker rm.
- Docker -p mapear puertos 3001:3000.
- Docker run -d (daemon).
- Docker nginx.
- Virtual Host (nginx).
- Docker -v (volumen).
- Proxy_pass nginx.
- Docker network.
- Docker network create.
- Enrutamiento de contenedores mediante nginx
Cuando nos centramos en docker por lo general estamos hablando acerca de que cada una de estas aplicaciones son aplicaciones totalmente independientes y cada una de ellas vas a encontrar un fichero o tú debes de tener un fichero que es el docker file el docker file para las personas que no lo conocen es un fichero de texto plano como el que podemos ver en este momento básicamente contiene todas las instrucciones que se van a ejecutar para que tu imagen de la aplicación de node pueda funcionar de manera correcta.
¿Que quiere decir esto?
Que son como las instrucciones para que todo el mundo pueda estar ubicado aquí arriba he colocado un comentario diciendo. Ese es el docker file de la aplicación número uno.
Si tu quieres ver el curso completo te dejo el video
ahora lo que tenemos aquí en este punto es una imagen de docker que está haciendo uso de dos etapas, asi que te voy a mostrar la diferencia en números de una imagen construida con una etapa y una imagen construida con dos etapas.
Comenzamos diciéndole al docker que va a iniciar que va a partir de una imagen base de Node 18 observamos que dice Node 18 a secas literalmente está escrito así cuando se deja de esta manera le estamos diciendo a docker que utilice la imagen que está un full equipo.
¿Por qué voy a utilizar pnpm como gestor de paquetes de node pack manager?
Porque es eficiente reutiliza mejor los recursos a nivel de espacio luego línea número ocho le estoy diciendo que establezca el directorio de trabajo como user.
Le estoy diciendo que copie los archivos. packjs al directorio raíz y luego que ejecute el comando de pnpn install para instalar las dependencias luego le digo que copie todos los y aquí una cosa muy importante es que yo también tengo la existencia de otro archivo que se llama doc docker ignor.
¿Qué es Docker ignor?
Esto es básicamente como el git ignor pero la diferencia es que esto aplica aquí en esta línea cuando se hace el copy se van a copiar todos los ficheros exceptos aquellos directorios o archivos que estén ignorados en el docker ignor.
¿Cuál es la diferencia entre cmd y el ROM?
La diferencia es crítica y es básicamente que los comandos que se escriben o que se Ejecutan con el prefijo de ROM son comandos que van a ejecutarse en la etapa de la construcción de la imagen a diferencia de los comandos que se la diferencia es crítica y es básicamente que los comandos que se escriben o que se Ejecutan con el prefijo de ROM son comandos que van a ejecutarse en la etapa de la construcción de la imagen.
Trucos de optimización con docker file
Es simplemente estrategia de cómo poder aprovecharte de las multietapas en el docker file si yo dejo mi fichero como lo tenía antes lo que va a suceder aquí es que tú puedes ser bastante redundante al inicio cuando tú no conoces docker como que hay muchas cosas para obtener el mismo resultado pero la diferencia es crítica y ahí en esos detalles es donde está la magia básicamente lo que hasta este punto ya lo entendiste estamos construyendo nuestra aplicación pero luego tenemos otro front.
Cuando tú consigues más de un front es una imagen multietapas básicamente cada etapa le inicia un front y en este caso le estoy diciendo oye quiero que esta etapa la inicies con la versión de Node 18 ya que es una versión de Node muchísimo más ligera basado en una distribución de linux optimizada que solamente tiene las cosas necesarias Es una muy buena práctica utilizar este tipo de imágenes.
¿Algunos comandos más utilizados en Docker?
Si tu deseas aprender como se monta una imagen en un contenedor, comenzar a ejecutar el contenedor, levantar la aplicación en este punto necesitas aprender comandos.
Si tu deseas conocerlos te dejo link .
Recuerda que si tu deseas aprender más acerca de docker, puedes hacerlo en el siguiente video