Migrar contenedores que se hayan desplegado en máquinas virtuales durante la creación de la máquina virtual


El agente de inicio de contenedores de Compute Engine está obsoleto. Este agente te permite desplegar contenedores en instancias de Compute Engine al crear máquinas virtuales.

En este documento se describe cómo migrar los contenedores que el agente de inicio ha creado en tus VMs o grupos de instancias gestionados (MIGs) a otros servicios.Google Cloud

En función de tus requisitos, elige una de las siguientes opciones para migrar los contenedores que se hayan implementado en máquinas virtuales con el método obsoleto:

  • Si quieres seguir ejecutando contenedores en máquinas virtuales y MIGs individuales, usa secuencias de comandos de inicio o cloud-init.
  • Si tienes aplicaciones de contenedores sin reconocimiento del estado y trabajos pequeños o medianos, usa Cloud Run.
  • Si tu contenedor es un trabajo por lotes que tiene un estado final definido y requiere recursos informáticos adicionales, usa Lote.
  • Si necesitas un control y una escalabilidad avanzados, o si no puedes cumplir tus requisitos con las otras opciones, usa GKE en Google Cloud.

Para ver más casos prácticos y soluciones alternativas, consulta Comparar las opciones de implementación de contenedores.

Opciones obsoletas para configurar contenedores en máquinas virtuales

Cuando configuras un contenedor durante la creación de una VM, Compute Engine usa el agente de inicio del contenedor para leer los metadatos gce-container-declaration que almacenan la información del contenedor y para implementar el contenedor en la VM.

Las siguientes opciones para desplegar contenedores directamente en una VM o un MIG que usan el agente de inicio de contenedores y gce-container-metadata están obsoletas.

Consola

La opción Implementar contenedor de la página Crear una instancia ya no está disponible:

La opción Desplegar contenedor.

gcloud

Los siguientes comandos gcloud que configuran un contenedor en una VM o una plantilla de instancia están obsoletos:

Terraform

El módulo de Terraform gce-container y la clave de metadatos gce-container-declaration para configurar contenedores han quedado obsoletos.

Identificar instancias que usan los metadatos de contenedor obsoletos

Para determinar si alguna instancia de tu proyecto usa los metadatos de contenedor obsoletos, ejecuta el siguiente comando de la CLI de Google Cloud, que muestra las instancias con la clave y el valor de metadatos gce-container-declaration:

gcloud compute instances list --filter="metadata.items.key:gce-container-declaration"

Este comando proporciona una lista de todas las instancias de VM de tu proyecto configurado que contienen la clave de metadatos gce-container-declaration. La clave de metadatos identifica de forma única las VMs que están en el ámbito de la obsolescencia. Si usas varios proyectos, ejecuta este comando en todos los proyectos activos.

Si quieres validar una instancia específica, ejecuta el siguiente comando de la CLI de Google Cloud:

  gcloud compute instances describe VM_NAME --format="(metadata.items)"

Sustituye VM_NAME por el nombre de la instancia de VM que quieras validar.

Para obtener más información sobre cómo ver metadatos, consulta Ver y consultar metadatos.

Comparar las opciones de implementación de contenedores

En la siguiente tabla se resumen los casos prácticos para ejecutar contenedores en máquinas virtuales y se recomiendan soluciones de contenedores alternativas para migrar tus cargas de trabajo:

