Configura opciones para ejecutar tu contenedor

Cuando creas una instancia o una plantilla de instancias para usar en la ejecución de contenedores en Compute Engine, debes especificar la configuración del contenedor mediante Google Cloud Platform Console o la herramienta de línea de comandos de gcloud.

Antes de comenzar

Especifica la política de reinicio

Puedes establecer la política de reinicio para especificar 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 la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, especifica la política de reinicio deseada.

gcloud

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

  • always (predeterminado)
  • 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 establecer la política de reinicio de 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. De forma predeterminada, los contenedores se ejecutan como “sin privilegios” y no tienen permiso para acceder a ningún dispositivo.

Console

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

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca Implementar imagen de contenedor.
  4. Haz clic en Opciones avanzadas de contenedor.
  5. Marca Ejecutar como privilegiado.

gcloud

Usa la marca --container-privileged para ejecutar un contenedor privilegiado con 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 a fin de 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.

Es necesario mantener abierta la transmisión STDIN para establecer un shell interactivo en el contenedor (y, también, asignar un seudo-TTY) y que el contenedor pueda recibir su entrada estándar de una canalización.

Console

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

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca Implementar imagen de contenedor.
  4. Haz clic en Opciones avanzadas de contenedor.
  5. Marca 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 a fin de 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

Es necesario asignar un seudo-TTY a un contenedor a fin de establecer un shell interactivo en el contenedor (junto con la asignación de un buffer para STDIN).

Console

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

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca Implementar imagen de contenedor.
  4. Haz clic en Opciones avanzadas de contenedor.
  5. Marca Asignar un seudo-TTY.

gcloud

Usa la marca --container-tty para asignar un seudo-TTY. En el siguiente ejemplo, se inicia un contenedor y se asigna un seudo-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 a fin de actualizar un contenedor en una VM. Usa la marca --no-container-tty para no 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. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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 a fin de anular el ENTRYPOINT de la imagen del contenedor. En el siguiente ejemplo, se ejecuta el comando uptime en un contenedor 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 predeterminado.

Console

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

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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 de comando de un contenedor que se ejecuta en una VM. La actualización reemplaza toda la lista de argumentos por 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. Solo se usa el último valor de [KEY] cuando [KEY] se repite más de una vez.

Console

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

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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 archivo env.txt tiene el siguiente contenido:

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

Usa el comando gcloud compute instances update-container con las marcas --container-env o --container-env-file a fin de actualizar las variables de entorno para un contenedor en una VM. Esto actualizará cualquier variable presente 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 un contenedor se actualice 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. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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, que es una ruta en una estructura de directorio del contenedor en la que deseas activar un directorio de host.
    • Una ruta de host, que es una ruta de acceso al directorio de 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 de host en un contenedor. En el siguiente ejemplo, se activa el directorio de host /tmp en el contenedor en /logs en el 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 de directorio de host en un contenedor. Usa la marca --remove-container-mounts para quitar las activaciones de volumen con las rutas de activación especificadas durante la actualización. 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. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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 tmpfs vacío 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 de 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 ninguno. Si no hay un sistema de archivos inicial, el agente de inicio del contenedor formatea el disco a ext4 y solo se admiten 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. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en el botón Crear instancia para crear una instancia nueva.
  3. En la sección Contenedor, marca 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á. Deja este campo en blanco si el disco no tiene particiones.
  10. Especifica si deseas activar el directorio en modo de lectura y escritura o de solo lectura.

gcloud

Usa los comandos gcloud compute instances create-with-container o 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 los 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 las marcas --container-mount-disk activan los discos adjuntos en el contenedor. Debido a que el valor mode no está especificado 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 discos adjuntos adicionales o modificar las activaciones de disco 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 activación que se pasa a la marca --remove-container-mounts no existe, se ignora 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 la VM de host, y no es necesario especificar la marca de publicación de puerto (-p) para que la asignación funcione.

Si deseas publicar los puertos de un contenedor, configura las reglas de firewall para permitir 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

Este es un ejemplo de 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.12 \
        --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 que se crea en el siguiente paso.

  2. Crea una regla de firewall para permitir conexiones al 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 comenzará 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 las combinaciones de protocolo:puerto de la VM de host en las que el protocolo sea tcp o udp. Estas reglas regirán de forma efectiva el acceso desde fuera de la VM a los puertos de contenedor correspondientes.

Comentarios y preguntas

Agradecemos tus comentarios y preguntas. Comunícate con el equipo de contenedores en Compute Engine para hacer preguntas, informar problemas y solicitar capacidades nuevas.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine