Tutorial de Docker Compose

Tutorial de Docker Compose
La popularidad de Docker como herramienta de desarrollo está en aumento. Docker ha dado nueva vida al movimiento del contenedor. A los desarrolladores les gusta usarlo porque es rápido y fácil de aprender. Ayuda a los equipos de desarrollo a compartir entornos estándar sin preocuparse por perder el tiempo y los recursos.

Los desarrolladores pueden configurar el entorno deseado en un contenedor Docker, guardar el contenedor como una imagen y compartirla fácilmente con sus equipos de desarrollo. El proceso funciona muy bien para un solo contenedor. Sin embargo, los entornos de contenedores múltiples son más difíciles de mantener. Docker Compose proporciona la solución.

Con Docker Compose, los desarrolladores pueden definir un archivo YAML para configurar la configuración de múltiples servicios. Luego pueden iniciar los servicios de múltiples contenedores con un solo comando. Simplifica el proceso de trabajar con aplicaciones de contenedores múltiples.

Requisito previo

Suponemos que tiene una comprensión básica de Docker. De lo contrario, mira Cómo instalar y usar Docker en Ubuntu. Los ejemplos usan WordPress, MySQL, Flask y Python. Sin embargo, no es necesario conocimiento previo de estas herramientas.

Proceso de composición de Docker: de un vistazo

  1. Definir el entorno de aplicación: Use DockerFile para definir el entorno de la aplicación para que sea fácilmente reproducible.
  2. Definir el entorno de componer Docker: Use Docker-Compose.YML definir los servicios en la aplicación.
  3. Ejecutar la aplicación: Use Docker-composición para ejecutar la aplicación multi-contenedor.

Ejemplo Docker Compose File

Versión: '3'
servicios:
DB:
Imagen: MySQL: 5.7
Volúmenes:
- db_data:/var/lib/mysql
reiniciar: siempre
ambiente:
Mysql_root_password: rootpassword123
Mysql_database: WordPress
Mysql_user: wordpress_user
Mysql_password: wordpress_password
WordPress:
depende de:
- db
Imagen: WordPress: Último
Puertos:
- "8000: 80"
reiniciar: siempre
ambiente:
WordPress_DB_Host: DB: 3306
WordPress_DB_user: WordPress_user
WordPress_DB_Password: WordPress_Password
Volúmenes:
db_data:

Si el Docker-Compose anterior.El archivo YML se invoca con Docker Up, creará un servicio de WordPress que se conecta a un servicio de base de datos MySQL.

Docker Compose Commands

Puedes usar Docker -compose -Help Para encontrar el comando Docker Compose

Cuándo usar Docker Compose?

Actualmente, Docker se utiliza principalmente en entornos de desarrollo. Algunos de los usos populares de Docker Compose son:

1. Prototipos y desarrollo

La prototipos de aplicaciones y el proceso de desarrollo se ralentizan debido a la falta de entornos estándar. Los desarrolladores a menudo tienen que perder el tiempo configurando el mismo entorno varias veces. Además, leer guías para configurar los parámetros del entorno requiere mucho tiempo.

Docker Compose simplifica el proceso. Una vez que se configura un entorno, los equipos de desarrollo pueden compartir los archivos de Docker en toda la organización. Puede ahorrar una enorme cantidad de tiempo perdido en los problemas de gestión de configuración.

2. Prueba y automatización de procesos

La integración continua y la entrega continua (CI/CD) se están convirtiendo en procesos estándar en los entornos de desarrollo ágil de hoy en día. Las pruebas automatizadas son un componente importante de CI/CD. Docker Compose ayuda a definir el proceso de prueba automatizado. Todas las complicaciones de iniciar nuevos servicios se pueden poner en archivos de configuración de Docker. Los probadores pueden usar estos archivos para encender servicios temporales, ejecutar scripts de texto y destruir los servicios después de recopilar los resultados de la prueba. Ahorra tiempo porque los servicios de inicio manualmente requieren mucho tiempo y son propensos a errores.

3. Despliegue de producción futura

Docker se utiliza principalmente en entornos de desarrollo. Sin embargo, a medida que las funcionalidades de Docker se vuelven más robustas, Docker se utilizará para un mayor trabajo de nivel de producción. Docker Compose puede ser una herramienta valiosa para las implementaciones de host individuales.

Ejercicio: una aplicación web simple

Probemos nuestra mano en una simple aplicación web basada en Python para probar Docker Compose. Utilizaremos el marco web de Flask para crear una aplicación que se comunique con una base de datos en memoria Redis para realizar un seguimiento de cuántas veces se ha visitado la aplicación web.

La estructura del directorio se verá así:

simple_app
├── Contenido
│ ├── Dockerfile
│ └── Código
│ ├── Simple_app.py
│ └ └─se requisitos.TXT
└── Docker-Compose.YML

La estructura del directorio anterior no es necesaria para una aplicación básica. Sin embargo, muestra cómo la información de organización puede ser útil para una implementación más eficiente de Docker Compose.

Paso 1: Crear estructura y archivos de directorio

Creemos la estructura del directorio y los archivos necesarios:

$ mkdir simple_app
$ mkdir simple_app/contenido
$ mkdir simple_app/content/código
$ touch simple_app/docker-composa.YML
$ touch simple_app/content/dockerfile
$ touch simple_app/content/code/simple_app.py
$ touch simple_app/content/código/requisitos.TXT

El comando touch es solo crear archivos vacíos. Puede entrar manualmente en las carpetas y crear los archivos.

Paso 2: código de aplicación web

La carpeta de código contiene el código de aplicación web. Pon lo siguiente simple_app.py archivo:

de Flask Import Flask
De Redis Import Redis
App = Flask (__ Nombre__)
redis = redis (host = 'redis', puerto = 6379)
@App.ruta('/')
Def Hello ()::
Conde = Redis.inc ('golpes')
devolver 'Bienvenido a las lecciones de Docker Compose!

Has visitado este sitio veces.\norte'.formato (recuento)
Si __name__ == "__main__":
aplicación.run (host = "0.0.0.0 ", debug = verdadero)

La aplicación anterior crea una página de bienvenida que muestra el número de veces que se ha visitado la página. El mostrador de la visita se mantiene en una base de datos Redis. Redis usa el puerto 6379 como su puerto de escucha predeterminado. A continuación, complete el requisitos.TXT archivo:

matraz
rehacer

Esto permitirá a PIP para instalar dependencias de Python en el contenedor web. Ejecutaremos PIP como parte de la inicialización de nuestro servicio.

Paso 3: Dockerfile

Llena la simple_app/content/dockerfile Con el siguiente código:

De Python: 3.6.3-jessie
AGREGAR ./código /código
WorkDir /Código
Ejecutar requisitos de PIP Install -R.TXT
CMD ["Python", "Simple_app.py "]

Lo anterior Dockfile logra lo siguiente:

  1. Crea una imagen de Python: 3.6.3-jessie. Si no está disponible localmente, lo descarga desde Docker Hub.
  2. Copias elementos en simple_app/content/código en /código en el contenedor
  3. Colocar /código Como directorio de trabajo en el contenedor
  4. Utiliza PIP para instalar las dependencias de Python
  5. Establece el punto de partida predeterminado para que el contenedor se ejecute python simple_app.py.

Paso 4: Docker Compose

Llena la Simple_app/Docker-Compose.YML Archivo con el siguiente código:

Versión: '3'
servicios:
web:
construir: ./contenido
Puertos:
- "5000: 5000"
Volúmenes:
- ./contenido/código:/código
Redis:
Imagen: "Redis: Alpine"

El compuesto de acopolador.YML El archivo define dos contenedores: web y redis. Utiliza el formato Docker Compose Versión 3.

Para el servicio web:

  • Construye el servicio web utilizando simple_app/content/dockerfile
  • Reenviar el puerto 5000 desde el contenedor web al puerto 5000 del host. El puerto 5000 es el puerto predeterminado para aplicaciones frascos.
  • Volumen simple_app/content/código está montado como /código en el contenedor. Significa que si cambias algo en el simple_app/content/código, se reflejará en /código carpeta en el contenedor web.

Para el servicio Redis:

  • Utiliza la imagen Redis: Alpine desde Docker Hub para crear el servicio Redis.

Paso 5: Ejecutar aplicaciones usando Docker Compose

La aplicación está lista para la implementación. Desde el simple_app Carpeta, ejecute el siguiente comando:

$ Docker-Compose Up

La salida debe comenzar así:

$ Docker-Compose Up
Construcción de red
Paso 1/5: de Python: 3.6.3-jessie
3.6.3-Jessie: Tirando de Biblioteca/Python
85b1f47fba49: descarga [===========>] 12.43Mb/52.6 MB
5409e9a7fa9e: descargar completo
661393707836: descarga [===============>] 13.71Mb/43.23 MB
1BB98C08D57E: descarga [>] 1.081MB/134.7MB

Una vez que todas las imágenes están construidas y ejecutadas, debería ver lo siguiente:

Estado: descarga imagen más nueva para Redis: Alpine
Creación de simplesp_redis_1 ..
Creación de simplesp_web_1 ..
Creación de simplesp_redis_1
Creación de simplesp_web_1 ..
Adjuntar a simplizp_redis_1, simplizp_web_1
Redis_1 | 1: m 21 de octubre 02:06:33.639 * Listo para aceptar conexiones
Web_1 | * Ejecutando en http: // 0.0.0.0: 5000/ (presione Ctrl+C para dejar de fumar)
Web_1 | * Reiniciar con STAT
Web_1 | * El depurador está activo!
Web_1 | * Pin de depuración: 237-189-083

Puede probar la aplicación yendo a http: // localhost: 5000:. Si actualiza la página varias veces, debe reflejar el número de visitas. Puede verificar el estado de los servicios o los contenedores en ejecución:

$ Docker PS
Comando de imagen de ID de contenedor Nombres de puertos de estado creados
22852e0ad98a Redis: Alpine "Docker-EntryPoint ..." Hace 5 minutos hasta 5 minutos 6379/TCP SimpleApp_redis_1
D51739D0A3AC SimpleApp_Web "Python Simple_App.py "Hace 5 minutos hasta 5 minutos 0.0.0.0: 5000-> 5000/TCP SimpleApp_web_1

Si inicia un shell bash en simplizp_web_1 (el nombre de su contenedor puede diferir), se registrará en el directorio /código de trabajo:

$ Docker Exec -it SimpleApp_Web_1 Bash
root@d51739d0a3ac:/código# ls
requisitos.txt simple_app.py
root@d51739d0a3ac:/código#

El /código El directorio debe reflejar el contenido de simple_app/content/código dentro de él como se ve arriba (simple_app.py y requisitos.TXT).

Si actualiza su simple_app.pyLínea de:

devolver 'Bienvenido a las lecciones de Docker Compose!

Has visitado este sitio veces.\norte'.formato (recuento)

A:

devolver 'Bienvenido a las lecciones de Docker Compose!

Estas intrigado?

Has visitado este sitio veces.\norte'.formato (recuento)

Debe reflexionar sobre http: // localhost: 5000:

Paso 6: Apagando los servicios

Puede detener la aplicación usando:

$ Docker-Compose Stop
Detener simplesp_redis_1 ... hecho
Detener simplesp_web_1 ..

Los volúmenes montados persistirán. Puede eliminar los contenedores por completo incluyendo los volúmenes utilizando el siguiente comando.

$ Docker-Compose Down-Volumen
Eliminar simplizp_redis_1 ... hecho
Eliminar simplizp_web_1 ... hecho
Eliminar la red simplesp_default

Felicidades! Has dominado los conceptos básicos de Docker Compose.

Estudio adicional

Para más estudios, mire la siguiente documentación:

  • Documentación de Docker
  • Referencia de archivo de composición de Docker
  • Docker componiendo redes

Referencias:

  • https: // documentos.estibador.com/compose/desvoto/#desarrollo-envirmenes
  • https: // documentos.estibador.com/compose/gettingstart/
  • https: // blog.mierda de códigos.com/Orchestrate-Containers-for-Develous-with-Docker-Compose/
  • https: // www.sumológico.com/blog/devops/to-to-to-build-aplicaciones-docker-composa/
  • https: // documentos.estibador.com/compose/wordpress/#define-the-project