Aprender Docker, un enfoque práctico
Primera edición, 2022
© 2022 José Juan Sánchez Hernández
© MARCOMBO, S.L. 2022
www.marcombo.com
Diseño de la cubierta: ENEDENÚ DISEÑO GRÁFICO
Corrección: Mónica Muñoz
Maquetación: Reverté-Aguilar
Directora de producción: M. aRosa Castillo
Docker y el logotipo de Docker son marcas comerciales o marcas comerciales registradas de Docker, Inc. en los Estados Unidos y/o en otros países. Docker, Inc. y otras partes también pueden tener derechos de marca registrada en otros términos utilizados en este libro.
Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a Cedro (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra.
ISBN: 978-84-267-3448-8
Producción del ePub: booqlab
A mis padres, José y María; a mi mujer, Noelia y a mi hija, María
Lista de siglas y acrónimos
Acerca de este libro Acerca de este libro Este libro está dirigido a estudiantes, profesores, profesionales y a todas aquellas personas que quieran conocer qué es la tecnología de contenedores Docker y todavía no sepan cómo empezar a utilizarla en su entorno de trabajo. El libro está dividido en siete capítulos, que lo ayudarán a tener una visión global de todos los componentes que forman el ecosistema Docker y a conocer con detalle cómo utilizar cada uno de los principales objetos de Docker: imágenes, contenedores, volúmenes y redes. En el primer capítulo, encontrará los conceptos básicos que debe conocer antes de entrar en materia. La lectura de este capítulo es fundamental para entender con mayor claridad el resto del libro. El capítulo 2 lo ayudará a conocer los detalles del proceso de instalación de Docker Engine para Linux y Docker Desktop para Windows y macOS. El capítulo 3 está dedicado al estudio de las imágenes Docker. Aquí aprenderemos lo que es un repositorio, un tag o un digest de una imagen. Veremos cómo podemos crear una imagen, cómo publicarla en Docker Hub y todos los comandos básicos para poder gestionar las imágenes en un host de Docker. En el capítulo 4 , estudiaremos los comandos necesarios para gestionar el ciclo de vida básico de un contenedor. En el capítulo 5 , se analizan todas las posibilidades que nos ofrece Docker para implementar persistencia de datos entre un contenedor y el host de Docker. Aprenderemos las diferencias entre un bind mount y un volumen, además de los comandos necesarios para gestionarlos. En el capítulo 6 , estudiaremos los diferentes tipos de redes que existen en Docker y los comandos básicos para poder gestionarlas. El último capítulo está dedicado a la herramienta Docker Compose, donde se explica cómo gestionar y ejecutar aplicaciones con múltiples contenedores Docker de una forma muy sencilla.
CAPÍTULO 1 Conceptos básicos CAPÍTULO 1 Conceptos básicos 1.1. ¿Qué es Docker? Cuando hablamos de Docker, podemos referirnos a la tecnología que permite desarrollar, desplegar y ejecutar aplicaciones en entornos aislados denominados «contenedores». O también podemos referirnos a la empresa Docker, Inc., que es la que desarrolla esta tecnología.
1.1. ¿Qué es Docker?
1.1.1. Docker como tecnología de contenedores 1.1.1. Docker como tecnología de contenedores Docker permite empaquetar las aplicaciones en contenedores que incluyen todo lo necesario para que se puedan ejecutar en un entorno de manera aislada. Cada contenedor almacena el código fuente de la aplicación, los archivos de configuración y todas las dependencias software que necesita. Esta estrategia permite que las aplicaciones se puedan ejecutar de la misma manera sobre cualquier infraestructura que tenga soporte para Docker, tanto de forma local como en la nube. Con la tecnología de contenedores para aplicaciones, ya no es necesario preocuparse por el software que está instalado en la máquina donde se ejecuta el contenedor, porque todo lo que necesita la aplicación está incluido dentro del propio contenedor. Esta forma de trabajar resuelve el problema de «it works on my machine», donde una aplicación puede funcionar correctamente en el entorno de desarrollo, pero tiene errores en el entorno de producción, porque los dos entornos no son idénticos y contienen versiones de software diferentes. Cada vez hay más equipos de desarrollo y operaciones que están utilizando la tecnología de contenedores Docker en sus flujos de trabajo. Esto ha permitido acelerar el proceso de desarrollo de las aplicaciones, ha facilitado la forma de distribuirlas y ha acelerado la automatización del despliegue en producción.
1.1.2. Docker, Inc. 1.1.2. Docker, Inc. Docker, Inc. es una empresa tecnológica estadounidense que fue fundada por Solomon Hykes en 2008 como dotCloud. En sus orígenes, ofrecía servicios de PaaS (Platform as a Service) y, en marzo de 2013, liberó como un proyecto open source un componente de su plataforma al que llamó Docker. Este proyecto tuvo una gran aceptación y supuso un cambio significativo en la forma de desarrollar, distribuir y desplegar software. En octubre de 2013, dotCloud pasó a llamarse Docker, Inc. y, a partir de ese momento, fue cuando la empresa decidió centrarse en el desarrollo de su tecnología de contenedores.
1.2. ¿Qué ventajas nos aporta el uso de Docker? 1.2. ¿Qué ventajas nos aporta el uso de Docker? Las principales ventajas que nos aporta el uso de Docker son las siguientes: Soluciona el problema «it works on my machine». Permite tener un entorno de desarrollo limpio, seguro y portátil. Facilita la automatización de pruebas, integración y empaquetado. Posibilita empaquetar una aplicación con todas las dependencias que necesita (código fuente, librerías, configuración, etc.) para ser ejecutada en cualquier plataforma. Se eliminan inconsistencias entre los entornos de desarrollo, pruebas y producción. El proceso de despliegue es rápido y repetible.
1.3. Breve historia de las tecnologías de aislamiento
1.4. ¿Qué es una máquina virtual?
1.5. ¿Qué es un contenedor?
1.6. Analogía con los contenedores de transporte marítimo
1.7. Diferencias entre contenedores y máquinas virtuales
1.8. Arquitectura de Docker
1.9. Cliente de Docker
1.9.1. Docker CLI
1.9.2. Docker Compose
1.10. Docker Engine
1.10.1. Docker Engine API
1.10.2. Docker daemon
1.11. Container runtime
1.11.1. containerd
1.11.2. runc
1.12. Docker Registry
1.12.1. Docker Hub
1.12.2. Otros registros
1.13. Objetos de Docker
1.13.1. Imágenes
1.13.2. Contenedores
1.13.3. Volúmenes
1.13.4. Redes
1.14. Orquestación de contenedores
1.15. Organizaciones y estándares
1.15.1. Open Container Initiative (OCI)
1.15.2. Cloud Native Computing Foundation (CNCF)
1.16. Alternativas a Docker
CAPÍTULO 2 Instalación de Docker
2.1. Docker Engine Community
2.2. Instalación de Docker Engine en Linux
2.2.1. Métodos de instalación en Ubuntu
Читать дальше