Sintaxis-compose.yml

Herramientas

Prologo: El objetivo de este Posts es crear una puerta para comprender la sintaxis del archivo docker-compose.yml y en consecuencias entender el proceso plasmar en la creación del mismo; con la sintaxis adecuada para conseguir la funcionalidad de Docker-Compose. Por lo tanto he decidido hacerle un hueco en las herramientas.

Sintaxis-compose.yml

Aclaremos algunos conceptos:

Que es Docker:

  • Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos, permite separar las aplicaciones de la infraestructura.

Que es DockerCompose:

  • Docker-Compose es una herramienta para definir y ejecutar aplicaciones múltiple contenedores. Docker-Compose, usa un archivo docker-compose.yml para configurar los servicios. Y con un solo comando, crea e inicia todos los servicios.

Creación del archivo de configuración

-. Crear un entorno de desarrollo con Docker Compose es crear una carpeta para el proyecto y dentro de esta el archivo de configuración docker-compose.yml, en el cual define los servicios, redes y volúmenes necesarios para el proyecto que necesitamos. Veamos la sintaxis docker-compose.yml, la arquitectura y los elementos que deseamos incluir.

-. Componer el archivo de redacción en un docker-compose.yml. Definición de diferentes recursos que desplegara tenemos los siguientes.

Elemento de nivel superior

  • versión (opcional) : Compatibilidad con versiones anteriores. Es sólo informativo.
  • services (Requerido) : Cada uno despliega un contenedor, asociado a una imagen Docker.
  • networks : Permite que los servicios se comuniquen entre sí.
  • volúmes : Almacén de datos persistente.
  • configs : Gestión y persistencia para la configuración de los servicios.
  • secrets : Permitir acceso a información sensible, contraseñas,Keys o API.

Services:

-. Los services: definen los recursos de las aplicaciones cada services: cada uno despliega un contenedor o mas asociado a una imagen-Docker. En este services: definir las características de cada contenedor como “nombre:” que le damos al contenedor, la “image:”que usamos, y nos conectaremos a los “volumes:” , “networks:” “ports:

-. Cuando definimos un services: en el archivo docker-compose.yml; generamos un bloque que define el services: con su nombre y una serie de propiedades que definen las características del contenedor:

  • image: Nombre de la imagen Docker usada para desplegar el contenedor.
  • container_name: Nombre del contenedor a desplegar.
  • depends_on: Servicios que deben desplegarse antes que este.
  • build: Ruta al directorio donde se encuentra el Dockerfile para construir la imagen, si no está construida.
  • command: Comandos que ejecutar al iniciar el contenedor.
  • ports: Puertos que exponer al exterior del contenedor. Tienen el formato puerto_host:puerto_contenedor, donde, como host, podremos acceder al servicio desde localhost:puerto_host.
  • expose: define los puertos que Compose expone desde el contenedor, solo se pueden especificar los puertos internos del contenedor.
  • volumes: Volúmenes que montar en el contenedor.
  • volumes_from: Monta todos los volúmenes de otro servicio o contenedor. Opcionalmente, puede especificar acceso de solo lectura ro o lectura y escritura rw. Si no se especifica rw.
  • environment: Variables de entorno que definir en el contenedor. Es recomendable configurar nuestros contenedores con variables de entorno y no valores fijos, para poder cambiar la configuración de los servicios sin tener que reconstruir las imágenes.
  • networks: Redes a las que pertenece el contenedor.
  • restart: Define la política que la plataforma aplica en la terminación del contenedor.

                 no: La política de reinicio predeterminada. No reinicia el contenedor bajo ninguna circunstancia.

                 always: La política siempre reinicia el contenedor hasta su eliminación.

                 on-failure: La política reinicia el contenedor si el código de salida indica un error.

                 unless-stopped: La política reinicia el contenedor independientemente del código de salida, pero deja de reiniciarse cuando se detiene o elimina el servicio.

Nota: importante si no especificamos; se usan valores por defecto

networks:

-. Las redes permite que los servicios se comuniquen entre sí; este elemento networks configurar redes que se pueden reutilizar en múltiples servicios. Para usar una red en múltiples services: se realiza mediante el atributo de redes. Esta networks como elemento de nivel superior, tenemos una sintaxis adicional para ampliar el control.