Casos prácticos Tipo de sustitución Coste Solución recomendada
  • Sigue ejecutando el contenedor en una VM o en un MIG.
  • No está tan familiarizado con las soluciones sin servidor o gestionadas.
  • Ejecuta el contenedor para realizar pruebas y tareas de desarrollo.
  • Tu carga de trabajo consta de una sola VM.
  • Ejecuta el contenedor en modo con privilegios.
  • Sustitución directa Sin coste adicional Usa secuencias de comandos de inicio para desplegar contenedores en máquinas virtuales.
  • Sigue ejecutando el contenedor en una VM o en un MIG.
  • Ejecutar varios contenedores en una sola máquina virtual.
  • Configurar escenarios avanzados en contenedores o máquinas virtuales.
    Por ejemplo, crear usuarios, importar archivos, montar discos o usar el modo con privilegios.
  • Tu carga de trabajo consta de varias VMs o MIGs.
  • Sustitución directa Sin coste adicional Usa cloud-init para ejecutar tareas durante el ciclo de vida de la VM.
    Ejecutar una tarea por lotes que tenga un estado final definido y requiera recursos informáticos adicionales. Servicio gestionado Depende de las características de tu carga de trabajo y de la complejidad de la configuración del contenedor. Batch
  • Ejecuta aplicaciones sin reconocimiento del estado.
  • Ejecuta trabajos de tamaño pequeño o mediano.
  • Servicio gestionado Solución de coste bajo o nulo para cargas de trabajo más pequeñas. Cloud Run
  • Ya tienes un clúster de GKE.
  • Necesitas un control avanzado y escalabilidad.
  • Servicio gestionado Depende de las características de la carga de trabajo y de la complejidad de la configuración del contenedor. Google Kubernetes Engine

    Cuando pases del agente de inicio de contenedores de Compute Engine a una solución alternativa, ten en cuenta los siguientes cambios obligatorios y el esfuerzo que puede suponer implementarlos:

    • VMs con Container-Optimized OS: toma el control total de la configuración, la seguridad y el mantenimiento de la VM y del entorno de ejecución del contenedor, lo que a menudo implica crear secuencias de comandos con secuencias de comandos de inicio o cloud-init.
    • Cloud Run o Batch: asegúrate de que tus aplicaciones no tengan estado y se ajusten al modelo de ejecución basado en solicitudes o en trabajos. Este enfoque puede implicar la adaptación de las aplicaciones para que funcionen con servicios externos de gestión de estados.
    • GKE adopta los principios de Kubernetes, define las cargas de trabajo mediante archivos de manifiesto de Kubernetes y gestiona los recursos del clúster.

    Usar secuencias de comandos de inicio para desplegar contenedores en máquinas virtuales

    Puedes ejecutar un contenedor básico en una VM mediante una secuencia de comandos de inicio.

    Ten en cuenta los siguientes puntos cuando uses una secuencia de comandos de inicio para configurar contenedores:

    • Puedes usar una secuencia de comandos de inicio en situaciones básicas. Para la configuración avanzada, te recomendamos que uses cloud-init.
    • Como vas a crear una máquina virtual con un contenedor configurado mediante la secuencia de comandos de inicio, debes planificar la transición de las cargas de trabajo implementadas en las máquinas virtuales actuales.
    • Prueba y asegúrate de que todo funciona correctamente antes de enrutar el tráfico a la máquina virtual recién creada con un contenedor.

    Para crear una VM y desplegar un contenedor en una VM o en un MIG, sigue estos pasos:

    1. Asignar el contenedor actual en los metadatos de la VM al comando de la secuencia de comandos de inicio
    2. Crear una secuencia de comandos de inicio a partir de la configuración de metadatos
    3. Crea una VM con la secuencia de comandos de inicio o crea un MIG con la secuencia de comandos de inicio.

    Asignar los metadatos de tu contenedor al comando docker run

    Puedes asignar los metadatos de la VM o las gcloud marcas a los argumentos docker run e incluirlos en tu secuencia de comandos de inicio para crear VMs.

    Algunas marcas de gcloud se traducen directamente a metadatos de la VM. Estas marcas también se traducen directamente a las marcas docker run. Si tienes un contenedor en una VM, puedes leer la configuración de los metadatos de la VM y crear una secuencia de comandos de inicio con los comandos docker run equivalentes.

      # Get your existing VM instance configuration in yaml format
      gcloud compute instances describe VM_NAME --format="(metadata.items)"
    

    El resultado debería ser similar al siguiente:

      metadata:
        items:
        - key: gce-container-declaration
          value: |
            spec:
              containers:
              - args:
                - '"hello world!"'
                command:
                - echo
                env:
                - name: ONE
                  value: '1'
                image: docker.io/library/busybox
                name: my-instance
                securityContext:
                  privileged: true
                stdin: true
                tty: true
              restartPolicy: Always
        - key: google-logging-enabled
          value: 'true'
    

    Usa la siguiente tabla para asignar las especificaciones a los comandos de docker run:

    Marca de Google Cloud CLI Clave de metadatos de máquina virtual Comando de ejecución de Docker
    --container-image containers.image Especifica como argumento sin ninguna marca.
    Por ejemplo:
    docker run gcr.io/google-containers/busybox
    --container-command command Especifica el argumento sin ninguna marca, después del nombre de la imagen del contenedor.
    Por ejemplo:
    docker run gcr.io/google-containers/busybox echo "hello world"
    --container-arg args Especifica el argumento sin ninguna marca, después del comando.
    Por ejemplo:
    docker run gcr.io/google-containers/busybox echo "hello world"
    --container-env containers.env array --env KEY=VALUE [--env KEY=VALUE ...]
    --container-restart-policy restartPolicy --restart
    Los valores posibles son no, on-failure y always. El valor predeterminado es no.
    --container-stdin containers.stdin -i
    Indicador booleano. Es true si está presente y false de forma predeterminada.
    --container-tty containers.tty -t
    Indicador booleano. Es true si está presente y false de forma predeterminada.
    --container-privileged containers.securityContext.privileged --privileged
    Indicador booleano. Es true si está presente y false de forma predeterminada.
    --container-mount-disk - No hay ningún comando docker run equivalente.
    Puedes montar el disco por separado.

    Ejemplos de secuencias de comandos de inicio

    En los siguientes ejemplos se muestra cómo incluir los comandos docker en tu script de inicio:

    • Ejemplo 1: ejecuta un contenedor independiente en una VM basada en Container-Optimized OS.
    • Ejemplo 2: ejecuta un contenedor de servidor web en una VM basada en Container-Optimized OS.

    Ejemplo 1

    Ejecuta un contenedor independiente en una VM basada en Container-Optimized OS:

    #!/bin/bash
    
    # A name for the container
    CONTAINER_NAME="my-app-container"
    
    # Stop and remove the container if it exists
    docker stop $CONTAINER_NAME || true
    docker rm $CONTAINER_NAME || true
    
    # Pull the latest version of the container image from Docker Hub
    docker pull busybox:latest
    
    # Run docker container from image in docker hub
    docker run busybox:latest \
      echo "hello world!"
    

    Ejemplo 2

    Ejecuta un contenedor de servidor web en una VM basada en Container-Optimized OS:

    #!/bin/bash
    
    # Enable incoming traffic
    iptables -A INPUT -j ACCEPT
    
    # A name for the container
    CONTAINER_NAME="my-app-container"
    
    # Stop and remove the container if it exists
    docker stop $CONTAINER_NAME || true
    docker rm $CONTAINER_NAME || true
    
    # Pull the latest version of the container image from Docker Hub
    docker pull nginx:latest
    
    # Run docker container from image in docker hub
    docker run \
      --name=$CONTAINER_NAME \
      --privileged \
      --restart=always \
      --tty \
      --detach \
      --network="host" \
      nginx:latest
    

    Opciones de configuración adicionales para la implementación de contenedores

    En esta sección se describen los parámetros de configuración adicionales para desplegar contenedores en tus máquinas virtuales.

    Para obtener más información sobre estas opciones, consulta el artículo Configurar opciones para ejecutar un contenedor.

    Acceso a imágenes de Artifact Registry

    Si necesitas acceder a imágenes de contenedor de gcr.io o pkg.dev, usa la herramienta docker-credential-gcr, que está preinstalada en Container-Optimized OS, y configura la autenticación en Artifact Registry para Docker. Ejecuta el siguiente comando antes de ejecutar el contenedor:

      # Set home directory to save docker credentials
      export HOME=/home/appuser
    
      # Configure docker with credentials for gcr.io and pkg.dev
      docker-credential-gcr configure-docker
    

    Para obtener más información, consulta Configurar la autenticación en Artifact Registry para Docker.

    Configurar el almacenamiento de registros

    Te recomendamos que uses Cloud Logging habilitando un agente de registro en una VM.

    Si quieres cambiar el controlador de registro, puedes incluir el parámetro --log-driver con el comando docker run:

      # Use Cloud Logging logging driver
      docker run --log-driver=gcplogs nginx:latest
    

    Para obtener más información, consulta el artículo Usar Cloud Logging con Container-Optimized OS.

    Configurar el cortafuegos interno

    Container-Optimized OS deniega el tráfico entrante de forma predeterminada, por lo que debe añadir reglas iptables para permitirlo. Ten en cuenta que estos comandos configuran el cortafuegos interno del sistema operativo del host. Además, debes configurar el cortafuegos de tu nube privada virtual para permitir que ese tráfico llegue a la nueva VM.

    Para obtener más información, consulta Usar reglas de cortafuegos de VPC.

      # Enable all incoming and routed traffic
      iptables -A INPUT -p -j ACCEPT
      iptables -A FORWARD -p -j ACCEPT
    

    Para obtener más información, consulta el artículo sobre cómo configurar el cortafuegos del host.

    Adjuntar volúmenes al contenedor

    Si hay volúmenes adjuntos al contenedor, los metadatos del contenedor incluyen la entrada volumes y una matriz volumeMounts. El name de una entrada de volumes corresponde al nombre de una entrada de volumeMounts, y viceversa. Por cada volumen que recoja, reúna la información necesaria de la entrada volumes o de la volumeMounts.

    Si no hay volúmenes conectados al contenedor, puedes saltarte esta sección y crear una VM directamente con la secuencia de comandos de inicio.

    Para obtener más información sobre los discos y el sistema de archivos de Container-Optimized OS, consulta el artículo Información general sobre los discos y el sistema de archivos.

    Montar el sistema de archivos tmpfs

    Para montar un sistema de archivos tmpfs vacío en un contenedor, especifica el argumento --tmpfs con el comando docker run. Por ejemplo, para montar un sistema de archivos de caché en tu contenedor de nginx, ejecuta el siguiente comando:

      # mount a cache file system to the nginx container
      docker run -d --name=$CONTAINER_NAME --tmpfs /var/cache/nginx:rw,size=512m,noexec,nosuid,nodev --network="host" nginx:latest
    

    Para obtener más información sobre el montaje de sistemas de archivos tmpfs, consulta Montajes de tmpfs.

    Montar un directorio de host

    Para montar un directorio de una VM host en un contenedor, especifica el argumento --mount con el comando docker run:

      # mount a read-only directory to the nginx container
      docker run -d --name=$CONTAINER_NAME --mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,ro nginx:latest
    

    Para obtener más información, consulta Montajes de enlace.

    Montar un disco persistente en el contenedor

    Para activar un disco en el contenedor, debes seguir unos pasos adicionales. Para montar un disco, primero móntalo en la VM y, a continuación, móntalo en el contenedor:

    1. Para montar el disco en la VM, ejecuta el siguiente comando:

      #!/bin/bash
      
      DISK_DEVICE_NAME="my-persistent-disk" # This name MUST match the 'device-name' in the gcloud --disk flag
      DISK_BY_ID_PATH="/dev/disk/by-id/google-${DISK_DEVICE_NAME}"
      HOST_MOUNT_POINT="/mnt/disks/my-persistent-disk" # This is the path where the disk will be mounted on the VM
      CONTAINER_MOUNT_PATH="/usr/share/my-persistent-disk" # This is the path where the disk will be mounted in the container
      
      # format a disk as an ext4 filesystem, if it doesn't already contain one
      file -sL $DISK_BY_ID_PATH | grep -q filesystem || \
              mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_BY_ID_PATH
      
      # create a directory for mounting point
      sudo mkdir -p "${HOST_MOUNT_POINT}"
      
      # mount a disk to the VM
      sudo mount -o defaults,discard "${DISK_BY_ID_PATH}" "${HOST_MOUNT_POINT}"
      
    2. Después de montar el disco en la VM, añade la marca --mount con el comando docker run para montar el disco en el contenedor:

      docker run -d --name=$CONTAINER_NAME --mount type=bind,source="${HOST_MOUNT_POINT}",target="${CONTAINER_MOUNT_PATH}",readonly nginx:latest
      

    Crear una VM mediante la secuencia de comandos de inicio

    Después de crear una secuencia de comandos de inicio con la configuración de tu contenedor, úsala para crear una VM basada en Container-Optimized OS. Para obtener más información sobre cómo crear una VM basada en Container-Optimized OS, consulta Crear una instancia a partir de una imagen pública.

    Para obtener más información sobre cómo usar secuencias de comandos de inicio, consulta el artículo Usar secuencias de comandos de inicio en máquinas virtuales de Linux.

    Consola

    1. En la Google Cloud consola, ve a la página Crear una instancia.

      Ir a Crear una instancia

      Si se te solicita, selecciona tu proyecto y haz clic en Continuar. Aparecerá la página Crear una instancia y se mostrará el panel Configuración de la máquina.

    2. En el panel Configuración de la máquina, selecciona la familia y el tipo de máquina de tu VM.

    3. En el menú de navegación, haz clic en SO y almacenamiento. En el panel Sistema operativo y almacenamiento que aparece, configura el disco de arranque haciendo lo siguiente:

      1. Haz clic en Cambiar. Aparece el panel Disco de arranque y se muestra la pestaña Imágenes públicas.
      2. En la lista Sistema operativo, selecciona Container-Optimized OS.
      3. En la lista Versión, selecciona la versión del SO.
      4. En la lista Tipo de disco de arranque, selecciona el tipo de disco de arranque.
      5. (Opcional) Si necesitas discos adicionales, añádelos en la sección Discos adicionales.
      6. Haz clic en Seleccionar.
    4. En el menú de navegación, haz clic en Opciones avanzadas.

      1. En la sección Automatización, pega la secuencia de comandos de inicio que has creado para la implementación del contenedor.
    5. Para crear e iniciar la VM, haz clic en Crear.

    gcloud

    Cuando uses la CLI de gcloud, almacena una secuencia de comandos de inicio en un archivo independiente.

    1. Para crear una VM mediante una secuencia de comandos de inicio, ejecuta el siguiente comando:

      gcloud compute instances create VM_NAME \
          --zone=ZONE \
          --image-family=IMAGE_FAMILY \
          --image-project=IMAGE_PROJECT \
          --machine-type=MACHINE_TYPE \
          --metadata-from-file=startup-script=STARTUP_SCRIPT_FILE
      

      Haz los cambios siguientes:

      • VM_NAME: name de la nueva VM.
      • ZONE: zona en la que se creará la instancia.
      • IMAGE_PROJECT: el proyecto de imagen de Container-Optimized OS que contiene la imagen, por ejemplo, cos-cloud.
      • IMAGE_FAMILY: la familia de imágenes de Container-Optimized OS. Por ejemplo, cos-stable.
      • MACHINE_TYPE: tipo de máquina de la nueva VM, que puede ser un tipo de máquina predefinido o un tipo de máquina personalizado.
      • STARTUP_SCRIPT_FILE: la ruta relativa de tu máquina al archivo del script de inicio. Por ejemplo, ./startup_script.sh.

      Ejemplo:

      # Create COS-based VM by using a startup script
      gcloud compute instances create "cos-instance-with-startup-script" \
      --zone="us-central1-c" \
      --machine-type="e2-medium" \
      --image-family="cos-stable" \
      --image-project="cos-cloud" \
      --metadata-from-file=startup-script="./startup_script.sh"
      
    2. Para comprobar que Compute Engine ha creado la VM, ejecuta el siguiente comando:

      gcloud compute instances describe VM_NAME
      

      Sustituye VM_NAME por el nombre de la VM que has creado.

    Terraform

    Para crear una VM, puedes usar el google_compute_instance recurso.

    provider "google" {
    project = "PROJECT_ID"
    }
    
    resource "google_compute_instance" "cos_vm_instance" {
    name         = "VM_NAME"
    machine_type = "MACHINE_TYPE"
    zone         = "ZONE"
    
    # Use a Container-Optimized OS image for the boot disk
    boot_disk {
      initialize_params {
        image = "IMAGE_PROJECT/IMAGE_FAMILY"
      }
    }
    
    # Attaches the instance to the default network
    network_interface {
      network = "default"
    }
    
    # Specify the relative path to the startup script on your local machine
    metadata = {
      startup-script = file("STARTUP_SCRIPT_FILE")
    }
    }
    

    Haz los cambios siguientes:

    • VM_NAME: nombre de la nueva VM
    • ZONE: zona en la que se creará la instancia.
    • IMAGE_PROJECT: el proyecto de imagen de Container-Optimized OS que contiene la imagen, por ejemplo, cos-cloud.
    • IMAGE_FAMILY: la familia de imágenes de Container-Optimized OS, por ejemplo, cos-stable.
    • MACHINE_TYPE: tipo de máquina de la nueva VM, que puede ser un tipo de máquina predefinido o un tipo de máquina personalizado.
    • STARTUP_SCRIPT_FILE: la ruta relativa de tu máquina al archivo del script de inicio, por ejemplo, ./startup_script.sh.

    Ejemplo:

    provider "google" {
      project = "my-project"
    }
    
    resource "google_compute_instance" "my_container_vm" {
      name = "my-container-vm-startup"
      machine_type = "e2-medium"
      zone = "us-central1-a"
    
      boot_disk {
        initialize_params {
          image = "cos-cloud/cos-stable"
        }
      }
    
      network_interface {
        network = "default"
      }
    
      metadata = {
        startup-script = file("./startup_script.sh")
      }
    }
    

    Crear un MIG con la secuencia de comandos de inicio

    Después de crear una plantilla de instancia con la secuencia de comandos de inicio, usa uno de los siguientes métodos para crear un MIG.

    Para obtener más información sobre cómo crear MIGs, consulta Crear un grupo de instancias gestionado.

    Consola

    1. Crea una plantilla de instancia basada en la secuencia de comandos de inicio que has creado en la sección anterior.

      1. En la sección Sistema operativo, selecciona un sistema operativo optimizado para contenedores y una versión.
      2. En la sección Automatización, pega la secuencia de comandos de inicio que has creado para la implementación del contenedor.
    2. Crea un MIG con la plantilla de instancia que has creado en el paso anterior.

    gcloud

    1. Crea una plantilla de instancia con el comando instance-templates create.

      Debes usar una imagen de Container-Optimized OS para la VM. Puedes especificar la ruta relativa al archivo de la secuencia de comandos de inicio en la marca --metadata-from-file.

    2. Crea un MIG con la plantilla de instancia que has creado en el paso anterior.

    Ejemplo:

      # Create the instance template that uses a startup script
      gcloud compute instance-templates create startup-template \
          --machine-type=e2-medium \
          --image-family=cos-stable \
          --image-project=cos-cloud \
          --metadata-from-file=startup-script=./startup_script.sh
    
      # Create the managed instance group
        gcloud compute instance-groups managed create startup-mig \
          --template=startup-template \
          --size=2 \
          --zone=us-central1-a
    

    Terraform

    Usa los recursos google_compute_instance_template y google_compute_instance_group_manager para crear una plantilla de instancia y un MIG, tal como se muestra en el siguiente ejemplo:

    Ejemplo:

    resource "google_compute_instance_template" "startup_template" {
      name_prefix = "startup-template-"
      machine_type = "e2-medium"
      disk {
        source_image = "cos-cloud/cos-stable"
        auto_delete  = true
        boot         = true
      }
    
      network_interface {
        network = "default"
      }
      metadata = {
        startup-script = file("./startup_script.sh")
    }
    }
    
    resource "google_compute_instance_group_manager" "startup_mig" {
      name               = "startup-mig"
      base_instance_name = "startup-vm"
      zone               = "us-central1-a"
      version {
        instance_template = google_compute_instance_template.startup_template.id
      }
      target_size = 2
    }
    

    Probar y limpiar

    Después de crear correctamente una VM o un MIG, comprueba que tu aplicación se ejecuta en el contenedor y funciona según lo previsto. Para solucionar cualquier problema, consulta la sección Solución de problemas.

    Si la aplicación se ejecuta correctamente en las nuevas VMs creadas con la secuencia de comandos de inicio, puedes eliminar las VMs y los MIGs que usen el método obsoleto de desplegar contenedores.

    Solucionar problemas con las secuencias de comandos de inicio

    En esta sección se proporciona información para solucionar problemas que pueden surgir al usar secuencias de comandos de inicio.

    No se puede guardar la configuración de Docker

    Cuando ejecutas el comando docker-credential-gcr configure-docker en una secuencia de comandos de inicio, es posible que recibas el siguiente mensaje de error:

    ERROR: Unable to save docker config: mkdir /root/.docker: read-only file system

    Este error se produce porque docker-credential-gcr intenta escribir credenciales en el archivo /root/.docker/config.json. El sistema de archivos root de Container-Optimized OS es de solo lectura, por lo que no puedes escribir en él.

    Para solucionar este problema, asigna a la variable de entorno $HOME un directorio principal personalizado antes de ejecutar los comandos docker.

    Ejemplo:

      export HOME=/home/appuser
      docker-credential-gcr configure-docker
      

    Ver registros para depurar problemas

    Para solucionar los problemas que puedan surgir al configurar contenedores en máquinas virtuales mediante una secuencia de comandos de inicio, consulta los registros de la secuencia de comandos de inicio y los registros de los contenedores.

    • Para ver los registros de la secuencia de comandos de inicio en la instancia de VM, ejecuta el siguiente comando:

      sudo journalctl | grep "startup-script"
      
    • Para ver los registros del contenedor Docker, ejecuta el comando docker logs:

      docker logs CONTAINER_NAME
      

      Sustituye CONTAINER_NAME por el nombre de tu contenedor.

    Para solucionar otros problemas, consulta los siguientes documentos:

    Usar cloud-init con Container-Optimized OS

    Puedes usar cloud-init, una solución multiplataforma estándar del sector, para desplegar contenedores en VMs que ejecuten Container-Optimized OS. Esta herramienta te permite ejecutar una configuración personalizada durante la creación o el inicio de la VM. Para obtener más información, consulta Usar cloud-init con el formato de configuración de Cloud.

    Usar servicios gestionados para el despliegue de contenedores

    En esta sección se describen los servicios gestionados que ofrece Google Cloud y que puedes usar para desplegar contenedores.

    Cloud Run

    Cloud Run es una buena opción para aplicaciones de contenedores sin reconocimiento del estado y tareas de pequeño y mediano tamaño.

    Estas son algunas de las funciones principales de Cloud Run:

    • Puedes elegir si quieres asignar CPUs solo durante el procesamiento de solicitudes o si quieres asignarlas siempre.
    • Puedes ejecutar una aplicación de contenedor sin estado o una tarea de forma puntual, según una programación o como parte de un flujo de trabajo.
    • Puedes configurar tiempos de espera para cada solicitud o tarea.
    • Es altamente escalable y seguro.
    • Tiene balanceo de carga y autoescalado integrados.

    Para obtener más información sobre cómo desplegar contenedores en Cloud Run, consulta Desplegar imágenes de contenedor en Cloud Run.

    Lotes

    Batch es un servicio totalmente gestionado que te permite programar, poner en cola y ejecutar cargas de trabajo de procesamiento por lotes en Google Cloud recursos. Está diseñada para ejecutar cargas de trabajo paralelas de estilo por lotes, incluidas las empaquetadas en contenedores.

    Para obtener más información sobre cómo implementar contenedores en Batch, consulta los siguientes documentos:

    Google Kubernetes Engine

    Si ejecutas aplicaciones complejas, microservicios y operaciones continuas, y necesitas un control y una escalabilidad precisos, Google Kubernetes Engine (GKE) es la oferta más adecuada. Para obtener más información sobre cómo desplegar contenedores en GKE, consulta los siguientes documentos:

    Obtener asistencia

    Si tienes alguna pregunta sobre el proceso de migración o necesitas ayuda, consulta las preguntas frecuentes o ponte en contacto con el equipo de Asistencia deGoogle Cloud .