Skip to main content

Introducción a los contenedores dev

Cuando trabajas en un codespace, el ambiente en el que estás trabajando se crea utilizando un contenedor de desarrollo o contenedor dev, el cual se hospeda en una máquina virtual.

People with write permissions to a repository can create or edit the codespace configuration.

Codespaces está disponible para las organizaciones que utilicen GitHub Team o Nube de GitHub Enterprise. Para obtener más información, consulta la sección "Productos de GitHub".

Acerca de los contenedores dev

Los contenedores de desarrollo o contenedores dev son contenedores de Docker que se configuran específicamente para proporcionar un ambiente de desarrollo con características completas. Cuando sea que trabajes en un codespace, estarás utilizando un contenedor dev en una máquina virtual.

Puedes configurar el dev container en un repositorio para que el codespace que se cree para dicho repositorio te proporcione un ambiente de desarrollo personalizado, completo con todas las herramientas y tiempos de ejecución que necesitas para trabajar en un proyecto específico. Si no defines una configuración en el repositorio, entonces el Acerca de GitHub Codespaces utilizará una configuración predeterminada, la cual contendrá muchas de las herramientas comunes que podría necesitar tu equipo para el desarrollo de tu proyecto. Para obtener más información, consulta la sección "Utilizar la configuración predeterminada".

Los archivos de configuración de un contenedor dev se contienen en un directorio .devcontainer en tu repositorio. Puedes utilizar Visual Studio Code para que agregue archivos de configuración para ti. Puedes elegir de entre una variedad de configuraciones predefinidas para varios tipos de proyecto. Puedes utilizarlos sin configuraciones subsecuentes o puedes editar las configuraciones para refinar el ambiente de desarrollo que producen. Para obtener más información, consulta la sección "Utilizar una configuración predefinida de contenedor dev".

Como alternativa, puedes agregar tus propios archivos de configuración persionalizados. Para obtener más información, consulta la sección "Crear una configuración personalizada de contenedor dev".

Puedes definir una sola configuración de contenedor dev para un repositorios, configuraciones diferentes para ramas diferentes o configuraciones múltiples. Cuando hay configuraciones múltiples disponibles, los usuarios pueden elegir su configuración preferida cuando crean un codespace. Esto es particularmente útil para los repositorios grandes que contienen código fuente en diversos lenguajes de programación o para proyectos diferentes. Puedes crear una variedad de configuraciones que permitan que los diferentes equipos trabajen en un codespace que se configuró adecuadamente para el trabajo que están realizando.

devcontainer.json

El archivo principal en una configuración de contenedor dev es devcontainer.json. Puedes utilizar este archivo para determinar el ambiente de los codespaces que se crean para tu repositorio. El contenido de este archivo define un contenedor dev que puede incluir marcos de trabajo, herramientas, extensiones y reenvío de puertos. El archivo devcontainer.json a menudo contiene una referencia a un Dockerfile, que habitualmente se ubica en todo el archivo devcontainer.json.

Si no agregas un archivo devcontainer.json a tu repositorio, se utilizará la configuración del contenedor dev predeterminado. Para obtener más información, consulta la sección "Utilizar la configuración predeterminada".

El archivo devcontainer.json a menudo se ubica en el directorio .devcontainer de tu repositorio. Como alternativa, puedes ubicarlo directamente en la raíz del repositorio, en cuyo caso el nombre de archivo debe comenzar con un punto: .devcontainer.json.

SI quieres tener una variedad de configuraciones de contenedores dev en tu repositorio, cualquier alternativa al archivo .devcontainer/devcontainer.json (o .devcontainer.json) debe ubicarse en su propio subdirectorio en la ruta .devcontainer/SUBDIRECTORY/devcontainer.json. Por ejemplo, podrías tener una elección de dos configuracones:

  • .devcontainer/database-dev/devcontainer.json
  • .devcontainer/gui-dev/devcontainer.json

