Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

Implementaci贸n de Dockerfile

3/21
Recursos

En esta clase te vamos a mostrar c贸mo usar un Dockerfile y manejar las dependecias para tenerlas lock in, siempre instalar una versi贸n que ya usaste y probaste.

FROM: Busco una imagen de origen y a partir de ah铆 se monta el container.
WORKDIR: Es recomendable no correr todo el root. Con esto le decimos a Docker cu谩l va a ser nuestra carpeta de trabajo.
ADD: Es donde indicamos nuestras dependencias como package.json, hace cache de esa capa para no ejecutarla cada que corramos nuestro contenedor. Tambi茅n sirve para copiar, como lo hacemos en la d茅cima l铆nea.
RUN: le decimos a docker que ejecute un comando. En este caso npm install
EXPOSE: Exponemos el puerto 3000
CMD: Ac谩 le decimos a Docker que ejecute este comando al momento de ejecutar nuestro container. En este caso correr谩 la aplicaci贸n.

dockerignore: es casi igual al gitignore, pero para docker.

Aportes 27

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

No es claro el inicio del curso, mezclan muchas temas a la vez, o este es una continuaci贸n del curso de Docker?

Para ser el inicio del curso est谩 mal organizado, creo que primero se debi贸 explorar conceptos de DevOps y su cultura antes de entrar en herramientas, as铆 como ac谩 se requiere conocer Docker previamente m谩s adelante puede ser cualquier otra

Si la verdad en este video me siento aprendiendo de Doker mas no de DevOps.

Resumen de los comandos en un dockerFile:
FROM : indica la imagen base sobre la que se construir谩 la aplicaci贸n dentro del contenedor.

WORKDIR : Establece el directorio de trabajo donde se correr谩 cualquier comando como RUN, CMD, COPY, etc.

RUN : nos permite ejecutar comandos en el contenedor, por ejemplo,聽instalar paquetes o librer铆as

ADD : esta instrucci贸n聽copia archivos a un destino especifico聽dentro del contenedor, normalmente nos sirve para dejar ubicados ciertos archivos que queremos mover entre directorios.

CMD : esta instrucci贸n nos聽provee valores por defecto a nuestro contenedor, es decir, mediante esta podemos definir una serie de comandos que solo se ejecutaran una vez que el contenedor se ha inicializado,聽pueden ser comandos Shell聽con par谩metros establecidos.

EXPOSE : Indica los puertos TCP/IP los cuales pueden acceder a los servicios del contenedor.

Referencias:
https://openwebinars.net/blog/que-es-dockerfile/
https://stackoverflow.com/questions/51066146/what-is-the-point-of-workdir-on-dockerfile

Manejar dependencias es algo muy importante cuando se trata de desarrollar software, no importa el lenguaje, debemos tener siempre nuestras dependencias 鈥渧endor鈥 o 鈥渓ock in鈥, es decir, que siempre se instalen una versi贸n que ya hayamos probado.

El Dockerfile siempre empieza con un FROM, a trav茅s del cual busca una imagen base sobre la cual crear el nuevo contenedor.
As铆 como es importante fijar dependencias, es tambi茅n muy importante manejar versiones exactas de las im谩genes, porque pueden tener cambios en nuevas versiones que afecten o impidan el funcionamiento correcto de nuestros contenedores. La idea es tener siempre algo reproducible.

Es recomendable, que no corramos todo en /root; la buena pr谩ctica es crear un nuevo directorio donde copiemos nuestro servicio o aplicaci贸n. Para esto, utilizamos el comando WORKDIR dentro del Dockerfile.

Los container guardan layers o capas para hacer cach茅 cuando un mismo Dockerfile vuelva a ser construido, y de esta manera, se toma menos tiempo dicha construcci贸n al reutilizar capas similares. Por esto, es una buena pr谩ctica definir primero los comandos que no cambian la imagen y de 煤ltimo, aquellos que s铆 la modifican. De manera que si 2 capas cambian en una imagen de siete, s贸lo cambien las 2 al ser construidas y no m谩s de ellas al no estar ordenados los comandos de forma correcta.
Al manejar dependencias con versiones exactas, no se deber铆a volver a ejecutar el paso de instalaci贸n de las mismas en cada construcci贸n de una imagen si no se modific贸 el archivo en donde se definen; y si se modific贸, las dependencias que ya hab铆an sido instaladas deber铆an tener exactamente el mismo comportamiento que la imagen anterior.

