Los contenedores de software son una forma conveniente 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 apps se ejecuten con menos dependencias en la máquina virtual (VM) del host y se ejecuten de forma independiente de otras apps en contenedores que implementes en la misma instancia de VM. Estas características hacen que las apps en contenedores sean más portátiles y más fáciles de implementar y de mantener a gran escala.
En este documento, se describen algunas de las tecnologías de contenedor más comunes que se pueden usar para ejecutar contenedores en instancias de Compute Engine. Estas tecnologías se pueden usar en la mayoría de las imágenes públicas de VM que proporciona Compute Engine.
Ejecuta contenedores en Compute Engine cuando necesites el control total del entorno de contenedores y las herramientas de organización de contenedores.
Como alternativa, puedes usar Google Kubernetes Engine (GKE) para simplificar la administración de clústeres y las tareas de organización de contenedores, de modo que no necesites administrar las instancias de VM subyacentes. GKE proporciona un entorno administrado para implementar, administrar y escalar las aplicaciones alojadas en contenedores mediante la infraestructura de Google.
El entorno de GKE consta de varias máquinas (en particular, instancias de Compute Engine) que se agrupan para formar un clúster. Cuando ejecutas un clúster de GKE, obtienes las ventajas de las funciones avanzadas de administración de clústeres, como el balanceo de cargas, los grupos de nodos, la reparación automática de nodos, el ajuste de escala automático y las actualizaciones, y el registro y la supervisión que Google Cloud proporciona.
Obtén información para crear un clúster de GKE con grupos de nodos que ejecuten Microsoft Windows Server.
Pruébalo tú mismo
Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
Probar Compute Engine gratisTecnologías de contenedores que se ejecutan en Compute Engine
En general, en las instancias de Compute Engine puede ejecutarse casi cualquier tecnología o herramienta de contenedor. Puedes ejecutar varios tipos diferentes de contenedores en los sistemas operativos Linux modernos. También puedes ejecutar Docker en Windows Server 2016 o en una versión posterior. En la lista siguiente, se incluyen varias herramientas comunes que puedes usar para ejecutar y administrar aplicaciones en contenedores:
- Docker y Podman son dos tecnologías de contenedores populares que te permiten ejecutar apps en contenedores.
- Kubernetes es una plataforma de organización de contenedores que puede usarse para administrar y escalar contenedores en ejecución en varias instancias o dentro de un entorno de nube híbrida.
- Los contenedores en Compute Engine proporcionan una manera fácil de implementar contenedores en instancias de VM o grupos de instancias administrados de Compute Engine.
- Puedes convertir tus sistemas existentes en imágenes LXD y ejecutar estas imágenes dentro de instancias de VM de Compute Engine para una solución de migración lift-and-shift. LXD se ejecuta en imágenes de Ubuntu.
Además, puedes usar Artifact Registry para administrar las versiones de imagen de contenedor. Artifact Registry sirve como ubicación central para almacenar y administrar tus imágenes de contenedor antes de implementarlas en Kubernetes, en Compute Engine o en clústeres de Google Kubernetes Engine.
Imágenes de VM optimizadas para contenedores
Compute Engine proporciona varias imágenes de VM públicas que puedes usar para crear instancias y ejecutar las 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 nuevas de Docker, Podman o Kubernetes preinstaladas. Las siguientes familias de imágenes públicas están diseñadas 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 contenedor específicas en imágenes que no las incluyen de manera predeterminada, instala esas tecnologías de forma manual.
Instala tecnologías de contenedor en las instancias
Para iniciar un solo contenedor en una instancia, puedes especificar una imagen de contenedor cuando creas una instancia. Compute Engine proporciona de forma automática una imagen actualizada de Container-Optimized OS con Docker instalado y, luego, inicia el contenedor cuando se inicia la VM. Si deseas obtener más información, consulta la sección para implementar contenedores en VM.
Como alternativa, puedes ejecutar las cargas de trabajo de contenedor en Compute Engine mediante las tecnologías de contenedor y las herramientas de organización que necesites. Puedes crear una instancia desde una imagen de VM pública y, luego, instalar las tecnologías de contenedor que desees. Por ejemplo:
- Instala Docker en las instancias de Compute Engine para poder ejecutar las imágenes de contenedor de Docker en esas instancias.
- Instala Podman en instancias de Compute Engine como alternativa al entorno de ejecución de contenedores de Docker.
- Instala Kubernetes en tus instancias para organizar los contenedores de Docker y Open Container Initiative (OCI).
En algunas situaciones, es posible que necesites versiones específicas de estas tecnologías para asegurarte de que funcionen juntas de forma correcta. Por ejemplo, Kubernetes suele funcionar mejor con versiones específicas de Docker. Por lo general, puedes instalar las últimas versiones de estas tecnologías para obtener el mejor resultado.
Instala Docker en imágenes de Windows Server
Windows Server 2016 y las versiones posteriores son compatibles con contenedores. Si planeas ejecutar contenedores de 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 deseas instalar Docker CE en la imagen base de Windows Server, sigue los pasos que se describen a continuación.
Para comenzar, crea una instancia de Windows Server con una imagen pública de Windows Server 2019 o una versión posterior. Para obtener la mejor compatibilidad con contenedores, te recomendamos usar la versión más reciente de LTSC de Windows Server. Para obtener más información sobre LTSC, consulta Canales de servicio de Windows Server.
Instala Docker
Instala Docker en Windows. Si deseas obtener más información, consulta Prepara Windows para contenedores. Reinicia la instancia después de que se complete la instalación.
Pasos de configuración adicionales
En este punto, puedes usar Docker para ejecutar contenedores en la instancia. Por ejemplo, con el siguiente comando, se descarga la imagen de contenedor nanoserver
de Windows y se ejecuta un símbolo del sistema dentro de un contenedor nanoserver
:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
La MTU de la red predeterminada de Docker es de 1,500 bytes. Si también configuraste la MTU de la red de VPC en 1,500 bytes, puedes ignorar el resto de esta sección. Sin embargo, si usas la MTU predeterminada de la VPC de 1,460 bytes en tu red, debes establecer alguna configuración adicional en cada instancia.
Establece la MTU para todas las interfaces de red (Ethernet y vEthernet) en 1460
mediante la ejecución de los siguientes comandos en una 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)
Incluso después de reparar la 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 una MTU de 1500
. Si quieres obtener los comandos para configurar la MTU de forma correcta en cada contenedor, consulta la sección MTU de contenedores.
Es posible que debas volver a ejecutar estos comandos de MTU de manera periódica mientras configuras las redes de Docker. Para obtener más información, consulta la sección de problemas conocidos.
Ejecuta contenedores de Windows
Hay muchos recursos disponibles para comenzar a usar los contenedores de Windows:
- Microsoft proporciona una extensa documentación sobre contenedores de Windows.
Docker Hub se puede usar como repositorio para almacenar y extraer contenedores de Windows.
Problemas conocidos con contenedores de Windows
Baja de Windows Server 2019 para imágenes de contenedores
Google ofreció una familia de imágenes de Windows Server con Mirantis Container Runtime (antes Docker EE) preinstalado:
- Windows
- Incluye: Docker
- Proyecto de imagen:
windows-cloud
- Familia de imágenes:
windows-2019-core-for-containers
A principios de 2023, Microsoft dejó de distribuir y admitir Mirantis Container Runtime para Windows Server. Si bien Google pudo seguir publicando esta familia de imágenes hasta el 30 de octubre de 2023, la familia de imágenes está obsoleta y todas las imágenes de ella se marcaron como obsoletas.
Las máquinas virtuales basadas en estas imágenes creadas antes del 30 de octubre de 2023 se seguirán ejecutando sin interrupciones. Sin embargo, la creación de instancias nuevas basadas en estas imágenes fallará después de esa fecha.
Las imágenes personalizadas derivadas de estas imágenes antes del 30 de octubre de 2023 seguirán funcionando. Sin embargo, las imágenes personalizadas no recibirán automáticamente las actualizaciones Patch Tuesday de Windows ni las versiones actualizadas de Mirantis Container Runtime.
Si deseas seguir usando imágenes con Mirantis Container Runtime preinstalado, Mirantis Inc ofrece imágenes en Google Cloud Marketplace. El costo de estas imágenes de VM incluye asistencia y licencias para Mirantis Container Runtime directamente desde Mirantis. Los clientes que estén interesados en usar Mirantis Container Runtime por separado también pueden descargarlo directamente desde el sitio web de Mirantis.
Si quieres migrar a un entorno de ejecución de contenedores alternativo, como Docker CE, sigue las instrucciones que se indican más arriba.
Los contenedores no son compatibles entre versiones de Windows
Los contenedores compilados en versiones anteriores de Windows no funcionan en las instancias de Compute Engine que se ejecutan en versiones más recientes de Windows. Docker extrae la versión de Windows Server 2019 de un contenedor de forma predeterminada. Esto significa que la ejecución del comando siguiente en una instancia que ejecuta Windows Server, versión 1709 o posterior, generará el error siguiente:
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)
La página sobre compatibilidad de versiones de
contenedor de Windows
de Microsoft contiene más información. Para evitar las incompatibilidades de versiones de contenedores de Windows, especifica la etiqueta correspondiente a tu versión de Windows cuando extraigas y ejecutes 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 predeterminado de LTSC (1809) de 2019:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
Las incompatibilidades de MTU afectan la conectividad de instancias y contenedores
Cuando creas una red de contenedores en una instancia de Windows mediante los comandos docker
network create
o New-VMSwitch
, la MTU de la interfaz de red de la instancia suele forzarse a 1500
. La interfaz de red predeterminada dentro de un contenedor de Docker nuevo también suele usar una MTU de 1500
.
Si tu red de VPC tiene una MTU de 1460
, es posible que experimentes los siguientes problemas:
La sesión RDP puede detenerse y es posible que no puedas volver a conectarte. Se sabe que esto sucede cuando se crea una red de contenedores transparente.
Es posible que falle la resolución de DNS dentro del contenedor.
La resolución de DNS es exitosa, pero el proceso de establecer una conexión HTTP desde el contenedor a Internet puede generar errores.
La solución alternativa recomendada para estas limitaciones requiere dos pasos: Configurar la MTU para las interfaces de red de la instancia como 1460
y Configurar la MTU para las interfaces de red del contenedor como 1460
. Como alternativa, puedes configurar la MTU de la VPC en 1500
, pero esto requiere detener o migrar todas las VM.
1. Configura la MTU para las interfaces de red de la instancia de Windows
Ejecuta este comando en una terminal de PowerShell en la instancia de Windows a fin de configurar la MTU para 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 las MTU de la interfaz Ethernet y vEthernet de la instancia estén configuradas como 1460
mediante 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 en serie, iniciar un símbolo del sistema cmd
y ejecutar los comandos netsh
para reparar la MTU. Si no deseas hacer esto, te recomendamos ejecutar cualquier comando docker network ...
o New-VMSwitch
como parte de una secuencia de comandos que también ejecute el comando de reparación de la MTU.
2. Configura la MTU para las interfaces de red del contenedor de Windows
La MTU de un contenedor de Windows debe configurarse mientras el contenedor está en ejecución, ya sea desde el interior del contenedor o desde la instancia que lo aloja. Si PowerShell está disponible en el contenedor, puedes ejecutar este comando de forma interactiva o desde una secuencia de comandos en el contenedor para configurar la MTU de manera correcta:
PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
O bien, puedes ejecutar este comando en la instancia de Windows a fin de configurar la MTU para todos los contenedores en ejecución:
PS C:\> Get-NetIPInterface -IncludeAllCompartments |
Where-Object InterfaceAlias -like "vEthernet*" |
Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460
No se pueden iniciar contenedores de Hyper-V
Los contenedores de Hyper-V no son compatibles con Compute Engine en este momento.
¿Qué sigue?
- Crea e inicia una instancia que pueda usarse para ejecutar aplicaciones de contenedor.
- Obtén información sobre las instancias de Compute Engine.
- Obtén más información sobre Google Kubernetes Engine, que puedes usar para ejecutar tus contenedores en Google Cloud sin administrar instancias de Compute Engine.
- Obtén más información sobre Kubernetes.
- Aprende a usar Artifact Registry para almacenar tus imágenes de contenedor de forma privada en Google Cloud.