Skip to main content

Recompilación del contenedor en un codespace

Puede volver a generar un contenedor de desarrollador para aplicar cambios de configuración a los codespaces en los que estás trabajando. De vez en cuando, puede que quieras realizar una recompilación completa.

Acerca de la volver a generar un contenedor de desarrollador

Cuando trabajas en un codespace, el entorno de desarrollo es un contenedor Docker que se ejecuta en una máquina virtual. Si realizas cambios en la configuración del contenedor de desarrollo desde un codespace y deseas aplicar esos cambios al codespace actual, debes recompilar el contenedor.

De forma predeterminada, al volver a generar un contenedor de desarrollador, GitHub Codespaces acelerará el proceso de generación mediante la reutilización de imágenes almacenadas en caché de generaciones anteriores del contenedor. Normalmente, esta es la forma más rápida de implementar cambios en la configuración del contenedor de desarrollo, por los siguientes motivos.

  • GitHub Codespaces puede reutilizar imágenes de la memoria caché en lugar de volver a extraerlas de los registros de contenedor.
  • Es posible que las partes de la configuración del contenedor de desarrollo que definen cómo se compila el contenedor, como las características del contenedor de desarrollo y las instrucciones de Dockerfile, ya se hayan implementado en capas de imagen de la memoria caché, por lo que no tendrás que esperar a que estos procesos se vuelvan a ejecutar. (Sin embargo, los comandos de la configuración que se ejecutan después de compilar el contenedor, como onCreateCommand, se ejecutarán de nuevo).

En ocasiones, puede que desees realizar una recompilación completa del contenedor. Con una recompilación completa, GitHub Codespaces limpia todos los contenedores, las imágenes y los volúmenes de Docker de la memoria caché y, a continuación, recompila el contenedor con las imágenes recién extraídas. Toda la configuración definida en la configuración se volverá a ejecutar, generando nuevas capas de imagen. Es posible que desees realizar una recompilación completa después de muchas iteraciones de recompilación del contenedor con imágenes almacenadas en caché, en situaciones como las siguientes.

  • Quieres asegurarte de que la configuración definida en la configuración no depende de las imágenes almacenadas en caché y que se ejecutará según sea necesario cuando alguien cree un codespace basado en la configuración. Por ejemplo, es posible que se haya quitado una dependencia de la imagen base desde que se extrajo por última vez en el codespace.
  • Quieres liberar el espacio en disco usado por la memoria caché, por ejemplo, si tienes poco espacio en disco o quieres minimizar los cargos de almacenamiento. La memoria caché de imágenes puede consumir una cantidad significativa de espacio en disco si has cambiado la imagen base varias veces, si has realizado un gran número de cambios iterativos en la configuración o si ejecutas varios contenedores con Docker Compose.

Recompilación de un contenedor

Puedes recompilar un contenedor dentro de un codespace en la aplicación de escritorio o cliente web VS Code, o bien puedes usar GitHub CLI.

Recompilación del contenedor de desarrollo en el cliente web o aplicación de escritorio de VS Code

  1. Accede a VS Code Command Palette con Mayús+Comando+P (Mac) o Ctrl+Mayús+P (Windows/Linux).

  2. Empieza a escribir "Recompilación" y selecciona Codespaces: Recompilación del contenedor o Codespaces: Recompilación completa del contenedor.

    Captura de pantalla de la opción "Codespaces: Recompilar contenedor lleno" en la paleta de comandos.

  3. Si los cambios en la configuración del contenedor de desarrollo causan un error de contenedor, el codespace se ejecutará en modo de recuperación y verás un mensaje de error.

    Captura de pantalla de un mensaje que indica que el codespace se está ejecutando en modo de recuperación. Debajo del mensaje se muestran los botones con la etiqueta "Cancelar" y "Ver registro de creación".

    • Para diagnosticar el error revisando los registros de creación, haga clic en View creation log.
    • Para corregir los errores identificados en los registros, actualice el archivo devcontainer.json.
    • Para aplicar los cambios, vuelve a crear tu contenedor.

Uso de GitHub CLI para volver a generar un contenedor de desarrollo

Si has cambiado una configuración de contenedor de desarrollo fuera de VS Code (por ejemplo, en GitHub.com o en un IDE de JetBrains), puedes usar GitHub CLI para recompilar el contenedor de desarrollo para un codespace existente.

  1. En un terminal, escribe el siguientes comando.

    gh codespace rebuild
    

    Se muestran los codespace.

  2. Use las teclas de dirección del teclado para resaltar el codespace necesario y, a continuación, presiona Entrar.

Para realizar una recompilación completa con GitHub CLI, puedes usar el comando gh codespace rebuild --full.

Conservación de datos durante una recompilación

Al crear un codespace, el repositorio se clona en el directorio /workspaces del codespace. Es un directorio persistente que se monta en el contenedor. Todo cambio que se realice dentro de este directorio (incluida la edición, la adición o la eliminación de archivos) se conserva al detener e iniciar el codespace, así como al recompilar el contenedor en el codespace.

Fuera del directorio /workspaces, el codespace contiene una estructura de directorios de Linux que varía en función de la imagen de contenedor dev que se utiliza para compilar el codespace. Puedes agregar archivos o realizar cambios en los archivos fuera del directorio /workspaces: por ejemplo, puedes instalar nuevos programas o definir la configuración del shell en un archivo como ~/.bashrc. Como usuario no raíz, puede que no tengas acceso de escritura automáticamente a ciertos directorios, pero la mayoría de las imágenes permiten el acceso raíz a estos directorios con el comando sudo.

Fuera de /workspaces, a excepción del directorio /tmp, los directorios de un codespace están vinculados al ciclo de vida del contenedor. Esto significa que los cambios que se realicen se conservan al detener e iniciar el codespace, pero no al recompilar el contenedor.

Si necesitas conservar archivos fuera del directorio /workspaces durante una recompilación, puedes crear, en la ubicación deseada del contenedor, un vínculo simbólico (symlink) con el directorio persistente. Por ejemplo, en el directorio /workspaces/.devcontainer, puede crear un directorio config que se conservará en una recompilación. Después, puede vincular de forma simbólica el directorio config y su contenido como postCreateCommand en el archivo devcontainer.json.

{
    "image": "mcr.microsoft.com/devcontainers/base:alpine",
    "postCreateCommand": ".devcontainer/postCreate.sh"
}

En el archivo de ejemplo postCreate.sh siguiente, el contenido del directorio config se vincula simbólicamente al directorio principal.

#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x

Información adicional