Es muy importante tambi茅n utilizar .dockerignore, puesto que pueden ser transferidos archivos exclusivos de la m谩quina desde donde se construye la imagen, a ella. Uno de los casos m谩s comunes de su utilizaci贸n, es para evitar que las dependencias de nuestra m谩quina local sean a帽adidas a la imagen en construcci贸n (las dependencias compiladas de un sistema operativo ocasionar谩n problemas en otro kernel).

Nuestro objetivo es reducir al m谩ximo la posibilidad de errores.

No es muy claro que explique codigo y no se vea el codigo

# Buscar imagen origen
FROM node:11.1.0-alpine 

#Directorio en el que vamos a trabajar
WORKDIR /app

# 
ADD package.json package-lock.json /app/
RUN npm install

#Configuramos el puerto que se va a exponer
EXPOSE 3000

#
ADD . /app
#Ejecutar la razon por la cual se ejecuta node es para que se encuentre en el PID 1
CMD ["node", "index"]

Que curso mas mal hecho, porque no crean un verdadero curso de devops y una escuela junto a ello?

Se manejan algunos conceptos muy de Docker pero al dar una repasada en lo que menciona podemos continuar con el curso

Yo termine luego de algunas semanas el curso de Docker antes de continuar con el curso de DevOPs

De los cursos que he realizado en Platzi el de Docker ha sido el m谩s universal de todos. Casi siempre se nombra o se utilizar para algo.

Todo esto se explica muy bien en la clase de Docker de Guido Vilari帽o! Un genioo. 馃挌

Para aprender un poco m谩s del fichero package-lock.json para el control de las versiones de las dependencias les recomiendo el siguiente link

realize el curso de docker solo por que no entendi nada de lo que decias. ahora entiendo todo. pero ahora tengo una pregunta. 驴Por que usar ADD y no COPY?

El Dockerfile es una herramienta que nos ofrece la posibilidad de crear una imagen Docker a medida. Contiene una serie de instrucciones dentro de un fichero que har谩n que podamos crear im谩genes Docker r谩pidamente.

Dicho de otra manera, Dockerfile es un documento de texto que contiene las 贸rdenes a las que un usuario puede llamar desde la l铆nea de comandos para crear una imagen.

La instrucci贸n de terminal seria la siguiente:

docker build -t <Nombre que le quieras asignar a la imagen> . <El punto es el contexto del Dockerfile, en resumen el directorio donde se encuenta>

Definitivamente, est[e empieza siendo un curso de Docker, no del marco de trabajo como tal de DevOps

no entiendo como habla este profesor

Para acceder a este proyecto: https://github.com/elbuo8/platzi-scripts
(la carpeta de este curso es webapp)

Node en la primera l铆nea del Dockerfile

No es claro, no me gusta este curso, me confunde mucho

exelente clase

En este ultimo Curso hay como una mezcla de temas鈥 Parece a modo de Repaso

Es recomendable hacer el curso de docker antes de este, pq sino te perderas

Me atrever铆a a decir que cuando tienes un buen control de las dependencias listadas en el package.json, enti茅ndase esto por buen entendimiento del versionado sem谩ntico, o semver, esta buena pr谩ctica de cachear la capa RUN npm install tiene m谩s el prop贸sito de optimizar el tiempo en que el contenedor se levanta, ya que conforme el proyecto va necesitando de m谩s y m谩s dependencias esta capa tarda hasta un par de minutos en ejecutarse pues /node_modules/ es un directorio habitualmente de gran tama帽o. Si escribes una versi贸n espec铆fica que no defina ni patch changes entonces no importa cuantas veces se descarguen las dependencias siempre ser谩n las mismas.

Seria bueno agregar en la ruta de aprendizaje o requisitos previos sugeridos para este curso, el curso de Docker. Creo que de lo contrario es confuso

interesante

Entendiendo el Dockerfile