Saltar al contenido

HABLANDO DE DOCKER

Buenas,

En este post me gustaría hablar un poco sobre Docker, sin entrar en profundidad de esta herramienta ya que esto daría para un curso completo, se podría decir que sirve para desplegar aplicaciones o servicios en contenedores de forma rápida y portable, se les podría llamar “aplicaciones de bolsillo”

Para intentar entender docker primero debemos conocer su arquitectura.

arquitecturadocker

En la imagen podemos ver los componentes de Docker, estos se explican a groso modo a continuación:

  • Docker Host: Es la maquina física/virtual en la que va a correr docker
  • Docker CLI: Es el comando docker, con este manejaremos imágenes, contenedores, redes y volúmenes.
  • Docker Daemon: Es el demonio que presta el servicio de Docker, se le podría llamar “El servidor”
  • Rest API: Es la api que se encargara de comunicar el Docker CLI con el Docker Daemon.

Pero que te estarás preguntando ¿pero esto de imágenes, contenedores, volúmenes y redes que es? no te preocupes, en este post intentaré que quede claro para lo que sirve cada uno de estos.

Imágenes

Bueno el tema de las imágenes es bastante amplio, pero con saber que es el paquete que contiene toda la configuración para que funcione el servicio por ahora es mas que suficiente.

Una imagen esta compuesta por CAPAS, estas capas son de solo lectura, es decir no se pueden modificar una vez la imagen es creada. Las capas mas importantes son:

  • FROM: Es la base sobre la cual se va a construir nuestra imagen, suele ser el Sistema Operativo o otra imagen misma.
  • RUN: Es un comando que se va a ejecutar sobre la capa FROM.
  • COPY/ADD: Copiar archivos desde nuestra maquina a nuestra imagen.
  • ENV: Definir variables de entornos.
  • WORKDIR: Directorio de trabajo.
  • EXPOSE: Expone puertos.
  • LABEL: Son etiquetas, para añadir metadata.
  • USER: Usuarios que van a ejecutar la tarea.
  • VOLUME: Se definen volúmenes para almacenar información.
  • CMD: Es el comando que se va a ejecutar para iniciar el servicio, debe ejecutarse en primer plano gracias a este comando el contenedor se mantiene vivo, si no existiera al crear el contenedor moriría al instante.

Estas capas se configuran en el fichero Dockerfile, el cual es un fichero de texto utilizado a la hora de construir una imagen con docker build.

Aparte de crear nuestras propias imagen mediante un Dockerfile y docker build, también podemos descargar imágenes oficiales de docker Hub, un repositorio publico donde desarrolladores suben imágenes ya construidas.

https://hub.docker.com/

Para descargar las imágenes de Docker Hub es tan simple como poner el nombre de la imagen y el tag que queremos descargar en el comando docker pull, por ejemplo:

docker pull mongo

Podremos ver las imágenes disponibles en nuestro docker host con el comando docker images

docker images

Contenedores

Se podría decir que un contenedor es una capa adicional donde se van a ejecutar las imágenes, esta capa es de lectura y escritura pero OJOesta capa es temporal, en el momento que el contenedor muera los cambios desaparecerán y levantara con la configuración de la imagen, hay una manera de crear una imagen de un contenedor modificado con el comando docker commit.

Un contenedor puede contener imágenes, volúmenes y redes.

Volúmenes

Como hemos indicado cada vez que un contenedor levanta tendrá la configuración inicial de la imagen.

Un volumen es la forma de hacer que los datos sean persistentes en los contenedores, es decir, los datos que no queremos perder cuando el contenedor muera, por ejemplo las tablas o datos de una base de datos, logs de un apache…

Tipos de volúmenes

  • Volúmenes de host: Los datos del contenedor se almacenaran en un directorio del Docker Host. Ejemplo:

docker run -d –name mysql -p 3306:3306 -e “MYSQL_ROOT_PASSWORD=123456” -v /root/docker-volumes/mysql:/var/lib/mysql mysql

  • Volúmenes anónimos: Docker creará un volumen random para almacenar la información, ojo con este que si se borra el contenedor con docker rm -fv el volumen se borrara, se suelen guardar en el docker home “docker info | grep -i root”

docker run -d –name mysql -p 3306:3306 -e “MYSQL_ROOT_PASSWORD=123456” -v /var/lib/mysql mysql

  • Volúmenes nombrados: Es la combinación de un volumen de host y un volumen anónimo, se guardan en el mismo sitio que los volúmenes anónimos.

docker volume create mysql-data

docker run -d –name mysql -p 3306:3306 -v mysql-data:/var/lib/mysql -e “MYSQL_ROOT_PASSWORD=123456” mysql

Network

Las redes en contenedores se utilizan para la comunicación entre distintos contenedores, hay tres tipos de redes en Docker,

  • Red Bridge: Es la red por defecto y se proporciona una ip que estara en la red donde levanta la interfaz docker0 del docker host
  • Red Host: El contenedor asignado a esta red contendrá toda la configuración de todas las interfaces del docker host, incluso su hostname.
  • Red none: Los contenedores asignados a esta red, no tendrán configuración de red (ip, gateway, mascara…)

Ademas de estas redes en docker se pueden crear nuevas redes con el comando docker network, en las redes creadas por nosotros mismo podremos hacer ping a cualquier contenedor por el nombre del servicio, la red bridge no te permite esto y habría que atacar por IP.

Otra posibilidad es querer conectar contenedores de diferentes redes, esto se podría hacer posible con el comando docker network connect para conectar cualquier red a un contenedor.

Aunque como he dicho este mundo es muy amplio y daría para mucho más, no me gustaría alargar este post demasiado.

Espero que la información te haya sido de utilidad y si quieres mas Post sobre Docker házmelo saber en los comentarios.

Muchas gracias

Un saludo

Raúl Cazallas

2 comentarios en «HABLANDO DE DOCKER»

  1. Pingback: Openshift vs Kubernetes ⋆ AprenDevOps

  2. Pingback: > Cómo instalar DOCKER en Ubuntu 20.04 PASO a PASO

Deja una respuesta

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