Tabla de contenidos
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 run
comando.
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 docker
en 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 run
configurar 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.
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-world
imagen 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 FROM
lí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 RUN
escenario ejecuta un comando dentro del contenedor. Puede ser cualquier comando disponible en el entorno del contenedor. Estamos habilitando el headers
módulo Apache, que podría ser utilizado por el .htaccess
archivo 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 -t
en 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 COPY
instrucciones 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 run
aquí. La -d
bandera 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:8080
en 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 pull
comando:
docker pull httpd: último
Si desea publicar una imagen, cree una cuenta de Docker Hub . Ejecute docker login
e ingrese su nombre de usuario y contraseña.
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 ps
le muestra todos sus contenedores en ejecución. Agregar la -a
bandera también mostrará los contenedores detenidos.
Detención y arranque de contenedores
Para detener un contenedor, ejecute docker stop my-container
. Reemplácelo my-container
con el nombre o la identificación del contenedor. Puede obtener esta información del ps
comando. 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 always
a docker run
para 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 -it
bandera 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-container
comando mostrará los registros de un contenedor dentro de su terminal. La --follow
bandera 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-container
para 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 prune
comando . 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.
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 run
comando 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.
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 docker
comando 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.yml
y beneficiarse de una gestión optimizada con redes automáticas .
Aquí hay un docker-compose.yml
archivo 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 ( app
y database
). Se crea un volumen para la base de datos. Esto se monta /data
en el contenedor. El puerto 80 del servidor de aplicaciones se expone como 8000 en el host. Ejecutar docker-compose up -d
para 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.yml
en tu control de versiones en lugar de que los desarrolladores memoricen los docker run
comandos.
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.
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 docker
CLI 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.