Dockerfile creation Tutorial - Dockerfile Instructions Explained with example!

Dockerfile creation Tutorial - Dockerfile Instructions Explained with example!

¿Cómo crear un Dockerfile correctamente?

Introducción a Dockerfile

  • Las imágenes de Docker se construyen leyendo instrucciones de un archivo de texto llamado Dockerfile. Este video enseña cómo crear un Dockerfile con la sintaxis correcta y explica diferentes instrucciones mediante una demostración práctica.
  • Para crear una imagen de Docker para una aplicación, es necesario tener un Dockerfile que siga la sintaxis adecuada y contenga las instrucciones requeridas.

Estructura del Dockerfile

  • El nombre del archivo debe ser exactamente "Dockerfile" (con D mayúscula), como se menciona en la documentación oficial de Docker.
  • En el Dockerfile, la primera línea puede ser un comentario, que se crea usando el símbolo de hash (#), similar a otros lenguajes de programación como Python.

Instrucciones en el Dockerfile

  • La estructura del formato del Dockerfile es "instrucción y argumento". Aunque no es sensible a mayúsculas, se recomienda usar letras mayúsculas para las instrucciones para diferenciarlas más fácilmente.
  • Existen diversas instrucciones que puedes incluir en tu Dockerfile para definir cómo deseas crear tu imagen. La instrucción "FROM" suele ser la primera utilizada.

Definiendo la Imagen Base

  • La instrucción "FROM" define la imagen base sobre la cual quieres construir tu imagen de Docker. Puedes encontrar diferentes imágenes en Docker Hub.
  • Por ejemplo, si necesitas Python instalado, puedes usar "FROM python". También puedes especificar versiones particulares añadiendo ":<versión>" al final.

Creando Imágenes con Comandos

  • Al buscar imágenes oficiales en Docker Hub, puedes ver las instrucciones necesarias para crear esas imágenes.
  • Para este demo, se usará Alpine como imagen base: FROM alpine:3.18. Esto establece Alpine 3.18 como base para el nuevo proyecto.

Construyendo y Verificando Imágenes

  • Para crear una imagen desde el Dockerfile, se utiliza el comando docker build -t my_image ., lo que genera una nueva imagen basada en las instrucciones proporcionadas.
  • Las imágenes de Docker son creadas utilizando capas; actualmente solo hay una instrucción (una capa). Se puede verificar su creación usando docker images.

Comprobando el Sistema Operativo dentro de la Imagen

  • Para comprobar qué sistema operativo está utilizando la imagen creada, ejecuta cat /etc/os-release dentro del contenedor.

¿Cómo crear imágenes Docker utilizando un Dockerfile?

Instrucción FROM

  • La instrucción FROM permite especificar la imagen base que se utilizará para crear una nueva imagen Docker. Se puede usar múltiples veces en un solo Dockerfile para crear varias imágenes o imágenes de múltiples etapas.
  • Es posible nombrar cada etapa usando la palabra clave AS, por ejemplo, FROM python:3.9 AS build1.

Instrucción RUN

  • La instrucción RUN se utiliza para ejecutar comandos durante el proceso de construcción de la imagen. Por ejemplo, se puede instalar software en una imagen Alpine con RUN apk add curl.
  • Existen dos formatos para la instrucción RUN: el formato shell y el formato exec. En el formato shell no es necesario definir qué shell se usará, mientras que en el formato exec sí.
  • Para instalar herramientas como curl, se puede usar RUN apk add curl, lo que crea una nueva capa en la imagen.
  • Al ejecutar docker history my_image, se pueden ver todas las capas creadas durante la construcción de la imagen.

Instrucción WORKDIR

  • La instrucción WORKDIR establece el directorio de trabajo para cualquier instrucción posterior como ADD, COPY, CMD y ENTRYPOINT.
  • Si el directorio especificado no existe, WORKDIR lo creará automáticamente. Por ejemplo, al establecerlo a /downloads, si no existe, será creado.
  • Después de construir la imagen con esta configuración, al ejecutar un comando PWD (print working directory), mostrará que está utilizando el nuevo directorio establecido.

Instrucción USER

  • La instrucción USER permite establecer un usuario específico (y opcionalmente un grupo) como predeterminado para los siguientes comandos en lugar del usuario root por defecto.
  • Al ejecutar el comando whoami dentro de una imagen sin configurar otro usuario, mostrará "root".
  • Si intentamos establecer un usuario que no existe (por ejemplo, "Cloud sham"), obtendremos un error indicando que no hay entradas coincidentes.

Creación y Configuración de Imágenes Docker

Creación de un Usuario en el Contenedor

  • Se utiliza el comando RUN para crear un usuario dentro del contenedor, específicamente el usuario "cloud champ". Esto se hace al construir la imagen.
  • Al establecer el usuario con la instrucción USER, se asegura que las siguientes instrucciones se ejecuten bajo este nuevo usuario. Se verifica usando el comando whoami, que debería devolver "cloud champ" en lugar de "root".

Construcción de una Imagen Windows

  • Se discute cómo crear una nueva imagen Docker basada en Windows, comenzando por eliminar instrucciones anteriores y agregar nuevas específicas para Windows.
  • La instrucción FROM establece la imagen base como PowerShell de Microsoft, disponible en Docker Hub.

Ejecución de Comandos en Diferentes Sistemas Operativos

  • Se utilizan comandos Linux (mkdir) y Windows (comando no especificado), lo que plantea la pregunta sobre cómo Docker maneja diferentes sistemas operativos.
  • Al intentar construir la imagen, surge un error relacionado con el uso del shell incorrecto (bash en lugar de PowerShell).

Cambio del Shell Utilizado

  • Para solucionar errores relacionados con el shell, se introduce la instrucción SHELL para definir qué tipo de shell utilizará Docker al ejecutar comandos.
  • La documentación sugiere usar PowerShell o CMD como alternativas a /bin/sh, que es predeterminado para Linux.

Definición de Variables de Entorno

  • La instrucción ENV permite establecer variables de entorno dentro del archivo Docker. Por ejemplo, se puede definir APP_HOST como 0.0.0.0.
  • Es posible agregar múltiples variables utilizando una sola instrucción ENV, separándolas con una barra invertida (``).

Verificación de Variables Ambientales

  • Después de construir la imagen con las variables definidas, se ejecuta un contenedor para verificar si las variables están correctamente configuradas usando el comando env.

Introducción a las Instrucciones de Docker

Variables de Entorno y Copia de Archivos

  • Se pueden establecer variables de entorno dentro de los contenedores utilizando ENV. Un contenedor Docker consiste en código, dependencias y bibliotecas.
  • Para copiar archivos desde la máquina local al contenedor, se utiliza la instrucción COPY, que permite transferir archivos del origen (máquina local) a un destino específico dentro del contenedor.
  • Al crear una imagen Docker, se puede verificar que el archivo app.py está presente en el directorio /c/code después de ejecutar el comando correspondiente.

Uso de Instrucciones ADD

  • La instrucción ADD es similar a COPY, pero también permite copiar archivos desde ubicaciones remotas, como un bucket S3.
  • Se puede construir una imagen usando la instrucción ADD para incluir archivos remotos. Esto proporciona funcionalidad adicional al proceso de copia.

Exposición de Puertos

  • La instrucción EXPOSE se utiliza para definir puertos en los que el contenedor escuchará tráfico. Por ejemplo, si una aplicación corre en el puerto 5000, se debe usar EXPOSE 5000.
  • Al inspeccionar la imagen creada con docker inspect, se puede confirmar que el puerto 5000 está expuesto correctamente.

Comandos Esenciales: ENTRYPOINT y CMD

  • Las instrucciones más importantes para ejecutar procesos dentro del contenedor son ENTRYPOINT y CMD. Estas definen qué comandos o procesos deben ejecutarse al iniciar el contenedor.
  • Se puede tener tanto un ENTRYPOINT como un CMD, donde el primero define el ejecutable y el segundo los parámetros. Si ambos están presentes, los parámetros del CMD pueden ser sobrescritos.

Ejecución y Verificación

  • Al construir e iniciar una imagen con las instrucciones adecuadas, se verifica si la aplicación funciona correctamente accediendo al puerto especificado.

Comprendiendo el Comando CMD y Entry Point en Docker

Ejecución de Contenedores y Parámetros

  • Al ejecutar un contenedor, se puede especificar un tiempo de espera (sleep) que por defecto es de 5 segundos. Sin embargo, este valor puede ser sobrescrito al ejecutar el comando, permitiendo establecer un nuevo tiempo, como 10 segundos.

Documentación y Recursos Adicionales

  • Para una mejor comprensión sobre las diferencias entre CMD y Entry Point, se recomienda consultar la documentación oficial de Docker. También se sugiere revisar respuestas en Stack Overflow o videos en YouTube para aclarar dudas.

Uso de Etiquetas (Labels)

  • Las etiquetas son utilizadas para proporcionar información adicional sobre la imagen del contenedor. Esto incluye detalles como la versión de la imagen o el creador/maintainer.

Instrucción Label

Video description

How to write dockerfile | Dockerfile explained | Dockerfile tutorial for beginners | What is dockerfile and how to build it This dockerfile tutorial explains all dockerfile instructions with hands on demo and example. To create a docker image you need to create dockerfile and in this tutorial you will learn how to create a dockerfile for your application #docker #dockerfile #devops Dockerfile instructions page: https://docs.docker.com/reference/dockerfile/ This tutorial on Dockerfile will help you learn how to create a docker file using Docker container and Docker Image. Here, we will see what is a Docker Container, the benefits of Docker, the syntax of the docker file, how to build docker images using the docker file, and a simple way to create DockerFile. Now, with further ado, let us get started with the Docker file tutorial video. Timestamps What is dockerfile 00:00 How to write dockerfile 00:47 Dockerfile format 01:19 Dockerfile FROM instruction 02:09 Dockerfile RUN instruction 06:20 Dockerfile WORKDIR instruction 08:35 Dockerfile USER instruction 10:36 Dockerfile SHELL instruction 12:27 Dockerfile ENV instruction 15:40 Dockerfile COPY instruction 18:00 Dockerfile ADD instruction 19:12 Dockerfile EXPOSE instruction 20:30 Dockerfile ENTRYPOINT and CMD instruction 21:35 Dockerfile LABEL instruction 24:52 Connect with me on LinkedIn: https://www.linkedin.com/in/nasiullha-chaudhari/ 🐳 DOCKER - Container concept - Why docker? (image vs. traditional DevOps) - Install docker on different operating systems - 8 basic commands you need to know - Docker vs. Virtual Machine - Docker in Practice: Overview of whole development process with Docker (development, continuous delivery, deployment) - Develop an application with Docker - Docker Compose - Dockerfile - Private Repository - Deploying your containerized application - Docker Volumes from theory to practice Interested to learn more, check out: Docker tutorial for beginners: https://youtu.be/q5S14cfOWfE Docker init & Docker scout Explained: https://youtu.be/rqEcheJgquA Complete Terraform Course: https://youtu.be/XgwV2HnBSws Gitlab CICD Course: https://youtu.be/JWXVijJfnHc What is Kubernetes and How it works? https://youtu.be/al9R-yfP4UA How I became CKA certified: https://youtu.be/dHXgg9fbP8E How I would learn DevOps from scratch https://youtu.be/EAXdnPWUCcc DevSecOps Project to deploy Netflix : https://youtu.be/g8X5AoqCJHc DevOps Interview Questions and Answers: https://youtu.be/GX6fOvaS0Xs After watching this dockerfile tutorial, I hope now you understood all the dockerfile instructions along with command and know how to write and create dockerfile for your application. Subscribe for more. Join this channel to get access to perks: https://www.youtube.com/channel/UCbg9O0JF3rVKev6wpI5_u5g/join