Configura opciones para ejecutar tu contenedor

Cuando creas una instancia o una plantilla de instancias para usar en la Implementación de contenedores en las VM y MIG, especifica la configuración del contenedor con Google Cloud Console o la herramienta de línea de comandos de gcloud.

En las siguientes secciones, se describe cómo configurar opciones para instancias de VM, pero también puedes configurarlas cuando creas una plantilla de instancias. Usa Google Cloud Console o la herramienta de línea de comandos de gcloud a fin de configurar opciones para las instancias de VM en una plantilla de instancias.

Console

  1. En Google Cloud Console, ve a la página Crea una plantilla de instancias.

    Ir a Crea una plantilla de instancias

  2. En Contenedor, selecciona la casilla de verificación Implementar una imagen de contenedor para esta instancia de VM y expande las Opciones avanzadas de contenedor.

gcloud

  1. En la herramienta de línea de comandos de gcloud, usa el comando gcloud compute instance-templates create-with-container como se muestra en los siguientes ejemplos.

Antes de comenzar

Especifica una política de reinicio

Puedes establecer una política de reinicio que especifique si un contenedor se debe reiniciar durante la salida. La política predeterminada es reiniciar el contenedor siempre. También puedes configurar la política para reiniciar el contenedor en caso de falla o no reiniciarlo nunca.

Console

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, especifica la política de reinicio del contenedor.

gcloud

Usa la marca --container-restart-policy para especificar una política de reinicio del contenedor:

  • always (predeterminada)
  • on-failure
  • never

En el siguiente ejemplo, se inicia un contenedor con la política de reinicio on-failure, lo que significa que el reinicio solo ocurre cuando el código de salida del contenedor no es cero:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-restart-policy on-failure

Usa el comando gcloud compute instances update-container con la marca --container-restart-policy para la política de reinicio en un contenedor que se ejecuta en una VM.

Ejecuta un contenedor en modo privilegiado

Puedes ejecutar un contenedor en modo privilegiado para permitir el acceso a todos los dispositivos en el host. Los contenedores se ejecutan como "sin privilegios" de forma predeterminada y no se les permite acceder a ningún dispositivo.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. Selecciona Ejecutar con privilegios.

gcloud

Usa la marca --container-privileged para ejecutar un contenedor con privilegio de entorno de ejecución. En el siguiente ejemplo, se inicia un contenedor de busybox en modo privilegiado:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-privileged

Usa el comando gcloud compute instances update-container con la marca --container-privileged para actualizar un contenedor en una VM. Usa la marca --no-container-privileged para desactivar el modo privilegiado.

Asigna un búfer para STDIN en el entorno de ejecución del contenedor

Puedes asignar un búfer para STDIN en el entorno de ejecución del contenedor a fin de mantener abierta la transmisión STDIN en un contenedor. Si no se configura, las lecturas de STDIN en el contenedor siempre generarán EOF.

Además de asignar un seudo-TTY, es necesario mantener abierta la transmisión STDIN a fin de establecer una shell interactiva en el contenedor y para que el contenedor reciba su entrada estándar desde una canalización.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. Selecciona Asignar un búfer para STDIN.

gcloud

Usa la marca --container-stdin a fin de asignar un búfer para STDIN en el entorno de ejecución del contenedor. En el siguiente ejemplo, se inicia un contenedor y se mantiene abierto su STDIN:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin

Usa el comando gcloud compute instances update-container con la marca --container-stdin para actualizar un contenedor en una VM. Usa la marca --no-container-stdin si deseas desactivar la asignación de un búfer para STDIN.

Asigna un seudo-TTY

La asignación de un seudo-TTY para un contenedor es necesaria a fin de establecer una shell interactiva en el contenedor (junto con la asignación de un búfer para STDIN).

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. Selecciona Asignar un pseudo TTY.

gcloud

Usa la marca --container-tty para asignar un seudo-TTY. En el siguiente ejemplo, se inicia un contenedor y se asigna un pseudo-TTY:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin \
  --container-tty

Usa el comando gcloud compute instances update-container con la marca --container-tty para actualizar un contenedor en una VM. Usa la marca --no-container-tty si no deseas asignar un seudo-TTY.

Anula el comando predeterminado para ejecutarlo en el inicio del contenedor

El ENTRYPOINT de una imagen de contenedor especifica qué comando ejecutar cuando se inicia el contenedor y te permite ejecutar el contenedor como si fuera ese binario.

Puedes anular el comando ENTRYPOINT de la imagen del contenedor.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En el cuadro Comando, ingresa un solo comando ejecutable sin parámetros, por ejemplo: uptime.

gcloud

Usa la marca --container-command para anular la imagen del contenedor ENTRYPOINT. En el siguiente ejemplo, se ejecuta el comando uptime en un contenedor de busybox para mostrar el tiempo transcurrido desde el último inicio:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "uptime"

Usa el comando gcloud compute instances update-container con la marca --container-command a fin de actualizar un comando para un contenedor en una VM.

Usa la marca --clear-container-command con el comando update-container para borrar el comando predeterminado del contenedor actualizado.

Pasa argumentos al comando ENTRYPOINT del contenedor

Puedes pasar (agregar) argumentos al comando ENTRYPOINT del contenedor o anular el comando CMD del contenedor predeterminado.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En Argumentos de comando, haz clic en Agregar argumento.

  6. Ingresa un argumento de comando por casilla.

gcloud

Usa la marca --container-arg para pasar argumentos al comando ENTRYPOINT de la imagen del contenedor. Usa una marca diferente para cada argumento.

En el siguiente ejemplo, se ejecuta el comando /bin/ash con los argumentos -c 'ls -l' en un contenedor que se configuró para ejecutar busybox de forma automática:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "/bin/ash" \
  --container-arg="-c" \
  --container-arg="ls -l"

Usa el comando gcloud compute instances update-container con las marcas --container-arg para actualizar los argumentos del comando de un contenedor que se ejecuta en una VM. La actualización reemplaza toda la lista de argumentos con la lista nueva.

Usa la marca --clear-container-args con el comando update-container para quitar todos los argumentos de la declaración del contenedor.

Configura variables de entorno

Puedes establecer variables de entorno en un contenedor. Si KEY se repite más de una vez, solo se toma su último valor.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En Variables de entorno, haz clic en Agregar variable.

  6. Agrega o quita variables de entorno según sea necesario, una por línea.

gcloud

Usa la marca --container-env para establecer variables de entorno en un contenedor. En el siguiente ejemplo, se establecen tres variables de entorno: HOME, MODE y OWNER:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env HOME=/home,MODE=test,OWNER=admin

Usa la marca --container-env-file para establecer variables de entorno desde un archivo local. En el siguiente ejemplo, se establecen las dos variables de entorno desde el archivo env.txt:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env-file ./env.txt

El contenido del archivo env.txt es:

# this is a comment
HOME=/home
MODE=test
OWNER=admin

Usa el comando gcloud compute instances update-container con la marca --container-env o --container-env-file a fin de actualizar las variables de entorno para un contenedor en una VM. Esto actualiza todas las variables presentes en la declaración del contenedor de la instancia de VM. Las variables que no están en la declaración del contenedor se agregan.

Usa la marca --remove-container-env para quitar las variables de entorno cuando actualizas un contenedor en una VM. En el siguiente ejemplo, se quitan las variables de entorno llamadas MODE y OWNER:

gcloud compute instances update-container busybox-vm \
  --remove-container-env MODE,OWNER

Si no hay una variable de entorno especificada, se ignorará en silencio.

Activa un directorio de host como volumen de datos

Puedes activar un directorio de una VM host en un contenedor.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En Activaciones de directorio de host, haz clic en Agregar volumen.

  6. Especifica la siguiente información:

    • Una ruta de activación. Una ruta en una estructura de directorio del contenedor en la que deseas activar un directorio de host.
    • Una ruta de host. Una ruta de acceso al directorio del host que deseas activar.
    • Si se debe activar el directorio en modo de lectura y escritura, o de solo lectura.

gcloud

Usa la marca --container-mount-host-path para activar un directorio de VM host en un contenedor. En el siguiente ejemplo, se activa el directorio de host /tmp en el contenedor en /logs en modo de lectura y escritura:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

Especifica mode=ro para activar un directorio de host en modo de solo lectura.

Usa el comando gcloud compute instances update-container con la marca --container-mount-host-path para actualizar las activaciones del directorio del host en un contenedor. Usa la marca --remove-container-mounts para quitar activaciones de volumen con las rutas de activación especificadas. En el siguiente ejemplo, se quita una activación de ruta de host con mount-path=/logs:

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /logs

Si la ruta de activación especificada no existe, se ignora en silencio.

Activa el sistema de archivos tmpfs como volumen de datos

Puedes activar un sistema de archivos tmpfs vacío en un contenedor.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En Activaciones de tmpfs, haz clic en Agregar volumen.

  6. Especifica una ruta de activación, que es una ruta en una estructura de directorio de contenedor en la que deseas activar un volumen tmpfs. El volumen tmpfs se activará en modo de lectura y escritura.

gcloud

Usa la marca --container-mount-tmpfs para activar un sistema de archivos vacío tmpfs en un contenedor. En el siguiente ejemplo, se activa un sistema de archivos tmpfs en el contenedor en /cache en modo de lectura y escritura:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-tmpfs mount-path=/cache
 

Usa el comando gcloud compute instances update-container con la marca --container-mount-tmpfs para actualizar las activaciones tmpfs en un contenedor. Usa la marca --remove-container-mounts para quitar una activación tmpfs con la ruta de activación especificada durante la actualización. En el siguiente ejemplo, se quita la activación tmpfs con mount-path=/cache:

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /cache

Si la ruta de activación especificada no existe, se ignora en silencio.