Cuando tienes varios archivos de devcontainer.json en tu repositorio, cada codespace se crea desde solo una de las configuraciones. No se pueden importar los ajustes ni heredarlos entre archivos de devcontainer.json. Si un archivo de devcontainer.json en un subdirectorio personalizado tiene archivos dependientes, tales como el Dockerfile o los scripts que ejecutan los comandos en dicho archivo devcontainer.json, se recomienda que coloques ambos de estos archivos en el mismo directorio.

Para obtener más información sobre cómo elegir tu configuración preferida de contenedor dev cuando creas un codespace, consulta la sección "Crear un codespace".

For information about the settings and properties that you can set in a devcontainer.json file, see "devcontainer.json reference" in the Visual Studio Code documentation.

Cómo utilizar el devcontainer.json

Es útil pensar que el archivo devcontainer.json sirve para proporcionar "adaptación" en vez de "personalización". Solo debes incluir las cosas que necesiten todos los que trabajan en tus codespaces como elementos estándar del ambiente de desarrollo, no las que son preferencias personales. Las cosas como los limpiadores son buenas para estandarizar y para requerir que todos las tengan instaladas, así que es bueno incluirlas en tu archivo devcontainer.json. Las cosas como los decoradores de interfaz de usuario o los temas son elecciones personales que no deberían ponerse en el archivo devcontainer.json.

Puedes personalizar tus codespaces utilizando dotfiles y la sincronización de ajustes. Para obtener más información, consulta la sección "Personalizar los codespaces para tu cuenta".

Dockerfile

Puedes agregar un Dockerfile como parte de tu configuración de contenedor dev.

El Dockerfile es un archivo de texto que contiene las instrucciones necesarias para crear una imagen de contenedor de Docker. Esta imagen se utiliza para generar un contenedor de desarrollo cada que alguien crea un codespace utilizando el archivo devcontainer.json que referencia a este Dockerfile. Las instrucciones en el Dockerfile habitualmente comienzan haciendo referencia a una imagen padre en la cual se basa la imagen que se creará. A esto le siguen los comandos que se ejecutan durante el proceso de creación de imagen, por ejemplo, para instalar paquetes de software.

El Dockerfile para un contenedor dev se ubica habitualmente en la carpeta -.devcontainer, junto con el devcontainer.json en el cual se referencia.

Nota: Como alternativa a utilizar un Dockerfile, puedes utilizar la propiedad image en el archivo devcontainer.json para referirte directamente a una imagen existente que quieras utilizar. Si no se encuentra un Dockerfile ni una imagen, entonces se utilizará la imagen de contenedor predeterminada. Para obtener más información, consulta la sección "Utilizar la configuración predeterminada".

Ejemplo de un Dockerfile simple

El siguiente ejemplo utiliza cuatro instrucciones:

ARG define una variable de tiempo de compilación.

FROM especifica la imagen padre en la cual se basará la imagen de Docker generada.

COPY copia un archivo y lo agrega al sistema de archivos.

RUN actualiza las listas de paquetes y ejecuta un script. También puedes utilizar una instrucción de RUN para instalar software, tal como lo muestran las instrucciones en las cuales se comentó. Para ejecutar comandos múltiples, utiliza && para combinar los comandos en una sola declaración de RUN.

Dockerfile
ARG VARIANT="16-buster"
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT}

# [Optional] Uncomment if you want to install an additional version of node using nvm
# ARG EXTRA_NODE_VERSION=10
# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}"

# [Optional] Uncomment if you want to install more global node modules
# RUN su node -c "npm install -g <your-package-list-here>"

COPY library-scripts/github-debian.sh /tmp/library-scripts/
RUN apt-get update && bash /tmp/library-scripts/github-debian.sh

Para obtener más información sobre las instrucciones de los Dockerfiles, consulta la "referencia de Dockerfile" en la documentación de Docker.

Utilizar un Dockerfile

Para utilizar un Dockerfile como parte de una configuración de contenedor dev, referénciala en tu devcontainer.json utilizando la propiedad dockerfile.

JSON
{
  ...
  "build": { "dockerfile": "Dockerfile" },
  ...
}

Para obtener más información sobre cómo utilizar un Dockerfile en una configuración de contenedor dev, consulta la documentación de Visual Studio Code "Crear un contenedor de desarrollo".

Utilizar la configuración de contenedor dev predeterminada

Si no defines una configuración en tu repositorio, GitHub creará un codespace utilizando una imagen de Linux predeterminada. This Linux image includes a number of runtime versions for popular languages like Python, Node, PHP, Java, Go, C++, Ruby, and .NET Core/C#. The latest or LTS releases of these languages are used. There are also tools to support data science and machine learning, such as JupyterLab and Conda. The image also includes other developer tools and utilities like Git, GitHub CLI, yarn, openssh, and vim. Para ver todos los lenguajes, tiempos de ejecución y herramientas que se incluyen, utiliza el comando devcontainer-info content-url dentro de tu terminal del codespace y sigue la URL que este produce.

Como alternativa, para obtener más información sobre todo lo que incluye la imagen predeterminada de Linux, consulta el archivo más reciente del repositorio microsoft/vscode-dev-containers.

La configuración predeterminada es una buena opción si estás trabajando en un proyecto pequeño que utilice los lenguajes y herramientas que proporciona Acerca de GitHub Codespaces.

Utilizar una configuración predeterminada de contenedor dev

Puedes elegir de entre una lista de configuraciones predeterminadas para crear una configuración de contenedor dev para tu repositorio. Estas configuraciones proporcionan ajustes comunes para tipos de proyecto particulares y pueden ayudarte a iniciar rápidamente con una configuración que ya tenga las opciones de contenedor, ajustes de Visual Studio Code y extensiones de Visual Studio Code que deberían instalarse.

Utilizar una configuración predefinida es una gran idea si necesitas extensibilidad adicional. También puedes comenzar con una configuración predeterminada y modificarla conforme la necesites para tu proyecto.

Puedes agregar una configuración de contenedor dev predefinida ya sea mientras trabajas en un codespace o localmente en un repositorio.

  1. Accede a la Paleta de Comandos de VS Code (Shift + Command + P / Ctrl + Shift + P) y comienza a teclear "dev container". Selecciona Codespaces: Agregar archivos de configuración del contenedor de desarrollo....

    "Codespaces: Agregar archivos de configuración de contenedor de desarrollo..." en la Paleta de Comandos de VS Code

  2. Haz clic en la definición que quieres utilizar.

    Lista de definiciones de contenedores predefinidas

  3. Sigue los mensajes para personalizar tu definición. Para obtener más información sobre las opciones para personalizar tu definición, consulta la sección "Agregar características adicionales a tu archivo devcontainer.json".

  4. Haz clic en OK (aceptar).

    Botón de OK

  5. Si estás trabajando en un codespace, aplica tus cambios haciendo clic en Recompilar ahora en el mensaje en la parte inferior derecha de la ventana. For more information about rebuilding your container, see "Applying changes to your configuration."

    "Codespaces: Reconstruir contenedor" en la Paleta de Comandos de VS Code

Agregar características adicionales a tu archivo de devcontainer.json

Nota: Esta característica se encuentra en beta y está sujeta a cambios.

Puedes agregar características a tu configuración predefinida de contenedor para personaliza las herramientas que están disponibles y extender la funcionalidad de tu espacio de trabajo sin tener que crear una configuración personalizada de contenedor dev desde cero. Por ejemplo, podrías utilizar una configuración predefinida de contenedor y agregar el CLI de GitHub. Puedes hacer que estas características adicionales estén disponibles para tu proyecto agregándolas a tu archivo de devcontainer.json cuando configures los ajustes de dicho contenedor.

Puedes agregar algunas de las características más comunes seleccionándolas cuando configures tu contenedor predefinido. Para obtener más información sobre las características disponibles, consulta la librería de scripts en el repositorio vscode-dev-containers.

  1. Accede a la paleta de comandos (Shift + Command + P / Ctrl + Shift + P) y luego comienza a teclear "configurar". Selecciona Codespaces: configurar las características del devcontainer.

    El comando de configurar características del devcontainer en la paleta de comandos

  2. Actualiza tus selecciones de características y luego haz clic en OK.

    The select additional features menu during container configuration

  3. Para aplicar los cambios, en la esquina inferior derecha de la pantalla, haz clic en Reconstruir ahora. For more information about rebuilding your container, see "Applying changes to your configuration."

    "Codespaces: Reconstruir contenedor" en la paleta de comandos

Crear una configuración de contenedor dev personalizada

Si ninguna de las configuraciones predefinidas satisface tus necesidades, puedes crear una configuración personalizada si escribes tu propio archivo devcontainer.json.

  • Si estás agregando un solo archivo devcontainer.json que utilizará todo aquél que cree un codespace desde tu repositorio, crea el archivo dentro de un directorio de .devcontainer en la raíz del repositorio.

  • Si quieres ofrecer a los usuarios una elección de configuración, puedes crear archivos múltiples de devcontainer.json, cada uno ubicado dentro de un subdirectorio por separado del directorio .devcontainer.

    Nota: No puedes ubicar tus archivos de devcontainer.json en los directorios a más de un nivel debajo de .devcontainer. Por ejemplo, un archivo en la ruta .devcontainer/teamA/devcontainer.json sí funcionaría, pero uno en .devcontainer/teamA/testing/devcontainer.json, no.

    Si se encuentran archivos devcontainer.json múltiples en el repositorio, estos se listarán en la página de opciones de creación de codespaces. Para obtener más información, consulta la sección "Crear un codespace".

    A choice of configuration files

Selección de configuración predeterminada durante la creación de codespaces

Si existe el archivo .devcontainer/devcontainer.json o .devcontainer.json, este será la selección predeterminada en la lista de archivos de configuración disponibles cuando crees un codespace. Si no existe ninguno de ellos, se seleccionará la configuración de contenedor dev predefinida.

The default configuration choice selected

Editar el archivo devcontainer.json

Puedes agregar y editar las claves de configuración compatibles en el archivo devcontainer.json para especificar los aspectos del ambiente del codespace, como qué extensiones de Visual Studio Code se instalarán. For information about the settings and properties that you can set in a devcontainer.json file, see "devcontainer.json reference" in the Visual Studio Code documentation.

El archivo de devcontainer.json se escribe utilizando el formato JSONC. Esto te permite incluir comentarios dentro del archivo de configuración. For more information, see "Editing JSON with Visual Studio Code" in the Visual Studio Code documentation.

Note: If you use a linter to validate the devcontainer.json file, make sure it is set to JSONC and not JSON or comments will be reported as errors.

Editor settings for Visual Studio Code

Cuando configuras los ajustes de editor para Visual Studio Code, hay tres alcances disponibles: Espacio de trabajo, [Codespaces] Remotos , y Usuario. Si una configuración se define en varios alcances, los ajustes de espacio de trabajo tomarán prioridad, luego los de [Codespaces] Remotos, y luego los de Usuario.

Puedes definir la configuración predeterminada del editor para Visual Studio Code en dos lugares.

  • Editor settings defined in the .vscode/settings.json file in your repository are applied as Workspace-scoped settings in the codespace.
  • Editor settings defined in the settings key in the devcontainer.json file are applied as Remote [Codespaces]-scoped settings in the codespace.

Applying configuration changes to a codespace

Después de que cambia la configuración de los Codespaces para un repositorio, puedes aplicar los cambios a un codespace existente si vuelves a compilar el contenedor para el codespace.

  1. Accede a la Paleta de Comandos de VS Code (Shift + Command + P/ Ctrl + Shift + P) y luego comienza a escribir "rebuild". Selecciona Codespaces: Reconstruir contenedor.

    Opción de recompilar contenedor

  2. Si los cambios a tu configuración de contenedor dev ocasionan un error del contenedor, tu codespace se ejecutará en modo de recuperación y verás un mensaje de error. Fix the errors in the configuration.

    Mensaje de error sobre el modo de recuperación

    • Para diagnosticar el error revisando la bitácora de creación, haz clic en Ver bitácora de creación.
    • Para arreglar los errores que se identificaron en las bitácoras, actualiza tu archivo devcontainer.json.
    • Para aplicar los cambios, vuelve a crear tu contenedor.

Leer más