Como elemento segundo nivel:

  • services:
  •    proxy:
  •       image: proxy
  •       networks:
  •          – proxy

Como elemento de nivel superior:

  • networks:
  •    default:
  •       name: red-externa
  •       external: true

-. El primer ejemplo como networks: de segundo nivel englobado dentro de un services: y el segundo ejemplo networks: como elemento de nivel superior.

volumes:

-. Los volúmenes almacena los Datos, son persistentes y son implementados por el motor de Docker y son instalados en algún sitio determinado del host, fuera de los contenedores, con los servicios creamos los volúmenes y especificamos la configuración para asignarlos al entorno de trabajo. Podemos utilizar un volumen en varios servicios al mismo tiempo para logar esto lo conseguimos con los mediante el atributo de volúmenes. El volumes-atributo tiene una sintaxis adicional con la que conseguimos ¡un control más fino!.

-. Cuando definimos el bloque con el nombre del volumen en docker-compose.yml y posteriormente asignamos los servicios que necesitamos .

Podemos definir en este bloque:

  • driver: Driver del volumen. “Por defectolocal.
  • driver_opts: Opciones del driver del volumen.

              type: Tipo de volumen. “ none, bind, volume o tmpfs”.

              device: Ruta al directorio del host que se va a montar.

              o: Opciones de montaje del volumen. bind, private, ro, rw y shared, etc

  • external: Indica si el volumen es externo o no. “Por defectofalse.
  • labels: Etiquetas del volumen.
  • name: Nombre del volumen.
  • scope: Alcance del volumen. “Por defectolocal.

Como elemento segundo nivel:

services:

  • db:
  •    image: mysql:5.7
  •    volumes:
  •       – db_data:/var/lib/mysql

Como elemento de nivel superior:

  • volumes:
  •    db_data:
  •       external:
  •          name: db_data

-. Primer ejemplo de segundo nivel, se monta colgando de un servicio y se crea la ruta de acceso. Y el segundo ejemplo de nivel superior utilizamos un volumen existente para utilizarlo en el proyecto, el name: tiene que ser el real y tenemos que hacer referencia en el docker-compose.yml.

-. Primer ejemplo de segundo nivel, se monta colgando de un servicio y se crea la ruta de acceso. Y el segundo ejemplo de nivel superior utilizamos un volumen existente para utilizarlo en el proyecto, el name: tiene que ser el real y tenemos que hacer referencia en el docker-compose.yml.

configs:

-. configs: gestióna la configuración de los servicios, la ubicación del punto de montaje dentro del contenedor de forma predeterminada es /”my_config el name” en Linux. Si queremos cambiar la configuración de un services: tenemos que ejecutar build no es productivo, no es practico, en su lugar usamos configs: para indicar al services: que aplique determinada configuración.

Tenemos tres tipos de configs:

  • file: la configuración se crea a partir de un fichero en la ruta especificada.
  • external: si se fija como True indica que la configuración ya se creó. Asegurarnos de que no se modifica algo que ya se ha configurado previamente.
  • name: el nombre del config en el motor de contenedor que se buscará. Se puede fijar en caso de haber indicado external: True.

Pongamos un ejemplo:

  • configs:
  •    http_config:
  •       external: true

secrets:

. Los secrets: permitir acceso a información sensible, contraseñas,Keys o API. Los secrets: como elemento de nivel superior define los datos confidenciales que le damos a los servicios declarados en docker-compose.yml.

Las fuentes de los secrets:

  • file: El secret: es creado con el contenido del archivo en la ruta especificada.
  • environment: El secret: se crea con el valor de una variable de entorno.
  • external: si se fija como True indica que la configuración ya se ha creado.
  • name: el nombre del secret: en docker-compose.yml. usar en caso de haber indicado external: True.

Pongamos un ejemplo:

  • secrets:
  •    server-certificate:
  •       external: true

 

Recopilando:

En este articulo aclaramos de donde sacamos los elementos que utilizamos para componer docker-compose.yml la sintaxis para crearlo; los elementos de nivel superior y las diferencias cuando son elementos de segundo nivel.

 

  • Referencias: moreluz.entorno
  • Referencias: Docker-Docs

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *