#Course

Docker: introducción a los contenedores

Introducción a Docker: qué son los contenedores, cómo empaquetan una aplicación con sus dependencias y por qué aíslan mejor que una máquina virtual.

GIIA··8 min de lectura
Docker: introducción a los contenedores

Introducción a Docker

La inclusión en contenedores es un enfoque de desarrollo de software en el que una aplicación o un servicio, sus dependencias y su configuración (extraídos como archivos de manifiesto de implementación) se empaquetan como una imagen de contenedor. La aplicación en contenedor se puede probar como una unidad e implementarse como una instancia de imagen de contenedor en el sistema operativo host (SO). Al igual que los contenedores de envío permiten transportar mercancías por barco, tren o camión independientemente de la carga dentro, los contenedores de software actúan como una unidad estándar de implementación de software que puede contener diferentes código y dependencias. El software en contenedores de esta manera permite a los desarrolladores y profesionales de TI implementarlos en entornos con poca o ninguna modificación. Los contenedores también aíslan las aplicaciones entre sí en un sistema operativo compartido. Las aplicaciones en contenedores se ejecutan sobre un host de contenedor que, a su vez, se ejecuta en el sistema operativo (Linux o Windows). Por lo tanto, los contenedores tienen una superficie significativamente menor que las imágenes de máquina virtual (VM). Cada contenedor puede ejecutar una aplicación web completa o un servicio, como se muestra en la figura 2-1. En este ejemplo, el host de Docker es un host de contenedor y App1, App2, Svc 1 y Svc 2 son aplicaciones o servicios contenedorizados.

Motivación

Los contenedores de carga transformaron completamente la industria del transporte marítimo y permitieron la experiencia comercial global de hoy. Del mismo modo, los contenedores de software simplifican el desarrollo y la implementación de aplicaciones, lo que ayuda a habilitar la arquitectura de software nativa de la nube que impulsa la tecnología moderna en la que todos confiamos. Aunque puede obtener beneficios de la contenedorización de sus aplicaciones después del hecho, obtiene el mayor valor cuando adopta un enfoque de contenedor primero.

Fundamentos

Arquitectura de docker

Docker usa una arquitectura cliente-servidor. El cliente de Docker habla con el Daemon de Docker que hace el trabajo de crear, correr y distribuir los contenedores. Tanto el cliente como el Daemon pueden ejecutarse en el mismo Sistema, o puede conectar un cliente remoto a un daemon de docker.

El cliente de Docker es la principal interfaz de usuario para docker, acepta los comandos del usuario y se comunica con el daemon de docker.

Imágenes de Docker

Las imágenes de Docker son plantillas de solo lectura, es decir, una imagen puede contener el Sistema operativo de CentOS o Ubuntu con apache instalados, pero esto solo nos permitirá crear los contenedores basados en esta configuración. SI hacemos cambios en el contenedor ya lanzado, al detenerlo esto no se verá reflejado en la imagen. Mas adelante entenderemos esta parte.

Registros de Docker

Los registros de Docker guardan las imágenes, estos son repos públicos o privados donde podemos subir o descargar imágenes. El registro público lo provee el Hub de Docker que sirve una colección de imágenes para nuestro uso. Los registros de dockers básicamente son el componente de Distribución de Docker.

Contenedores de Docker

El contenedor de docker aloja todo lo necesario para ejecutar una aplicación. Cada contenedor es creado de una imagen de docker. Cada contenedor es una plataforma aislada.

Arquitectura de Docker

Guía de Instalación de Docker

Instalación en Linux

Ubuntu/Debian

  1. Actualizar el sistema
bash
sudo apt update
sudo apt upgrade -y
  1. Instalar dependencias necesarias
bash
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
  1. Agregar la clave GPG oficial de Docker
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Agregar el repositorio de Docker
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Instalar Docker Engine
bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
  1. Verificar la instalación
bash
sudo docker --version
sudo docker run hello-world
  1. Agregar usuario al grupo docker (opcional)
bash
sudo usermod -aG docker $USER
newgrp docker

CentOS/RHEL/Fedora

  1. Actualizar el sistema
bash
sudo yum update -y
  1. Instalar dependencias
bash
sudo yum install -y yum-utils
  1. Agregar el repositorio de Docker
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. Instalar Docker Engine
bash
sudo yum install docker-ce docker-ce-cli containerd.io -y
  1. Iniciar y habilitar Docker
bash
sudo systemctl start docker
sudo systemctl enable docker
  1. Verificar la instalación
bash
sudo docker --version
sudo docker run hello-world

Instalación en Windows

Para Windows, es suficiente con instalar Docker Desktop, que incluye todas las herramientas necesarias:

  1. Descargar Docker Desktop desde: https://www.docker.com/products/docker-desktop
  2. Ejecutar el instalador descargado
  3. Seguir las instrucciones del asistente de instalación
  4. Reiniciar el sistema si es necesario
  5. Abrir Docker Desktop y esperar a que inicie
  6. Verificar la instalación abriendo PowerShell o CMD:
powershell
docker --version
docker run hello-world

Requisitos:

  • Windows 10/11 Pro, Enterprise o Education (64-bit)
  • WSL 2 habilitado
  • Virtualización habilitada en BIOS

Primeros Pasos con Docker

En Capítulos anteriores vimos lo que es Docker y como instalarlo en Linux CentOS y Ubuntu. Pero antes de entrar de lleno con Docker, recuerdan que les hablaba de Docker registries, quiero hablarles brevemente de Docker Hub.

Docker Hub es un servicio de registro basado en la nube para crear y entregar contenedores de servicio o aplicaciones. Provee un recurso centralizado para el descubrimiento de contenedores, distribución, control de cambios, colaboración de equipos y automatización de flujos de trabajo. Veanlo como como un Github de contenedores.

Características de Docker Hub

  • Repositorios de Imágenes: Encuentra, administra, sube y descarga imágenes de la comunidad y oficiales
  • Imágenes automáticas: Crea nuevas imágenes cuando haces un cambio en la Fuente de Github o BitBucket
  • Webhooks: creaciones automáticas de imágenes al hacer un push exitoso a un repositorio
  • Integración con GitHub y BitBucket

Docker Hub le provee a usted y su organización un lugar donde alojar y entregar las imágenes.

Se puede configurar los repositorios de Docker Hub de dos maneras:

  • Repositorios, que nos permiten subir y actualizar las imágenes cuando deseemos desde el docker daemon
  • Imágenes automáticas que nos permiten configurar una cuenta de Github o BitBucket que desencadenan la reconstrucción de una imágen cuando se realizar algún cambio en el repositorio

Se pueden crean repositorios públicos que pueden ser accedidos por otros usuarios de HUB, o se pueden crear repositorios privados con accesos limitados.

Pueden crear su cuenta en https://hub.docker.com, luego veremos como podemos aprovechar todo esto.

El daemon de Docker hace uso de Hub para obtener y subir sus imágenes. Ya que tenemos una base, vamos a jugar un poco con Docker.

Busquemos una imagen base de CentOS

bash
$ docker search centos

Vamos a descargar la imagen official base de centos. Asi que nos fijamos en NAME y lo pasamos al docker pull

bash
$ docker pull docker.io/centos

Otra forma que podemos usar para buscar una imagen es mediante el Hub.

Si hacemos la búsqueda de centos tendremos algo así.

Aquí tenemos el comando y los tags para obtener una version específica. Si ven tenemos como comando docker pull centos, y si deseamos por ejemplo descargar la version 7 de centos o la última version, los comandos se verían así:

bash
$ docker pull centos:centos7
$ docker pull centos:latest

Ya descargada la imagen, confimamos que este ahí con:

bash
$ docker images
docker.io/centos latest ce20c473cd8a 2 weeks ago 172.3 MB

Ya vemos que tenemos la imagen ahí. Ahora como podemos interactuar con esa imagen o lanzar un contenedor con esa imagen? A eso vamos, pero antes recuerden esto: cuando lanzamos un contenedor, y hacemos cualquier tarea esto no se ve reflejado al momento de lanzar otro contenedor con la misma imagen.

Lanzar un contenedor

Vamos a lanzar un contenedor basado en esa imagen e interactuar con la linea de comandos de ese contenedor:

bash
$ docker run -i -t docker.io/centos:latest /bin/bash
  • -i: Interactivo
  • -t: tty
[root@71c6ab01cd3e /]#

Aquí ya estamos interactuando con el contenedor, esa numeración que ven luego de root es el ID del contenedor, podemos actualizar el Sistema, instalar paquetes, etc. Este contenedor tambien cuenta con una IP con la que podemos interactuar con el contenedor.

Ver contenedores corriendo

Veamos los contenedores que tenemos corriendo. Abran otra terminal en el server:

bash
$ docker ps

Aquí tenemos el ID de contenedor, la imagen que usamos para lanzarlo, el comando que corrimos y al final el Nombre. Con este nombre que docker le asignó aleatoreamente podemos interactuar con el contenedor. Este Nombre por igual lo podemos asignar nosotros.

Detener un contenedor

Si queremos detener el contenedor:

bash
$ docker stop reverent_bardeen

(que es el nombre asignado por docker)

Si corremos docker ps, veremos que ya no hay nada. Lo Bueno del caso es que ese contenedor permanece ahi, con los cambios que nosostros le realizamos.

bash
$ docker ps -a

Reiniciar un contenedor

Podemos reiniciar nuevamente ese contenedor y conectarnos a el:

bash
$ docker start reverent_bardeen
$ docker attach reverent_bardeen

Aquí estamos nuevamente conectado con nuestro contenedor.

Autores

GIIA
GIIA

GIIA