Docker, conceptos fundamentales

En el vertiginoso mundo del desarrollo de software, Docker se alza como un pilar fundamental que ha transformado la forma en que creamos, distribuimos y ejecutamos aplicaciones. ¿Te preguntas qué es Docker y cómo funciona? En este artículo, exploraremos los conceptos esenciales detrás de esta poderosa herramienta de contenedores que ha revolucionado la industria de la tecnología. Desde sus fundamentos hasta su impacto en el desarrollo ágil, descubre por qué Docker se ha convertido en un elemento imprescindible en el arsenal de cualquier desarrollador moderno.

¿Qué es Docker?

Docker pertenece a las tecnologías de virutalización mediante contenedores.
En este caso Docker lo que permite es trabajar unicamente con los recursos estrictamente necesarios para su funcionamiento, en lugar tener que instalar sistemas operativos completos

Docker es una plataforma abierta que se usa para desarrollar aplicaciones y para facilitar el despliegue de las mismas. 

Los contenedores Docker, se basan en un conjunto de imágenes que permite compartir una aplicación con todas sus dependencias entre varios entornos.

¿Para que sirve Docker?

Aunque Docker tiene un funcionamiento similar a una maquina virtual, su rendimiento, portabilidad y compatibilidad con el sistema operativo son distintos.

La principal diferencia es que los contenedores Docker comparten el sistema operativo del anfitrión, mientras que las máquinas virtuales también tienen un sistema operativo invitado que se ejecuta sobre el sistema anfitrión

Solo se tiene que programar la aplicación una sola vez. Sin importar sobre que plataformas hardware o sistemas operativos se va a desplegar.

Uno de los problemas principales que resuelve Docker, son los errores ocasionados al desplegar tú aplicación en entornos distintos
(sistemas operativos, versiones, entornos, etc.) .

Elementos que componen Docker

Imágenes

Las imágenes son plantillas de sólo lectura que contienen todo lo necesario para hacer que ciertas funciones sean ejecutadas (Nginx, MongoDB, PHP, etc.) y se utilizan para poder crear contenedores; estas imágenes están hechas a partir del comando docker build y pueden estar conformadas por capas de otras imágenes.

Contenedores

Son instancias de una imagen y nos ayudan a poder tener un entorno aislado para nuestras aplicaciones. Los contenedores son una encapsulación ligera y portable de un entorno en donde se ejecutan las aplicaciones. Los contenedores se crean a partir de las imagenes. Dentro del contenedor se tendrán todas las dependencias necesarias para ejecutar las aplicaciones. Es una forma de empaquetar nuestras aplicaciones con todas nuestras dependencias y que sea facil de compartir entre equipos. Es decir es portable.

Registry

Es el lugar en donde podemos almacenar nuestras imágenes para poder descargarlas desde otros equipos, el registry público de Docker es el Docker Hub pero podemos nosotros hospedar nuestro propio registry en caso de necesitarlo e incluso GitLab ofrece esa funcionalidad.

Repositorio

Es una colección de diferentes imágenes con un mismo nombre, usualmente utilizado para poder tener un versionamiento de las imágenes que vamos generando con el paso del tiempo.

Dockerfile

El dockerfile es un documento de texto que contiene las instrucciones que el usuario va indicar para ir añadiendo las dependencias necesarias para crear una imagen.
Las instrucciones especifican los pasos que se deben seguir en el momento de construir la imagen.

Imagen de un dockerfile sencillo de php

Elementos de un Dockerfile y su significado:

  1. FROM: Con la instrucción FROM le indicamos a Docker cual es la imagen que vamos a tomar como base
  2. LABEL: Se usa para añadir metadatos a la imagen
  3. RUN: indicamos la instrucción o comando que debe ejecutar
  4. &&: con el doble aspersan, podemos encadenar distintos comandos
  5. CMD : instrucciones CMD, si no se indican docker utilizará el comando por default definido en la imagen base.
  6. COPY: Copia nuevos archivos o directorios desde el contexto del build y los agrega al filesystem del contenedor
  7. ADD: Esta instrucción además de copiar archivos, también permite descargar archivos desde internet y agregarlos al contendor, comprimir y descomprimir archivos.
  8. EXPOSE: permite exponer puertos para que otros contenedores puedan acceder a él.
  9. ENV: permite añadir variables de entorno a la imagen

Comando para crear una imagen

docker build -t nombre_que_queremos_dar . 
                                                                            

Si nuestro dockerfile estuviera en una ruta distinta a la que vamos a ejecutar el docker build, deberiamos sustituir el ‘.’ por la ruta donde estuviera ubicado el fichero.


Comandos básicos

Antes de nada, para poder ejecutar docker en tú equipo, debes tenerlo instalado. Para eso, hace a este enlace Docker Desktop y realiza la instalación.

Para ejecutar los comandos de ejemplo, voy a usar la imagen de alpine. Pero tú puedes hacerlo con la imagen que deses. Puedes buscar en el register público de docker, el Docker Hub , y ahí podrás encontrar una infinidad de imagenes ya construidas. Para ello solo tendrás que registrarte como usuario en la plataforma.

Listar imagenes descargadas: docker images 
Crear imagen indicando su tag:  docker run alpine:3.7 o docker pull alpine:3.7
Listar archivos de la imagen:  docker run alpine:3.7 ls /
Eliminar imagenes:  docker image rm alpine:3.7
Crear contenedor a partir de una imagen:  docker create --name nombre alpine
Iniciar el contenedor: docker start id_contenedor al crear el contenedor con el comando anterior, nos dara un id que es el que usaremos
Crear una terminal dentro de una imagen/contenedor para trabajar dentro del contenedor:  docker exec -it alpine:3.7 bash
-i = input, hace que el contenedor pueda ejecutar los comandos que proviene de nuestro ordenador;
-t = significa que va a mostrar una terminal nativa en el contenedor.

Espero que esto te haya servido para empezar a conocer un poco mejor cómo funciona Docker, e ir poco a poco trabajando con imágenes y dockerizando tus entornos.

Es un proceso que debes ir recorriendo poco a poco, pero una vez que te acostumbras, no querrás desarrollar de otra forma.

Por último, si tienes alguna duda o sugerencia. Puedes contactarme a través del formulario de contacto o por medio de mis perfiles en redes sociales.

Espero que este articulo te haya sido de utilidad y no dudes en compartirlo si crees que puede ser de utilidad para otras personas.

feliz código a tod@s!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *