Docker para principiantes: todo lo que necesita saber

Ilustración que muestra el logotipo de Docker

Docker crea aplicaciones empaquetadas llamadas contenedores. Cada contenedor proporciona un entorno aislado similar a una máquina virtual (VM). A diferencia de las máquinas virtuales, los contenedores de Docker no ejecutan un sistema operativo completo . Comparten el kernel de su host y virtualizan a nivel de software.

Conceptos básicos de Docker

Docker se ha convertido en una herramienta estándar para desarrolladores de software y administradores de sistemas. Es una forma elegante de iniciar aplicaciones rápidamente sin afectar al resto de su sistema. Puede poner en marcha un nuevo servicio con un solo docker runcomando.

Los contenedores encapsulan todo lo necesario para ejecutar una aplicación, desde las dependencias del paquete del sistema operativo hasta su propio código fuente. Los pasos de creación de un contenedor se definen como instrucciones en a Dockerfile. Docker usa Dockerfile para construir una imagen .

Las imágenes definen el software disponible en contenedores. Esto equivale en términos generales a iniciar una máquina virtual con un sistema operativo ISO. Si crea una imagen, cualquier usuario de Docker podrá iniciar su aplicación con docker run.

¿Cómo funciona Docker?

Los contenedores utilizan características del kernel del sistema operativo para proporcionar entornos parcialmente virtualizados. Es posible crear contenedores desde cero con comandos como chroot. Esto inicia un proceso con un directorio raíz especificado en lugar de la raíz del sistema. Pero usar las funciones del kernel directamente es complicado, inseguro y propenso a errores.

Docker es una solución completa para la producción, distribución y uso de contenedores. Las versiones modernas de Docker se componen de varios componentes independientes . Primero, está la CLI de Docker , que es con lo que interactúa en su terminal. La CLI envía comandos a un demonio de Docker . Esto puede ejecutarse localmente o en un host remoto . El demonio es responsable de administrar los contenedores y las imágenes a partir de las cuales se crean.

El componente final se denomina tiempo de ejecución del contenedor . El tiempo de ejecución invoca funciones del kernel para lanzar contenedores. Docker es compatible con tiempos de ejecución que se adhieren a la especificación OCI.  Este estándar abierto permite la interoperabilidad entre diferentes herramientas de contenedorización.

No necesita preocuparse demasiado por el funcionamiento interno de Docker cuando comienza. La instalación dockeren su sistema le dará todo lo que necesita para construir y ejecutar contenedores.

¿Por qué tanta gente usa Docker?

Los contenedores se han vuelto tan populares porque resuelven muchos desafíos comunes en el desarrollo de software. La capacidad de contenedorizar una vez y ejecutar en todas partes reduce la brecha entre su entorno de desarrollo y sus servidores de producción.

El uso de contenedores le da la confianza de que todos los entornos son idénticos. Si tiene un nuevo miembro del equipo, solo necesita docker runconfigurar su propia instancia de desarrollo. Cuando lanza su servicio, puede usar su imagen de Docker para implementar en producción. El entorno en vivo coincidirá exactamente con su instancia local, evitando escenarios de «funciona en mi máquina».

Docker es más conveniente que una máquina virtual en toda regla. Las máquinas virtuales son herramientas de uso general diseñadas para admitir todas las cargas de trabajo posibles. Por el contrario, los contenedores son livianos, autosuficientes y más adecuados para casos de uso desechables. Como Docker comparte el kernel del host, los contenedores tienen un impacto insignificante en el rendimiento del sistema. El tiempo de lanzamiento del contenedor es casi instantáneo, ya que solo está iniciando procesos, no un sistema operativo completo.

Relacionado:  Cómo enviar un documento de Google por correo electrónico

Empezando

Docker está disponible en todas las distribuciones populares de Linux. También se ejecuta en Windows y macOS. Siga las  instrucciones de configuración de Docker para su plataforma para ponerla en funcionamiento.

Puede comprobar que su instalación funciona iniciando un contenedor simple:

Docker ejecutar hola-mundo

Esto iniciará un nuevo contenedor con la hello-worldimagen básica . La imagen emite un resultado que explica cómo usar Docker. Luego, el contenedor sale y lo lleva de regreso a su terminal.

Creando imágenes

Una vez que haya ejecutado hello-world, estará listo para crear sus propias imágenes de Docker. Un Dockerfile describe cómo ejecutar su servicio instalando el software requerido y copiando archivos. Aquí hay un ejemplo simple usando el servidor web Apache:

DESDE httpd: último
EJECUTAR echo "LoadModule headers_module modules / mod_headers.so" >> /usr/local/apache2/conf/httpd.conf
COPIA .htaccess /var/www/html/.htaccess
COPY index.html /var/www/html/index.html
COPIAR css / / var / www / html / css

La FROMlínea define la imagen base. En este caso, partimos de la imagen oficial de Apache. Docker aplica las instrucciones restantes en su Dockerfile encima de la imagen base.

El RUNescenario ejecuta un comando dentro del contenedor. Puede ser cualquier comando disponible en el entorno del contenedor. Estamos habilitando el headersmódulo Apache, que podría ser utilizado por el .htaccessarchivo para configurar reglas de enrutamiento.

Las líneas finales copian los archivos HTML y CSS de su directorio de trabajo en la imagen del contenedor. Su imagen ahora contiene todo lo que necesita para ejecutar su sitio web.

Ahora, puedes construir la imagen:

docker build -t mi-sitio web: v1.

Docker usará su Dockerfile para construir la imagen. Verá la salida en su terminal mientras Docker ejecuta cada una de sus instrucciones.

El -ten el comando etiqueta su imagen con un nombre dado ( my-website:v1). Esto hace que sea más fácil de consultar en el futuro. Las etiquetas tienen dos componentes, separados por dos puntos. La primera parte establece el nombre de la imagen, mientras que la segunda generalmente denota su versión. Si omite los dos puntos, Docker utilizará delatest forma predeterminada la versión de la etiqueta.

El .al final del comando le dice a Docker que use el Dockerfile en su directorio de trabajo local. Esto también establece el contexto de compilación , lo que le permite usar archivos y carpetas en su directorio de trabajo con COPYinstrucciones en su Dockerfile.

Una vez que haya creado su imagen, puede iniciar un contenedor usando docker run:

docker run -d -p 8080: 80 mi sitio web: v1

Estamos usando algunas banderas adicionales docker runaquí. La -dbandera hace que la CLI de Docker se separe del contenedor, lo que le permite ejecutarse en segundo plano. Una asignación de puerto se define con -p, por lo que el puerto 8080 en su host se asigna al puerto 80 en el contenedor. Debería ver su página web si la visita localhost:8080en su navegador.

Las imágenes de Docker se forman a partir de capas. Cada instrucción en su Dockerfile crea una nueva capa. Puede utilizar funciones de construcción avanzadas para hacer referencia a varias imágenes base , descartando las capas intermedias de las imágenes anteriores.

Registros de imágenes

Una vez que tenga una imagen, puede enviarla a un registro. Los registros proporcionan almacenamiento centralizado para que pueda compartir contenedores con otros. El registro predeterminado es Docker Hub .

Cuando ejecuta un comando que hace referencia a una imagen, Docker primero verifica si está disponible localmente. Si no es así, intentará extraerlo de Docker Hub. Puede extraer imágenes manualmente con el docker pullcomando:

docker pull httpd: último

Si desea publicar una imagen, cree una cuenta de Docker Hub . Ejecute docker logine ingrese su nombre de usuario y contraseña.

Relacionado:  Cómo encontrar el número de días entre dos fechas en Microsoft Excel

A continuación, etiquete su imagen con su nombre de usuario de Docker Hub:

docker tag my-image: último docker-hub-username / my-image: último

Ahora, puedes empujar tu imagen:

docker push docker-hub-username / my-image: último

Otros usuarios podrán extraer su imagen e iniciar contenedores con ella.

Puede ejecutar su propio registro si necesita almacenamiento de imágenes privado. Varios servicios de terceros también  ofrecen registros de Docker como alternativas a Docker Hub.

Administrar sus contenedores

La CLI de Docker tiene varios comandos que le permiten administrar sus contenedores en ejecución. Éstos son algunos de los más útiles que debe conocer:

Listado de contenedores

docker psle muestra todos sus contenedores en ejecución. Agregar la -abandera también mostrará los contenedores detenidos.

Detención y arranque de contenedores

Para detener un contenedor, ejecute docker stop my-container. Reemplácelo my-containercon el nombre o la identificación del contenedor. Puede obtener esta información del pscomando. Un contenedor detenido se reinicia con docker start my-container.

Los contenedores generalmente se ejecutan mientras su proceso principal permanezca vivo. Las políticas de reinicio controlan lo que sucede cuando un contenedor se detiene o su host se reinicia. Pase --restart alwaysa docker runpara que un contenedor se reinicie inmediatamente después de que se detenga.

Conseguir un caparazón

Puede ejecutar un comando en un contenedor usando docker exec my-container my-command. Esto es útil cuando desea invocar manualmente un ejecutable que es independiente del proceso principal del contenedor.

Agregue la -itbandera si necesita acceso interactivo. Esto le permite caer en un caparazón ejecutando docker exec -it my-container sh.

Registros de monitoreo

Docker recopila automáticamente la salida emitida a los flujos de entrada y salida estándar de un contenedor. El docker logs my-containercomando mostrará los registros de un contenedor dentro de su terminal. La --followbandera configura un flujo continuo para que pueda ver los registros en tiempo real.

Limpieza de recursos

Los contenedores e imágenes antiguos pueden acumularse rápidamente en su sistema. Úselo docker rm my-containerpara eliminar un contenedor por su ID o nombre.

El comando para imágenes es docker rmi my-image:latest. Pase el ID de la imagen o el nombre completo de la etiqueta. Si especifica una etiqueta, la imagen no se eliminará hasta que no tenga más etiquetas asignadas. De lo contrario, la etiqueta dada se eliminará, pero las otras etiquetas de la imagen seguirán siendo utilizables.

Las limpiezas masivas son posibles usando el docker prunecomando . Esto le brinda una manera fácil de eliminar todos los contenedores detenidos y las imágenes redundantes.

Gestión gráfica

Si la terminal no es lo tuyo, puedes usar herramientas de terceros para  configurar una interfaz gráfica para Docker . Los paneles web le permiten monitorear y administrar rápidamente su instalación. También le ayudan a tomar el control remoto de sus contenedores.

Ilustración de Portainer en una computadora portátil

Almacenamiento de datos persistente

Los contenedores de Docker son efímeros de forma predeterminada. Los cambios realizados en el sistema de archivos de un contenedor no persistirán después de que el contenedor se detenga. No es seguro ejecutar ningún tipo de sistema de almacenamiento de archivos en un contenedor iniciado con un docker runcomando básico .

Hay algunos enfoques diferentes para administrar datos persistentes . Lo más común es usar un Docker Volume. Los volúmenes son unidades de almacenamiento que se montan en sistemas de archivos contenedor. Cualquier dato en un volumen permanecerá intacto después de que su contenedor vinculado se detenga, lo que le permitirá conectar otro contenedor en el futuro.

Relacionado:  Cómo restablecer el algoritmo TikTok

Mantener la seguridad

Las cargas de trabajo Dockerized pueden ser más seguras que sus contrapartes bare metal, ya que Docker proporciona cierta separación entre el sistema operativo y sus servicios. No obstante, Docker es un problema de seguridad potencial, ya que normalmente se ejecutaroot y podría ser aprovechado para ejecutar software malicioso.

Si solo está ejecutando Docker como una herramienta de desarrollo, la instalación predeterminada es generalmente segura de usar. Los servidores de producción y las máquinas con un zócalo de demonio expuesto a la red deben reforzarse antes de comenzar a funcionar.

Audite su instalación de Docker para identificar posibles problemas de seguridad. Hay herramientas automatizadas disponibles que pueden ayudarlo a encontrar debilidades y sugerir soluciones. También puede escanear imágenes de contenedores individuales en busca de problemas que podrían explotarse desde adentro.

Trabajar con varios contenedores

El dockercomando solo funciona con un contenedor a la vez. A menudo, querrá utilizar contenedores en conjunto. Docker Compose es una herramienta que le permite definir sus contenedores de forma declarativa en un archivo YAML. Puede iniciarlos todos con un solo comando.

Esto es útil cuando su proyecto depende de otros servicios, como un backend web que depende de un servidor de base de datos. Puede definir ambos contenedores en su docker-compose.ymly beneficiarse de una gestión optimizada con redes automáticas .

Aquí hay un docker-compose.ymlarchivo simple :

versión: "3"
servicios:
  aplicación:
    imagen: servidor de aplicaciones: último
    puertos:
      - 8000: 80
  base de datos:
    imagen: servidor de base de datos: último
    volúmenes:
        - base de datos-datos: / data
volúmenes:
    datos-base de datos:

Esto define dos contenedores ( appy database). Se crea un volumen para la base de datos. Esto se monta /dataen el contenedor. El puerto 80 del servidor de aplicaciones se expone como 8000 en el host. Ejecutar docker-compose up -dpara activar ambos servicios, incluida la red y el volumen.

El uso de Docker Compose le permite escribir definiciones de contenedores reutilizables que puede compartir con otros. Podrías incluir un docker-compose.ymlen tu control de versiones en lugar de que los desarrolladores memoricen los docker runcomandos.

También existen otros enfoques para ejecutar varios contenedores. La aplicación Docker es una solución emergente que proporciona otro nivel de abstracción. En otras partes del ecosistema, Podman es una alternativa de Docker que le permite crear «pods» de contenedores dentro de su terminal.

Orquestación de contenedores

Docker normalmente no se ejecuta como está en producción. Ahora es más común usar una plataforma de orquestación como Kubernetes o el modo Docker Swarm. Estas herramientas están diseñadas para manejar múltiples réplicas de contenedores, lo que mejora la escalabilidad y la confiabilidad.

Ilustración que muestra los logotipos de Docker y Kubernetes

Docker es solo un componente en el movimiento de contenedorización más amplio. Los orquestadores utilizan las mismas tecnologías de tiempo de ejecución de contenedores para proporcionar un entorno que se adapta mejor a la producción. El uso de varias instancias de contenedor permite actualizaciones continuas , así como la distribución entre máquinas, lo que hace que su implementación sea más resistente a cambios e interrupciones. La dockerCLI normal se dirige a un host y funciona con contenedores individuales.

Una plataforma poderosa para contenedores

Docker le brinda todo lo que necesita para trabajar con contenedores. Se ha convertido en una herramienta clave para el desarrollo de software y la administración de sistemas. Los principales beneficios son un mayor aislamiento y portabilidad de los servicios individuales.

Familiarizarse con Docker requiere una comprensión de los conceptos básicos de contenedor e imagen. Puede aplicarlos para crear sus imágenes y entornos especializados que contengan sus cargas de trabajo.