Instalar Docker y crear un contenedor en Ubuntu 20.04

Instalar Docker y crear un contenedor en Ubuntu 20.04

Un contenedor es una unidad en ejecución que incluye código y dependencias de una aplicación. Esto permite que se ejecute de forma fiable y consistente sin importar la infraestructura o el sistema operativo anfitrión. Tanto en Linux como en Windows, Docker es la solución más robusta y versátil para crear contenedores. En esta guía aprenderás a instalar Docker y crear un contenedor en Ubuntu 20.04.

La edición Community (CE) de Docker es gratuita e incluye las mismas características funcionales que la versión empresarial. La diferencia principal reside en el soporte y la certificación del producto, que corren por cuenta de la comunidad en la primera y de Docker Inc. en la última.

Requisitos previos

  • Llevar a cabo la configuración básica como explicamos en Configuración inicial de un servidor con Ubuntu 20.04.
  • Verificar que exista una regla en el cortafuegos de Donweb que permita el tráfico entrante al puerto 8080/TCP. Si necesitas asistencia, puedes consultar el artículo Firewall en la sección de ayuda.
  • Desinstalar cualquier versión previa de Docker que pueda existir en el sistema con sudo apt purge docker docker-engine docker.io containerd runc. Es importante aclarar que este comando no elimina contenedores ni imágenes.

Paso 1: Agregar el repositorio oficial de Docker

Existen tres métodos disponibles para instalar Docker:

  • Utilizar los repositorios de Ubuntu
  • Descargar el archivo .deb para realizar la instalación manual
  • Agregar los repositorios de Docker

Si bien cada alternativa tiene sus ventajas y desventajas, la opción más recomendada es la última. De esa forma, siempre tendremos a nuestra disposición las versiones más actualizadas de los paquetes.

Para añadir el repositorio de forma segura, ejecuta los comandos que aparecen abajo. Luego de actualizar el índice de paquetes, instalarás varias herramientas adicionales. Estas le permitirán a apt descargar utilidades a través de HTTPS luego de agregar la clave GPG y el repositorio de Docker.

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 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

Una vez que hayas completado los comandos anteriores, continúa con el siguiente paso.

Paso 2: Instalar y habilitar Docker

En primer lugar, actualiza nuevamente la lista de paquetes. De esta manera, apt estará al tanto del nuevo repositorio y podrá instalar Docker desde ahí:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Ahora puedes habilitar el servicio para que se inicie automáticamente en el futuro:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

A partir de este momento puedes comenzar a explorar las posibilidades que Docker ofrece.

Paso 3: Creación de un contenedor

Para crear un contenedor, necesitarás en principio de una imagen. Antes de continuar, vale la pena mencionar dos características de las imágenes:

  • Una imagen incluye todos los recursos para generar un contenedor
  • El contenedor se crea al ejecutar una imagen por primera vez

Si bien puedes generar tus propias imágenes desde cero, para comenzar conviene utilizar una del Docker Hub. Este repositorio contiene una gran variedad de imágenes para diversas necesidades.

En este ejemplo, emplearemos la imagen oficial de Nginx para crear un contenedor que actúe como servidor web. Ejecuta el siguiente comando luego de repasar el propósito de cada opción:

sudo docker container run --name=donweb --publish 8080:80 --detach nginx
  • docker container run es el comando para generar el contenedor a partir de la imagen nginx (que aparece al final).
  • Con --name=donweb le asignamos el nombre donweb al contenedor.
  • --detach hace que el contenedor se ejecute en segundo plano de forma que retomemos el control de la terminal.
  • Para poder acceder al servidor web dentro del contenedor, hacemos un mapeo de puertos con --publish. En este caso, el tráfico que el host recibe en el puerto 8080/TCP es redirigido al 80 del mismo protocolo en el contenedor.

En la imagen de arriba se aprecian tres cuestiones de interés:

  1. Como no se encontró una imagen de Nginx localmente, Docker procedió a descargarla. Si en el futuro deseamos crear otro contenedor basado en la misma imagen, Docker omitirá este paso.
  2. Cada imagen está compuesta de capas. Este concepto cobrará más sentido e importancia cuando en algún momento generemos nuestras propias imágenes.
  3. Al finalizar la creación del contenedor vemos el ID de este.

Para verificar el funcionamiento, abre tu navegador con el nombre de host o dirección IP de tu servidor y el puerto 8080. Si todo salió correctamente, verás la página de bienvenida de Nginx. Paralelamente, los logs del contenedor mostrarán el tráfico entrante al servidor web:

Además de sudo docker container ls para ver los contenedores existentes, la imagen de arriba muestra el resultado de sudo docker container logs donweb --tail 5.

Conclusión

En esta guía aprendiste a instalar Docker y crear un contenedor en Ubuntu 20.04. El ejemplo que utilizamos ilustra lo fácil que es correr un servidor web desde un contenedor. ¿Qué diferencia hay entre hacerlo en tu propio servidor? Imagina si estuvieras utilizando Nginx para servir una aplicación web entera en vez de una página estática. Tener todo junto en una imagen y poder ejecutarla como un contenedor te asegura que no habrá diferencias cuando la despliegues a distintos ambientes. Ese hecho es suficiente para que el tiempo que dediques a aprender Docker se pague solo.

¿Te resultó útil esta guía?

Imagen por defecto
Gabriel Cánepa
Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint. Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe). En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.