Los contenedores de software son una forma cómoda de ejecutar tus aplicaciones en varias instancias aisladas del espacio de usuario. Puedes ejecutar contenedores en imágenes de VM públicas de Linux o Windows Server, o en una imagen de Container-Optimized OS. Los contenedores permiten que tus aplicaciones se ejecuten con menos dependencias en la máquina virtual (VM) del host y de forma independiente a otras aplicaciones en contenedores que despliegues en la misma instancia de VM. Estas características hacen que las aplicaciones en contenedores sean más portátiles, fáciles de implementar y de mantener a gran escala.
En este documento se describen algunas de las tecnologías de contenedores más habituales que puedes usar para ejecutar contenedores en instancias de Compute Engine. Puedes usar estas tecnologías en la mayoría de las imágenes de máquinas virtuales públicas que proporciona Compute Engine.
Ejecuta contenedores en Compute Engine cuando necesites tener un control total sobre tu entorno de contenedores y tus herramientas de orquestación de contenedores.
También puedes usar Google Kubernetes Engine (GKE) para simplificar las tareas de gestión de clústeres y de orquestación de contenedores, de modo que no tengas que gestionar las instancias de VM subyacentes. GKE proporciona un entorno gestionado para desplegar, gestionar y escalar tus aplicaciones en contenedores mediante la infraestructura de Google.
El entorno de GKE consta de varias máquinas (en concreto, instancias de Compute Engine) agrupadas para formar un clúster. Cuando ejecutas un clúster de GKE, te beneficias de las funciones avanzadas de gestión de clústeres que ofrece Google Cloud , como el balanceo de carga, los grupos de nodos, la reparación automática de nodos, el escalado y las actualizaciones automáticas, y el registro y la monitorización.
Consulta cómo crear un clúster de GKE con grupos de nodos que ejecuten Microsoft Windows Server.
Pruébalo
Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.
Probar Compute Engine gratisTecnologías de contenedores que se ejecutan en Compute Engine
En general, las instancias de Compute Engine pueden ejecutar casi cualquier tecnología o herramienta de contenedores. Puedes ejecutar varios tipos de contenedores en sistemas operativos Linux modernos. También puedes ejecutar Docker en Windows Server 2016 o versiones posteriores. En la siguiente lista se incluyen varias herramientas habituales que puedes usar para ejecutar y gestionar aplicaciones en contenedores:
- Docker y Podman son dos tecnologías de contenedores populares que te permiten ejecutar aplicaciones en contenedores.
- Kubernetes es una plataforma de orquestación de contenedores que puedes usar para gestionar y escalar los contenedores en ejecución en varias instancias o en un entorno de nube híbrida.
- Contenedores en Compute Engine ofrecen una forma sencilla de desplegar contenedores en instancias de máquinas virtuales de Compute Engine o en grupos de instancias gestionados.
- Puedes convertir tus sistemas actuales en imágenes de LXD y ejecutarlos en instancias de máquina virtual de Compute Engine para disfrutar de una solución de migración lift-and-shift. LXD se ejecuta en imágenes de Ubuntu.
Además, puedes usar Artifact Registry para gestionar las versiones de las imágenes de contenedor. Artifact Registry es una ubicación central para almacenar y gestionar tus imágenes de contenedor antes de desplegarlas en Kubernetes en Compute Engine o en clústeres de Google Kubernetes Engine.
Imágenes de máquinas virtuales optimizadas para contenedores
Compute Engine ofrece varias imágenes de VM públicas que puedes usar para crear instancias y ejecutar tus cargas de trabajo de contenedores. Algunas de estas imágenes de VM públicas tienen un sistema operativo minimalista optimizado para contenedores que incluye versiones más recientes de Docker, Podman o Kubernetes preinstaladas. Las siguientes familias de imágenes públicas se han diseñado específicamente para ejecutar contenedores:
- Container-Optimized OS de Google
- Incluye: Docker, Kubernetes
- Proyecto de imagen:
cos-cloud
- Familia de imágenes:
cos-stable
- Fedora CoreOS
- Incluye: Podman, Docker
- Proyecto de imagen:
fedora-coreos-cloud
- Familia de imágenes:
fedora-coreos-stable
- Ubuntu
- Incluye: LXD
- Proyecto de imagen:
ubuntu-os-cloud
- Familia de imágenes:
ubuntu-2004-lts
Si necesitas ejecutar herramientas y tecnologías de contenedores específicas en imágenes que no las incluyan de forma predeterminada, instala esas tecnologías manualmente.
Instalar tecnologías de contenedores en tus instancias
Para iniciar un solo contenedor en una instancia, puedes especificar una imagen de contenedor al crear una instancia. Compute Engine proporciona automáticamente una imagen actualizada de Container-Optimized OS con Docker instalado e inicia el contenedor cuando se inicia la VM. Para obtener más información, consulta Implementar contenedores en VMs .
También puedes ejecutar tus cargas de trabajo de contenedores en Compute Engine con las tecnologías de contenedores y las herramientas de orquestación que necesites. Puedes crear una instancia a partir de una imagen de VM pública y, a continuación, instalar las tecnologías de contenedores que quieras. Por ejemplo:
- Instala Docker en instancias de Compute Engine para poder ejecutar tus imágenes de contenedor Docker en esas instancias.
- Instala Podman en instancias de Compute Engine como alternativa al tiempo de ejecución de contenedores de Docker.
- Instala Kubernetes en tus instancias para proporcionar orquestación de contenedores tanto para contenedores Docker como para contenedores Open Container Initiative (OCI).
En algunos casos, es posible que necesites versiones específicas de estas tecnologías para asegurarte de que funcionan correctamente juntas. Por ejemplo, Kubernetes suele funcionar mejor con versiones específicas de Docker. Por lo general, puedes instalar las versiones más recientes de estas tecnologías para obtener los mejores resultados.
Instalar Docker en imágenes de Windows Server
Windows Server 2016 y las versiones posteriores incluyen compatibilidad con contenedores. Si tienes previsto ejecutar contenedores Docker en una instancia de Windows Server, puedes instalar Docker en una imagen base de Windows Server o usar imágenes de Marketplace de Mirantis.
Si quieres instalar Docker CE en la imagen base de Windows Server, sigue los pasos que se indican a continuación.
Empieza creando una instancia de Windows Server con una imagen pública de Windows Server 2019 o una versión posterior. Para disfrutar de la mejor compatibilidad con contenedores, te recomendamos que uses la versión LTSC más reciente de Windows Server. Para obtener más información sobre LTSC, consulta Canales de mantenimiento de Windows Server.
Instalar Docker
Instala Docker en Windows. Para obtener más información, consulta Preparar Windows para contenedores. Reinicia la instancia una vez completada la instalación.
Pasos de configuración adicionales
En este punto, puedes usar Docker para ejecutar contenedores en la instancia. Por ejemplo, el siguiente comando descarga la imagen de contenedor de Windows nanoserver
y ejecuta un símbolo del sistema dentro de un contenedor nanoserver
:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
El MTU de red predeterminado de Docker es de 1500 bytes. Si también has configurado la MTU de tu red VPC en 1500 bytes, puedes ignorar el resto de esta sección. Sin embargo, si utilizas el valor predeterminado de MTU de VPC (1460 bytes) en tu red, debes realizar una configuración adicional en cada instancia.
Define el MTU de todas las interfaces de red (tanto Ethernet como vEthernet) en 1460
ejecutando los siguientes comandos en un terminal de PowerShell en cada instancia:
PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces MTU MediaSenseState Bytes In Bytes Out Interface ------ --------------- --------- --------- ------------- 4294967295 1 0 0 Loopback Pseudo-Interface 1 1460 1 306804 668688 Ethernet 1460 1 0 1282 vEthernet (nat)
Aunque cambies el MTU de la instancia, la conectividad de los contenedores a Internet puede ser inestable porque, de forma predeterminada, la interfaz de red del contenedor también usa un MTU de 1500
. Para ver los comandos que permiten definir el MTU correctamente en cada contenedor, consulta la sección MTU del contenedor.
Es posible que tengas que volver a ejecutar estos comandos de MTU periódicamente a medida que configures la red de Docker. Para obtener más información, consulta la sección Problemas conocidos.
Ejecutar contenedores de Windows
Hay muchos recursos disponibles para empezar a usar contenedores de Windows:
- Microsoft ofrece una amplia documentación sobre contenedores de Windows.
Docker Hub se puede usar como repositorio para almacenar y extraer contenedores de Windows.
Problemas conocidos con los contenedores de Windows
Retirada de las imágenes de Windows Server 2019 for Containers
Google ofrecía una familia de imágenes de Windows Server con Mirantis Container Runtime (anteriormente Docker EE) preinstalado:
- Windows
- Incluye: Docker
- Proyecto de imagen:
windows-cloud
- Familia de imágenes:
windows-2019-core-for-containers
A principios del 2023, Microsoft dejó de distribuir y admitir Mirantis Container Runtime para Windows Server. Aunque Google pudo seguir publicando esta familia de imágenes hasta el 30 de octubre del 2023, ahora está obsoleta y todas las imágenes de la familia se han marcado como obsoletas.
Las máquinas virtuales basadas en estas imágenes que se hayan creado antes del 30 de octubre del 2023 seguirán ejecutándose sin interrupciones. Sin embargo, después de esa fecha, no se podrán crear instancias a partir de esas imágenes.
Las imágenes personalizadas derivadas de estas imágenes antes del 30 de octubre del 2023 seguirán funcionando. Sin embargo, las imágenes personalizadas no recibirán automáticamente ninguna actualización de Windows del Patch Tuesday ni versiones actualizadas de Mirantis Container Runtime.
Si quieres seguir usando imágenes con Mirantis Container Runtime preinstalado, Mirantis Inc ofrece imágenes en Google Cloud Marketplace. El coste de estas imágenes de VM incluye la asistencia y las licencias para Mirantis Container Runtime directamente de Mirantis. Los clientes que quieran usar Mirantis Container Runtime de forma independiente también pueden descargarlo directamente desde el sitio web de Mirantis.
Si quieres migrar a un contenedor alternativo como Docker CE, sigue las instrucciones anteriores.
Los contenedores no son compatibles entre versiones de Windows
Los contenedores creados en versiones anteriores de Windows no funcionan en instancias de Compute Engine que ejecutan versiones más recientes de Windows. Docker extrae la versión de Windows Server 2019 de un contenedor de forma predeterminada. Esto significa que, si ejecutas el siguiente comando en una instancia que ejecuta Windows Server versión 1709 o posterior, se producirá un error:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe docker: Error response from daemon: container 9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101)
En la página de compatibilidad de versiones de contenedores de Windows de Microsoft encontrarás más información. Para evitar problemas de incompatibilidad con la versión del contenedor de Windows, especifica la etiqueta correspondiente a tu versión de Windows al extraer y ejecutar contenedores. Por ejemplo, en una instancia de Windows Server, versión 20H2, usa el siguiente comando para ejecutar un símbolo del sistema en el contenedor nanoserver
de la versión 20H2 en lugar del contenedor 2019 LTSC (1809) predeterminado:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
Las incompatibilidades de MTU afectan a la conectividad de instancias y contenedores
Cuando creas una red de contenedores en una instancia de Windows con los comandos docker
network create
o New-VMSwitch
, el MTU de la interfaz de red de la instancia se fuerza a 1500
. La interfaz de red predeterminada de un contenedor Docker nuevo también suele usar un MTU de 1500
.
Si tu red de VPC tiene una MTU de 1460
, es posible que tengas los siguientes problemas:
La sesión de RDP puede detenerse y es posible que no puedas volver a conectarte. Esto ocurre cuando se crea una red de contenedores transparente.
Es posible que la resolución de DNS dentro del contenedor falle.
La resolución de DNS se realiza correctamente, pero es posible que no se pueda establecer una conexión HTTP del contenedor a Internet.
La solución alternativa recomendada para estas limitaciones requiere dos pasos:
definir el MTU de las interfaces de red de la instancia en 1460
y definir el MTU de las interfaces de red del contenedor en 1460
. También puedes definir la MTU de la VPC en 1500
, pero para ello debes detener o migrar todas tus VMs.
1. Configurar la MTU de las interfaces de red de la instancia de Windows
Ejecuta el siguiente comando en un terminal de PowerShell en la instancia de Windows para definir la MTU de todas las interfaces de red (tanto Ethernet como vEthernet):
PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
Comprueba que los MTUs de las interfaces Ethernet y vEthernet de la instancia estén configurados en 1460
con este comando:
PS C:\> netsh interface ipv4 show subinterfaces MTU MediaSenseState Bytes In Bytes Out Interface ------ --------------- --------- --------- ------------- 4294967295 1 0 0 Loopback Pseudo-Interface 1 1460 1 628295912 2613170 Ethernet 1460 1 37793 223909 vEthernet (nat)
Si no puedes ejecutar estos comandos porque ya no puedes conectarte a una instancia mediante RDP, puedes conectarte a la instancia a través de la consola serie, iniciar un cmd
y ejecutar los comandos netsh
allí para reparar la MTU. Para no tener que hacerlo, te recomendamos que ejecutes los comandos docker network ...
o New-VMSwitch
como parte de una secuencia de comandos que también ejecute el comando de reparación de MTU.
2. Definir la MTU de las interfaces de red de contenedores de Windows
El MTU de un contenedor de Windows debe definirse mientras el contenedor está en ejecución, ya sea desde dentro del contenedor o desde la instancia que lo aloja. Si PowerShell está disponible en tu contenedor, puedes ejecutar este comando de forma interactiva o desde una secuencia de comandos en el contenedor para definir correctamente la MTU:
PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
También puedes ejecutar este comando en la instancia de Windows para definir la MTU de todos los contenedores en ejecución:
PS C:\> Get-NetIPInterface -IncludeAllCompartments |
Where-Object InterfaceAlias -like "vEthernet*" |
Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460
Los contenedores de Hyper-V no se inician
Los contenedores de Hyper-V no se admiten en Compute Engine en este momento.
Siguientes pasos
- Crea e inicia una instancia que puedas usar para ejecutar aplicaciones de contenedor.
- Consulta información sobre las instancias de Compute Engine.
- Consulta más información sobre Google Kubernetes Engine, que puedes usar para ejecutar tus contenedores en Google Cloud sin tener que gestionar las instancias de Compute Engine.
- Consulta más información sobre Kubernetes.
- Consulta cómo usar Artifact Registry para almacenar tus imágenes de contenedor de forma privada en Google Cloud.