# Especificación de desarrollo de Compose


> [!NOTE]
>
> Develop 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

```yaml
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: rebuild
```

## Atributos

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](/compose/how-tos/file-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ón `build` y 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 atributo `target`.
- `sync+restart`: Compose sincroniza los archivos de origen con el contenido del contenedor según el atributo `target` y 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 atributo `target` y 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](/reference/compose-file/develop/services/#post_start), `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.

```yaml
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 reload
```

#### `ignore`

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`.

```yaml
services:
  backend:
    image: example/backend
    develop:
      watch: 
        # volver a compilar la imagen y recrear el servicio
        - path: ./src
          include: "*.go"  
          action: rebuild
```

> [!NOTE]
> 
> En muchos casos, los patrones de `include` comienzan con un carácter comodín (`*`). Esto tiene un significado especial en la sintaxis YAML para definir un [nodo de alias](https://yaml.org/spec/1.2.2/#alias-nodes), 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.

