Configura opciones para ejecutar tu contenedor


Antes de comenzar

  • Si no estás familiarizado con los contenedores, consulta Contenedores en Compute Engine.
  • Si no estás familiarizado con Docker, consulta la documentación de Docker.
  • Consulta la sección sobre cómo implementar contenedores en Compute Engine.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña sobre cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

Cuando creas una instancia o una plantilla de instancias para usar en la Implementación de contenedores en las VMs y MIG, especifica la configuración del contenedor con la consola de Google Cloud o Google Cloud CLI.

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 la consola de Google Cloud o Google Cloud CLI a fin de configurar opciones para las instancias de VM en una plantilla de instancias.

Console

  1. Ir a la página Crear una plantilla de instancias

    Ir a Crea una plantilla de instancias

  2. En la sección 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 Google Cloud CLI, usa el comando gcloud compute instance-templates create-with-container como se muestra en los siguientes ejemplos.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Política de reinicio, selecciona la política de reinicio del contenedor.
    3. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. Selecciona Ejecutar con privilegios.
    3. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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 pseudo-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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. Selecciona Asignar un búfer para STDIN.
    3. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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 pseudo-TTY

La asignación de un pseudo-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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. Selecciona Asignar un pseudo TTY.
    3. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

gcloud

Usa la marca --container-tty para asignar un pseudo-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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En el cuadro Comando, ingresa un solo comando ejecutable sin parámetros, por ejemplo: uptime.
    3. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Argumentos, haz clic en Agregar argumento.
    3. Ingresa un argumento de comando para cada casilla.
    4. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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 las opciones del controlador de registros

Si necesitas configurar las opciones del controlador de registros, puedes crear una secuencia de comandos de inicio de VM para actualizar tu archivo de configuración de Docker con las opciones de registro que necesitas. Estas opciones se aplican a todos los contenedores que se ejecutan en la VM y que no especifican opciones de controlador de registro.

Por ejemplo, la siguiente secuencia de comandos de inicio configura varias opciones, incluida una opción para limitar el tamaño del registro del contenedor y, luego, reinicia Docker en la VM:

cat <<EOF > /etc/docker/daemon.json
{
  "live-restore": true,
  "storage-driver": "overlay2",
  "log-opts": {
    "max-size": "10m"
  }
}
EOF
systemctl restart docker

Configure 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 de KEY.

Console

  1. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Variables de entorno, haz clic en Agregar variable.
    3. Agrega o quita variables de entorno según sea necesario, una para cada línea.
    4. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Activaciones de volumen, haz clic en Agregar volumen.
    3. En la lista Tipo de volumen, selecciona Directorio y haz lo siguiente:

      • En el campo Ruta de activación, especifica una ruta de activación en una estructura de directorio del contenedor en la que desees activar un directorio de host.
      • En el campo Ruta de acceso de host, especifica una ruta de acceso de host al directorio del host que deseas activar.
      • En la lista Modo, especifica si deseas activar el directorio en modo de lectura y escritura o de solo lectura.
    4. Para confirmar los detalles del contenedor, haz clic en Seleccionar.

  4. Continúa con el proceso de creación de VM.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Activaciones de volumen, haz clic en Agregar volumen.
    3. En la lista Tipo de volumen, selecciona TmpFS.
    4. En el campo Ruta de activación, especifica una ruta de activación en una estructura de directorio de contenedor en la que desees activar un volumen TmpFS.
    5. En la lista Modo, especifica si deseas activar el volumen TmpFS en modo de lectura y escritura o de solo lectura.
    6. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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. Ir a la página Crear una instancia

    Ir a Crear una instancia

  2. En la sección Contenedor, haz clic en Implementar contenedor.

  3. En la página Configurar contenedor, haz lo siguiente:

    1. Especifica un nombre de imagen de contenedor.
    2. En la sección Activaciones de volumen, haz clic en Agregar volumen.
    3. En la lista Tipo de volumen, selecciona Disco.
    4. En el campo Ruta de activación, especifica una ruta en la estructura de directorios del contenedor en la que deseas activar el disco persistente.
    5. En la lista Nombre del disco, selecciona un disco existente para activar.
    6. En el campo Partición, especifica el número de partición que se activará si el disco tiene una tabla de partición. Si el disco no tiene particiones, deja este campo en blanco.
    7. En la lista Modo, especifica si deseas activar el directorio en modo de lectura y escritura o de solo lectura.
    8. Para confirmar los detalles del contenedor, haz clic en Seleccionar.
  4. Continúa con el proceso de creación de VM.

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.

¿Qué sigue?