Especificación de desarrollo de Compose
NoteDevelop es una parte opcional de la Especificación de Compose. Está disponible a partir de la versión 2.22.0 de Docker Compose.
Esta página define cómo se comporta Compose para asistirte de manera eficiente y define las restricciones y flujos de trabajo de desarrollo establecidos por Compose. Solo un subconjunto de servicios del archivo de Compose puede requerir una subsección develop.
Ejemplo ilustrativo
services:
frontend:
image: example/webapp
build: ./webapp
develop:
watch:
# sincronizar contenido estático
- path: ./webapp/html
action: sync
target: /var/www
ignore:
- node_modules/
backend:
image: example/backend
build: ./backend
develop:
watch:
# volver a compilar la imagen y recrear el servicio
- path: ./backend/src
action: rebuildAtributos
La subsección develop define opciones de configuración que Compose aplica para asistirte durante el desarrollo de un servicio con flujos de trabajo optimizados.
watch
El atributo watch define una lista de reglas que controlan las actualizaciones automáticas del servicio en función de los cambios de archivos locales. watch es una secuencia, donde cada elemento define una regla que Compose aplica para monitorizar los cambios en el código fuente. Para obtener más información, consulta
Usar Compose Watch.
action
action define la acción a realizar cuando se detectan cambios. Si action se establece en:
rebuild: Compose vuelve a compilar la imagen del servicio basándose en la secciónbuildy vuelve a crear el servicio con la imagen actualizada.restart: Compose reinicia el contenedor del servicio. Disponible a partir de la versión 2.32.0 de Docker Compose.sync: Compose mantiene los contenedores del servicio existentes en ejecución, pero sincroniza los archivos de origen con el contenido del contenedor según el atributotarget.sync+restart: Compose sincroniza los archivos de origen con el contenido del contenedor según el atributotargety luego reinicia el contenedor. Disponible a partir de la versión 2.23.0 de Docker Compose.sync+exec: Compose sincroniza los archivos de origen con el contenido del contenedor según el atributotargety luego ejecuta un comando dentro del contenedor. Disponible a partir de la versión 2.32.0 de Docker Compose.
exec
exec solo es relevante cuando action se establece en sync+exec. Al igual que los service hooks, exec se utiliza para definir el comando que se ejecutará dentro del contenedor una vez que se haya iniciado.
command: Especifica el comando a ejecutar una vez que el contenedor se inicia. Este atributo es obligatorio y puedes elegir usar el formato de shell o el formato de ejecución (exec).user: El usuario con el que se ejecuta el comando. Si no se establece, el comando se ejecuta con el mismo usuario que el comando principal del servicio.privileged: Permite que el comando se ejecute con acceso privilegiado.working_dir: El directorio de trabajo en el que se ejecuta el comando. Si no se establece, se ejecuta en el mismo directorio de trabajo que el comando principal del servicio.environment: Establece las variables de entorno para ejecutar el comando. Aunque el comando hereda las variables de entorno definidas para el comando principal del servicio, esta sección te permite añadir nuevas variables o invalidar las existentes.
services:
frontend:
image: ...
develop:
watch:
# sincronizar el contenido y luego ejecutar el comando para recargar el servicio sin interrupciones
- path: ./etc/config
action: sync+exec
target: /etc/config/
exec:
command: app reloadignore
El atributo ignore se utiliza para definir una lista de patrones de rutas a ignorar. Cualquier archivo actualizado que coincida con un patrón, o que pertenezca a una carpeta que coincida con un patrón, no provocará que los servicios se vuelvan a crear. La sintaxis es la misma que la del archivo .dockerignore:
*coincide con 0 o más caracteres en el nombre de un archivo.?coincide con un solo carácter en el nombre del archivo.*/*coincide con dos carpetas anidadas con nombres arbitrarios.**coincide con una cantidad arbitraria de carpetas anidadas.
Si el contexto de compilación incluye un archivo .dockerignore, los patrones de este archivo se cargan como contenido implícito para el archivo de exclusiones (ignores), y se añaden los valores establecidos en el modelo de Compose.
include
A veces es más sencillo seleccionar los archivos que se quieren monitorizar en lugar de declarar los que no se deben monitorizar con ignore.
El atributo include se utiliza para definir un patrón, o una lista de patrones, de rutas a considerar para la monitorización. Solo los archivos que coincidan con estos patrones se tendrán en cuenta al aplicar una regla de monitorización. La sintaxis es la misma que la de ignore.
services:
backend:
image: example/backend
develop:
watch:
# volver a compilar la imagen y recrear el servicio
- path: ./src
include: "*.go"
action: rebuildNoteEn muchos casos, los patrones de
includecomienzan con un carácter comodín (*). Esto tiene un significado especial en la sintaxis YAML para definir un nodo de alias, por lo que debes encerrar la expresión del patrón entre comillas.
initial_sync
Cuando se usan acciones sync+x, puede ser útil asegurarse de que los archivos dentro de los contenedores estén actualizados al inicio de una nueva sesión de monitorización.
El atributo initial_sync indica al motor de ejecución de Compose que, si los contenedores para el servicio ya existen, compruebe que los archivos del atributo de ruta (path) estén sincronizados dentro de los contenedores del servicio.
path
El atributo path define la ruta al código fuente (relativa al directorio del proyecto) que se debe monitorizar para detectar cambios. Las actualizaciones de cualquier archivo dentro de la ruta que no coincida con ninguna regla de ignore activarán la acción configurada.
target
El atributo target solo se aplica cuando action está configurada como sync. Los archivos dentro de path que tengan cambios se sincronizarán con el sistema de archivos del contenedor, de modo que este último siempre se ejecute con contenido actualizado.t.