Activa discos persistentes como volumen de datos

Con Container-Optimized OS 69 o posterior, puedes activar discos persistentes desde una VM host en un contenedor.

Requisitos previos

  • El disco debe tener un sistema de archivos ext4 o no tener un sistema de archivos. Si no hay un sistema de archivos inicial, el agente de inicio del contenedor formatea el disco a ext4 y solo se admiten archivos adjuntos y activaciones de lectura y escritura.
  • El disco debe estar adjunto a la VM.
  • Se admiten particiones y dispositivos sin particiones. Para las activaciones de particiones, el disco no puede quedar en blanco; debe contener una tabla de partición existente.

Console

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en el botón Crear instancia.

  3. En la sección Contenedor, selecciona Implementar imagen de contenedor.

  4. Haz clic en Opciones avanzadas de contenedor.

  5. En Activaciones de volumen, haz clic en Agregar volumen.

  6. En Tipo de volumen, selecciona Disk.

  7. Especifica una ruta de activación, que es una ruta en la estructura de directorios del contenedor en la que deseas activar el disco persistente.

  8. En Nombre del disco, selecciona un disco existente para activar o Adjuntar un disco nuevo.

  9. Si el disco tiene una tabla de partición, debes especificar el número de partición que se activará. Si el disco no tiene particiones, deja este campo en blanco.

  10. Especifica si deseas activar el directorio en modo de lectura y escritura o de solo lectura.

gcloud

Usa el comando gcloud compute instances create-with-container o el comando gcloud compute instances update-container con la marca --container-mount-disk para activar un disco persistente en un contenedor.

En el siguiente ejemplo, se activan dos discos, my-data-disk y my-scratch-disk, en el contenedor en las rutas de activación /disks/data-disk y /disks/scratch-disk.

gcloud compute instances create-with-container busybox-vm \
  --disk name=my-data-disk \
  --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
  --container-image docker.io/busybox:1.27 \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
  --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

Ten en cuenta que la marca --disk adjunta my-data-disk, la marca --create-disk crea y adjunta my-scatch-disk, y la marca --container-mount-disk activa los discos adjuntos en el contenedor. Debido a que no se especifica un mode para my-scratch-disk, ese disco se activa en el contenedor en modo de lectura y escritura de forma predeterminada.

Usa el comando gcloud compute instances update-container con la marca --container-mount-disk para activar los discos adjuntos adicionales o modificar activaciones de discos existentes.

Usa la marca --remove-container-mounts para quitar una activación de volumen de disco con la ruta de activación especificada. En el siguiente ejemplo, se cambia el modo de activación de my-data-disk a lectura y escritura y se quita la activación del disco con mount-path="/disks/scratch-disk".

gcloud compute instances update-container busybox-vm \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
  --remove-container-mounts "/disks/scratch-disk"

Si la ruta de acceso de activación que pasas a la marca --remove-container-mounts no existe, se ignorará en silencio.

Publica puertos de contenedores

Las VM con contenedores usan el modo de red de host, en el que un contenedor comparte la pila de red del host y todas las interfaces del host están disponibles para el contenedor.

Los puertos de contenedor tienen una asignación de uno a uno a los puertos de VM de host. Por ejemplo, un puerto 80 de contenedor se asigna al puerto 80 de VM de host. Compute Engine no es compatible con la marca de publicación de puertos (-p), y no tienes que especificarla para que funcione la asignación.

Si deseas publicar los puertos de un contenedor, configura las reglas de firewall para habilitar el acceso a los puertos de la instancia de VM de host. Se podrá acceder a los puertos correspondientes del contenedor de forma automática, según las reglas de firewall.

Ejemplo: publicación del puerto 80 para un contenedor NGINX

En el siguiente ejemplo, se muestra cómo crear una instancia de VM con un contenedor NGINX y permitir el tráfico al puerto 80 del contenedor.

  1. Crea una instancia de VM con un contenedor NGINX:

    gcloud compute instances create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.15 \
     --tags http-server
    

    El contenedor comparte la pila de red de la VM de host y el puerto 80 del contenedor se publica en el puerto 80 de la VM de host. La etiqueta http-server se usa como una etiqueta de destino para la regla de firewall, creada en el siguiente paso.

  2. Crea una regla de firewall para habilitar las conexiones con el puerto 80 de la instancia de VM. La siguiente regla de firewall permite conexiones HTTP a instancias de VM con la etiqueta http-server.

    gcloud compute firewall-rules create allow-http \
     --allow tcp:80 --target-tags http-server
    

    El contenedor comienza a recibir tráfico de forma automática en el puerto 80. No debes realizar ninguna configuración adicional.

    Puedes crear reglas de firewall para el protocolo de VM del host: combinaciones de puertos en las que el protocolo es tcp o udp. Estas reglas regirán de forma efectiva el acceso desde fuera de la VM a los puertos de contenedor correspondientes.

Próximos pasos