Puedes ejecutar un solo contenedor en una VM o en cada VM de un grupo de instancias gestionado (MIG). Para ello, especifica una imagen de contenedor y los parámetros de configuración cuando crees una instancia de VM o una plantilla de instancia.
En este documento se describen las opciones de configuración para ejecutar contenedores en instancias de Compute Engine.
Antes de empezar
- Si no tienes experiencia con los contenedores, consulta el artículo Contenedores en Compute Engine.
- Si no conoces Docker, consulta su documentación.
- Consulta información sobre cómo desplegar contenedores en Compute Engine.
-
Si aún no lo has hecho, configura la autenticación.
La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:
gcloud init
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
- Set a default region and zone.
Cuando crees una instancia o una plantilla de instancia para desplegar contenedores en máquinas virtuales y grupos de instancias gestionados, especifica la configuración del contenedor mediante la consola de Google Cloud o la CLI de Google Cloud.
En las siguientes secciones se describe cómo configurar contenedores en instancias de VM, pero también puede configurar las siguientes opciones al crear una plantilla de instancia. Usa la Google Cloud consola o la CLI de Google Cloud para configurar las opciones de las instancias de VM en una plantilla de instancia.
Puedes usar los comandos
docker run
para configurar un contenedor en una instancia de VM que ejecute Container-Optimized OS o especificar el comandodocker run
en una secuencia de comandos de inicio para crear y configurar una VM. Para obtener más información, consulta Usar secuencias de comandos de inicio para desplegar contenedores en VMs.Especificar una política de reinicio
Puedes definir una política de reinicio para especificar si se debe reiniciar un contenedor al salir. La política predeterminada es reiniciar siempre. También puedes configurar la política para que se reinicie si falla o para que no se reinicie nunca.
docker run
Usa la marca
--restart
del comandodocker run
. Los intentos repetidos de reiniciar un contenedor se deben al comportamiento predeterminado de Docker, tal como se especifica en la referencia de Docker--restart
.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Política de reinicio, seleccione la política de reinicio del contenedor.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-restart-policy
para especificar una 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 se produce cuando el código de salida del contenedor es distinto de 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 de un contenedor que se ejecuta en una VM.Ejecutar un contenedor en modo con privilegios
Puedes ejecutar un contenedor en modo con privilegios para permitir el acceso a todos los dispositivos del host. Los contenedores se ejecutan como "sin privilegios" de forma predeterminada y no tienen permiso para acceder a ningún dispositivo.
docker run
Usa la marca
--privileged
del comandodocker run
. Para obtener más información, consulta Privilegios de tiempo de ejecución y funciones de Linux.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- Selecciona Ejecutar como privilegiado.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-privileged
para ejecutar un contenedor con privilegios de tiempo 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 con privilegios.Asignación de 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 para mantener el flujo deSTDIN
abierto en un contenedor. Si no se define, las lecturas deSTDIN
en el contenedor siempre dan como resultadoEOF
.Además de asignar un pseudo-TTY, es necesario mantener abierto el flujo
STDIN
para establecer un shell interactivo en el contenedor y para que el contenedor reciba su entrada estándar de una tubería.docker run
Usa la marca
--interactive
(-i
) del comandodocker run
. Para obtener más información, consulta la documentación de la marca--interactive
.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- Selecciona Asignar un búfer a STDIN.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-stdin
para asignar un búfer aSTDIN
en el entorno de ejecución del contenedor. En el siguiente ejemplo se inicia un contenedor y se mantiene abierto suSTDIN
: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
para desactivar la asignación de un búfer paraSTDIN
.Asignación de un pseudo-TTY
Es necesario asignar un pseudo-TTY a un contenedor para establecer un shell interactivo en el contenedor (junto con la asignación de un búfer para STDIN).
docker run
Usa la marca
--tty (-t)
del comandodocker run
. Para obtener más información, consulta la marca--tty
.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- Selecciona Asignar un pseudo-TTY.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la 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
para no asignar un pseudo-TTY.Anular el comando predeterminado que se ejecuta al iniciar el contenedor
El
ENTRYPOINT
de una imagen de contenedor especifica qué ejecutable se debe ejecutar cuando se inicia el contenedor y te permite ejecutar el contenedor como si fuera ese archivo binario.Puedes anular el comando
ENTRYPOINT
de la imagen del contenedor.docker run
Usa la marca
--entrypoint
(solo el comando, sin argumentos) del comandodocker run
. Consulta información sobreENTRYPOINT
y la marca--entrypoint
.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En el campo Comando, introduce un solo comando ejecutable sin parámetros (por ejemplo,
uptime
). - Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-command
para anular la imagen del contenedorENTRYPOINT
. En el siguiente ejemplo se ejecuta el comandouptime
en un contenedor de busybox para mostrar el tiempo transcurrido desde el último arranque: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
para actualizar un comando de un contenedor en una VM.Usa la marca
--clear-container-command
con el comandoupdate-container
para borrar el comando predeterminado del contenedor actualizado.Transferir argumentos al comando ENTRYPOINT del contenedor
Puedes transferir (añadir) argumentos al contenedor
.ENTRYPOINT
o anular el comando predeterminado del contenedorCMD
.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Argumentos, haz clic en Añadir argumento.
- Introduce un argumento de comando en cada cuadro.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-arg
para transferir argumentos a un comando de imagen de contenedorENTRYPOINT
. Usa un indicador independiente para cada argumento.En el siguiente ejemplo, se ejecuta el comando
/bin/ash
con los argumentos-c 'ls -l'
en un contenedor que se ha configurado para ejecutar busybox automáticamente: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 un contenedor que se esté ejecutando en una VM. La actualización sustituye toda la lista de argumentos por la nueva.Usa la marca
--clear-container-args
con el comandoupdate-container
para quitar todos los argumentos de la declaración del contenedor.Configurar las opciones del controlador de registro
Si necesitas configurar las opciones del controlador de registro, puedes crear un script de inicio de la VM para actualizar el archivo de configuración de Docker con las opciones de registro que necesites. Estas opciones se aplican a todos los contenedores que se ejecutan en la máquina virtual y que no especifican opciones de controlador de registro.
Por ejemplo, la siguiente secuencia de comandos de inicio define varias opciones, incluida una opción para limitar el tamaño del registro del contenedor, y, a continuación, 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
Configurar variables de entorno
Puedes definir variables de entorno en un contenedor. Solo se tiene en cuenta el último valor de
KEY
cuandoKEY
se repite más de una vez.docker run
Usa la marca
--env
del comandodocker run
. Consulta cómo el motor de Docker permite definir variables de entorno.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Variables de entorno, haga clic en Añadir variable.
- Añade o elimina variables de entorno según sea necesario (una por línea).
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-env
para definir variables de entorno en un contenedor. En el siguiente ejemplo se definen tres variables de entorno:HOME
,MODE
yOWNER
: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 definir variables de entorno desde un archivo local. En el siguiente ejemplo se definen las dos variables de entorno del archivoenv.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 el siguiente:# 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
para actualizar las variables de entorno de un contenedor en una VM. De esta forma, se actualizan las variables presentes en la declaración del contenedor de la instancia de VM. Se añaden las variables que no están en la declaración del contenedor.Usa la marca
--remove-container-env
para quitar variables de entorno al actualizar un contenedor en una VM. En el siguiente ejemplo se eliminan las variables de entorno llamadasMODE
yOWNER
:gcloud compute instances update-container busybox-vm \ --remove-container-env MODE,OWNER
Si una variable de entorno especificada no existe, se ignora de forma silenciosa.
Montar un directorio de host como volumen de datos
Puedes montar un directorio de una máquina virtual host en un contenedor.
docker run
Usa las marcas
--volume
y--mount
con el montajetype=bind
del comandodocker run
. Consulta cómo monta un directorio de host el motor de Docker como volumen de datos.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Montajes de volúmenes, haz clic en Añadir volumen.
En la lista Tipo de volumen, selecciona Directorio y haz lo siguiente:
- En el campo Ruta de montaje, especifica una ruta de montaje en una estructura de directorios de un contenedor en la que se montará un directorio de host.
- En el campo Ruta del host, especifica una ruta del host al directorio del host que se va a montar.
- En la lista Modo, especifica si quieres montar el directorio en modo de lectura/escritura o de solo lectura.
Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-mount-host-path
para montar un directorio de una máquina virtual host en un contenedor. En el siguiente ejemplo, se monta el directorio host/tmp
en el contenedor en/logs
en modo de lectura/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 montar 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 los montajes de directorios de host en un contenedor. Usa la marca--remove-container-mounts
para quitar los volúmenes montados con las rutas de montaje especificadas. En el siguiente ejemplo se elimina un montaje de ruta de host conmount-path=/logs
:gcloud compute instances update-container busybox-vm \ --remove-container-mounts /logs
Si la ruta de activación especificada no existe, se ignora de forma silenciosa.
Montar el sistema de archivos tmpfs como volumen de datos
Puedes montar un sistema de archivos tmpfs vacío en un contenedor.
Un sistema de archivos tmpfs vacío es similar a un volumen
EmptyDir
de Google Kubernetes Engine conmedium:Memory
. A diferencia de Docker, donde los datos detmpfs
se eliminan al reiniciar el contenedor, contmpfs
en un contenedor de Compute Engine, el volumen y sus datos se conservan al reiniciar el contenedor y solo se eliminan al reiniciar la VM.Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Montajes de volúmenes, haz clic en Añadir volumen.
- En la lista Tipo de volumen, selecciona TmpFS.
- En el campo Ruta de montaje, especifica una ruta de montaje en una estructura de directorio de contenedor en la que quieras montar un volumen de TmpFS.
- En la lista Modo, especifica si quieres montar el volumen de TmpFS en modo de lectura/escritura o de solo lectura.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa la marca
--container-mount-tmpfs
para montar un sistema de archivostmpfs
vacío en un contenedor. En el siguiente ejemplo se monta un sistema de archivostmpfs
en el contenedor en/cache
en modo de lectura/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 los montajes detmpfs
en un contenedor. Usa la marca--remove-container-mounts
para quitar un montaje detmpfs
con la ruta de montaje especificada al actualizar. En el siguiente ejemplo se elimina el montaje detmpfs
conmount-path=/cache
:gcloud compute instances update-container busybox-vm \ --remove-container-mounts /cache
Si la ruta de activación especificada no existe, se ignora de forma silenciosa.
Montar un disco persistente como volumen de datos
Con Container-Optimized OS 69 o una versión posterior, puedes montar discos persistentes de una VM host en un contenedor.
Requisitos previos
- El disco debe tener un sistema de archivos
ext4
o no tener ninguno. Si no hay ningún sistema de archivos inicial, el agente de inicio del contenedor formatea el disco enext4
y solo se admiten la adjunción y el montaje de lectura/escritura. - El disco debe estar vinculado a la VM.
Se admiten tanto dispositivos sin particiones como particiones. En el caso de los montajes de particiones, el disco no puede estar en blanco, sino que debe contener una tabla de particiones.
Consola
Ve a la página Crear una instancia.
En la sección Contenedor, haga clic en Implementar contenedor.
En la página Configurar contenedor, haga lo siguiente:
- Especifica un nombre de imagen de contenedor.
- En la sección Montajes de volúmenes, haz clic en Añadir volumen.
- En la lista Tipo de volumen, selecciona Disco.
- En el campo Ruta de montaje, especifica una ruta en la estructura de directorios del contenedor donde quieras montar el disco persistente.
- En la lista Nombre del disco, selecciona un disco que ya tengas para montarlo.
- En el campo Partición, especifica el número de partición que quieres montar si el disco tiene una tabla de particiones. Si el disco no tiene particiones, deja este campo en blanco.
- En la lista Modo, especifica si quieres montar el directorio en modo de lectura/escritura o de solo lectura.
- Para confirmar los detalles del contenedor, haz clic en Seleccionar.
Continúa con el proceso de creación de la VM.
gcloud
Usa el comando
gcloud compute instances create-with-container
o el comandogcloud compute instances update-container
con la marca--container-mount-disk
para montar un disco persistente en un contenedor.En el siguiente ejemplo se montan dos discos,
my-data-disk
ymy-scratch-disk
, en el contenedor en las rutas de montaje/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
adjuntamy-data-disk
, la marca--create-disk
crea y adjuntamy-scatch-disk
, y la marca--container-mount-disk
monta los discos adjuntos en el contenedor. Como no se ha especificado ningúnmode
paramy-scratch-disk
, ese disco se monta en el contenedor en modo de lectura/escritura de forma predeterminada.Usa el comando
gcloud compute instances update-container
con la marca--container-mount-disk
para montar discos adicionales conectados o para modificar los montajes de discos que ya tengas.Usa la marca
--remove-container-mounts
para quitar el montaje de un volumen de disco con la ruta de montaje especificada. En el siguiente ejemplo se cambia el modo de montaje demy-data-disk
a lectura/escritura y se elimina el montaje del disco conmount-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 pasas a la marca
--remove-container-mounts
no existe, se ignora de forma silenciosa.Publicar puertos de contenedores
Las VMs 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 los contenedores se asignan de forma individual a los puertos de la máquina virtual host. Por ejemplo, el puerto 80 de un contenedor se asigna al puerto 80 de la VM host. Compute Engine no admite la marca de publicación de puertos (
-p
), por lo que no es necesario especificarla para que la asignación funcione.Para publicar los puertos de un contenedor, configura reglas de cortafuegos para habilitar el acceso a los puertos de la VM host. Los puertos correspondientes del contenedor son accesibles automáticamente, según las reglas del cortafuegos.
Ejemplo: Publicar el puerto 80 de un contenedor NGINX
docker run
Configura la marca
--network="host"
al usar el comandodocker run
. Consulta más información sobre los ajustes de red de contenedores y el modo de anfitrión.gcloud
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.
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 host y el puerto 80 del contenedor se publica en el puerto 80 de la VM host. La etiqueta
http-server
se usa como etiqueta de destino de la regla de firewall, que se crea en el siguiente paso.Crea una regla de cortafuegos para habilitar las conexiones al puerto 80 de la instancia de VM. La siguiente regla de cortafuegos permite las conexiones HTTP a las instancias de VM con la etiqueta
http-server
.gcloud compute firewall-rules create allow-http \ --allow tcp:80 --target-tags http-server
El contenedor empieza a recibir tráfico automáticamente en el puerto 80. No tienes que hacer ninguna configuración adicional.
Puedes crear reglas de cortafuegos para combinaciones de protocolo y puerto de la VM host en las que el protocolo sea
tcp
oudp
. Estas reglas rigen el acceso desde fuera de la VM a los puertos de contenedor correspondientes.
Siguientes pasos
- Consulta cómo desplegar contenedores Docker en Compute Engine.
- Consulta información sobre Container-Optimized OS.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-12 (UTC).
-