Saltar al contenido principal

Docker 1 · Fundamentos

Ya has puesto en marcha Nginx utilizando una imagen preparada por otras personas. Ahora la aplicación que quieres ejecutar es la tuya. ¿Cómo preparas una imagen para ella? Esa pregunta, con la que cerramos Docker 0, es el punto de partida de este curso.

Volvamos a TasteMatch, nuestra aplicación para consultar recetas. Para funcionar necesita su código y otros archivos, una versión de Node.js, dependencias y configuración. Si otra persona tuviera que preparar ese entorno a mano, volverían las dudas sobre qué instalar y cómo iniciar la aplicación.

Queremos describir cómo preparar su imagen para poder repetir la construcción y utilizar el resultado como base de nuestros contenedores. Aprenderemos a hacerlo con un Dockerfile, el archivo de instrucciones que utilizaremos para construir esa imagen. También aprenderemos a distinguir qué debe formar parte de ella y qué configuración conviene proporcionar al ejecutar la aplicación.

Lo que añadimos al recorrido​

En Docker 0 partíamos de una imagen existente. Ahora incorporaremos los pasos anteriores:

Nuestra aplicación y sus archivos
+
Runtime y dependencias necesarios
+
Instrucciones de construcción: Dockerfile
↓
Construcción
↓
Imagen propia
↓
Contenedor

Empezaremos con una aplicación pequeña para que puedas seguir el recorrido completo. El código nos servirá para practicar Docker; no necesitarás aprender un framework para avanzar.

Desde dónde empezamos​

Este curso continúa Docker 0 · Introducción a los contenedores. Puedes seguirlo si lo has completado o tienes conocimientos equivalentes: sabes obtener imágenes, crear y gestionar contenedores, consultar sus estados y logs, y publicar un puerto para acceder a un servicio desde el host.

Necesitarás Docker preparado para trabajar con contenedores Linux, una terminal y un editor. Si todavía te cuesta distinguir una imagen de un contenedor o comprobar por qué no responde un servicio, repasa Docker 0 antes de continuar. Aquí reutilizaremos esas herramientas sin volver a enseñarlas desde cero.

Comandos multilínea y PowerShell​

Sintaxis de los comandos

Los ejemplos multilínea utilizan \ para continuar el mismo comando en shells tipo Bash/sh:

docker run \
--name ejemplo \
imagen

En PowerShell la sintaxis de continuación es distinta. Para evitar errores, en este curso recomendamos quitar las barras de continuación y unir el comando en una sola línea:

docker run --name ejemplo imagen

Este ejemplo solo muestra la sintaxis: imagen representa la imagen elegida. Aplica la misma conversión a los comandos multilínea de las siguientes unidades.

Qué aprenderás a resolver​

  • Preparar una aplicación: construirás tu primera imagen y después profundizarás en cómo leer y escribir su Dockerfile.
  • Entender la construcción: observarás capas y caché, trabajarás con el contexto de build y decidirás qué archivos excluir mediante .dockerignore.
  • Trabajar con datos y servicios: elegirás entre volúmenes y bind mounts cuando corresponda y utilizarás redes Docker para comunicar contenedores.
  • Configurar e investigar: proporcionarás variables de entorno y practicarás el diagnóstico de problemas de archivos, configuración y conectividad.

En cada práctica partiremos de una necesidad, haremos una predicción y comprobaremos el resultado. TasteMatch nos ayudará a mantener presente el problema de una aplicación propia; utilizaremos ejemplos pequeños cuando permitan observar mejor una idea.

El curso termina con un proyecto final: recibirás una aplicación y tomarás tus propias decisiones para construir su imagen, configurarla, conservar los datos necesarios y conectarla con otro servicio. Tendrás que demostrar que funciona y explicar cómo has investigado sus fallos.

Primero, entender cada pieza​

Gestionaremos los recursos de forma explícita para comprender cómo se relacionan. Docker Compose tendrá su propio recorrido en Docker 2, cuando necesitemos describir y gestionar varias piezas de forma conjunta. La orquestación, los despliegues automatizados y la seguridad u observabilidad avanzadas quedan para otros cursos.

Vamos a empezar por una pregunta concreta: ¿qué necesita nuestra aplicación para ejecutarse? En la primera unidad analizaremos una aplicación sencilla y construiremos una imagen que permita ponerla en marcha.