View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Temas
  • Todos los videos
  • Información

Volver a WWDC25

  • Información
  • Resumen
  • Transcripción
  • Código
  • Conoce la contenedorización

    Conoce la contenedorización, un proyecto de código abierto de Swift para usar contenedores de Linux en la Mac. Descubre cómo la contenedorización aborda los contenedores de Linux con seguridad. Descubre cómo la herramienta Container CLI de código abierto usa el paquete Containerization para ofrecer una funcionalidad para crear, ejecutar e implementar contenedores de Linux en Mac.

    Capítulos

    • 0:00 - Introducción
    • 0:48 - ¿Qué es un contenedor?
    • 3:50 - Análisis de la contenedorización: Administración de imágenes
    • 5:53 - Análisis de la contenedorización: Virtualización
    • 6:53 - Análisis de la contenedorización: Entorno de contenedores
    • 9:19 - Herramientas de línea de comandos
    • 11:45 - Conclusión

    Recursos

    • Container
    • Containerization
      • Video HD
      • Video SD
  • Buscar este video…

    Hola, soy Michael y voy presentar una nueva estructura de código abierto. Containerization es una estructura de Swift para crear apps en contenedores con diseño nativo. Prioriza la seguridad, la privacidad y el rendimiento. Eso guió su diseño y la implementación de los contenedores Linux. Hablemos de los contenedores antes de pasar a la estructura Containerization. Luego, veremos las API incluidas en Containerization. Por último, veremos una herramienta de línea de comandos para crear, ejecutar y administrar contenedores. Veamos qué son los contenedores y algunos de los casos de uso comunes que resuelven. Los contenedores Linux se han convertido en la norma para crear, probar e implementar apps del lado del servidor. Cuando se implementan cargas de trabajo del lado del servidor a gran escala, se ejecutan en muchos entornos diferentes. Los contenedores pueden aislar las cargas del host y también aislarlas entre sí. También permiten replicar los entornos de implementación en la máquina local. Podemos desarrollar y probar las apps localmente como si fuera en producción. Los contenedores permiten a los desarrolladores empaquetar la app junto con sus dependencias. Las dependencias pueden incluir binarios, bibliotecas dinámicas y recursos. Al empaquetarse app y dependencias, los contenedores pueden tener versiones diferentes de esas dependencias respecto del host y de otros contenedores. Se obtiene una sola unidad implementable: un contenedor. Los contenedores también permiten aislamiento durante el tiempo de ejecución. Con los contenedores, se suele usar una arquitectura de red separada del host. Por privacidad, los procesos ejecutados en un contenedor no ven ni inspeccionan los del host u otros contenedores. Los contenedores se pueden dimensionar y escalar independientemente unos de otros. Los recursos, como CPU, memoria y disco, se asignan según la carga de trabajo.

    Para ejecutar contenedores Linux en macOS, se debe virtualizar el entorno de Linux. Era habitual generar una máquina virtual para todos los contenedores en ejecución. Se asignan recursos a esta máquina virtual que se van dividiendo según sea necesario a medida que se agregan contenedores. Los directorios y archivos compartidos desde la Mac van primero a la máquina virtual y, luego, al contenedor que los solicitó. Queríamos llevar los contenedores Linux a macOS, cumpliendo ciertos objetivos. Por seguridad, un contenedor debe tener el mismo nivel de aislamiento que hoy usan las grandes máquinas virtuales. Menos utilidades básicas y bibliotecas dinámicas en esas máquinas virtuales. Esto reduce la superficie de ataque y el costo de mantener todo actualizado. Por privacidad, debe limitarse el acceso a los directorios por cada contenedor. Solo el contenedor que solicita el directorio debe tener acceso a él. Una experiencia de alto rendimiento que respete los recursos del usuario.

    Nos guiamos por esos objetivos de diseño al desarrollar Containerization. Containerization es una estructura de Swift de código abierto. Tiene API para imágenes y contenedores, y un sistema de inicio integrado en Swift. Exploremos algunas de las API para crear un contenedor. Primero, veamos cómo Containerization administra imágenes.

    La mayoría de los contenedores se crean a partir de una imagen. Una imagen es un paquete de distribución con sistema de archivos y configuración predeterminada. Las imágenes actúan como plantilla al crear un nuevo contenedor.

    Las API de Containerization permiten recuperar el contenido y la configuración de las imágenes. Se envían solicitudes a un Registro, servicio que maneja la distribución y el almacenamiento de imágenes. La respuesta recibida se escribe luego en el sistema de archivos local.

    Cuando la imagen existe localmente, su configuración se puede usar para crear otro contenedor. La configuración de la imagen puede indicar el proceso predeterminado para ejecutar, el directorio de trabajo donde ejecutarlo y bajo qué usuario hacerlo. El contenido de una imagen incluye los archivos y directorios de la app. Para un acceso eficiente a este contenido, se presentan como un dispositivo de bloque. Para ello, se crea un archivo grande y se lo formatea con un sistema de archivos. Para que los contenedores Linux lo consuman, debe formatearse como sistema de archivos comprensible para Linux. EXT4 es un sistema de Linux muy usado. Containerization trae un paquete de Swift para formatear el sistema de archivos EXT4, crear la estructura de sus directorios y completarlo directamente en Swift. Si se crea un contenedor con una imagen, se debe iniciar una máquina virtual Linux. Por seguridad, cada contenedor iniciado debe tener un nivel de aislamiento como el de las grandes máquinas virtuales. Containerization logra esto al ejecutar cada contenedor dentro de su propia máquina virtual ligera con tiempos de inicio inferiores a un segundo. Como beneficio agregado, cada contenedor tiene su propia dirección IP exclusiva. La dirección IP exclusiva brinda un acceso de red eficiente a cada contenedor sin necesidad de asignar cada puerto para acceder a los servicios del contenedor. Cuando se comparten directorios y archivos, solo el contenedor que solicita el directorio tiene acceso a su contenido. Si no hay contenedores en ejecución, no se asignan recursos como CPU y memoria. Una vez iniciado el proceso, todo lo demás ocurre dentro de la máquina virtual. Veamos cómo Containerization configura el entorno antes de iniciar el contenedor. Cuando arranca la máquina virtual, se genera un proceso inicial. El binario de este proceso se obtiene de un sistema de archivos mínimo incluido. Este sistema de archivos contiene un binario llamado vminitd. Es un sistema creado en Swift que se ejecuta primero en la máquina virtual.

    Por ser el proceso inicial, tiene muchas tareas en la ejecución del contenedor. vminitd asigna direcciones IP a las interfaces de red e implementa los sistemas de archivos, como el contenido de las imágenes que se incluyen con el dispositivo de bloque. Es responsable de iniciar y supervisar todos los procesos de la máquina virtual. vminitd tiene una API que permite generar y administrar los procesos desde el host. Se los solía iniciar como sistema completo si se usaba una máquina virtual grande. Se incluía la implementación de libc, bibliotecas dinámicas y utilidades básicas, como cd, cp y ls. Queremos reducir la posibilidad de ataque a los contenedores, para mayor seguridad. El sistema de archivos de Containerization no tiene utilidades básicas. No tiene implementación de libc ni bibliotecas dinámicas. Para que vminitd se ejecute de forma restringida, sin vincularse a bibliotecas, se lo compila como ejecutable estático. Compilamos binarios estáticos de Linux de forma cruzada, desde la Mac, usando el SDK de Static Linux para Swift. También usamos musl, de libc, que es ideal para enlaces estáticos. Por eso, vminitd es un ejecutable estático de Linux compilado de forma cruzada desde la Mac, para un entorno aislado. Containerization une todos los componentes básicos y brinda una API para crear soluciones en torno a contenedores Linux. Veamos una herramienta de línea de comandos para ejecutar contenedores fácilmente. La herramienta tiene una CLI y servicios XPC creados con API de Containerization. Permiten almacenar, administrar imágenes, asignar direcciones IP a los contenedores y procesar solicitudes DNS. Por último, administración y tiempo de ejecución de los contenedores. En la terminal y, usando el contenedor, extraemos una imagen a la máquina local. Allí, podemos comenzar escribiendo container image pull.

    Luego, escribimos un nombre de imagen. Para esta demostración, usaremos alpine:latest. Al ejecutarse este comando, el contenedor extrae el contenido y la configuración de la imagen localmente antes de crear el archivo de bloque para que lo usemos. ¡Excelente!

    Con esa imagen local, ejecutemos un contenedor basado en esa imagen.

    Se creará un contenedor usando el contenido y la configuración de la imagen. Con las API de Containerization, lo ejecutará en una máquina virtual ligera. Volvamos a la terminal y veamos esto en la práctica. Usemos container run para el comando de ejecución. Abriremos un shell interactivo. Ponemos un dispositivo terminal con -t y entrada interactiva con el indicador -i. Luego, escribimos el nombre de la imagen y el comando para ejecutar: sh, un shell. En unos pocos cientos de milisegundos, nos encontramos en un shell interactivo. Vemos el entorno en que se ejecuta el contenedor. uname -a indica que es Linux. Por el aislamiento de los contenedores, cuando ejecutamos comandos como ps aux, solo vemos nuestro shell y el proceso ps. No se ven otros procesos del host u otros contenedores. La herramienta de línea de comandos está disponible en GitHub para que la pruebes. Las API de Containerization brindan seguridad, privacidad y alto rendimiento. Acompáñanos a llevar las primitivas de Containerization a macOS. Para crear un proyecto con contenedores Linux, consulta Containerization framework en GitHub. Consulta el código fuente para ver cómo iniciar una máquina virtual ligera. Explora todos los paquetes Swift multiplataforma creados para vminitd. Y no te pierdas los proyectos de ejemplo. Si quieres ejecutar contenedores, prueba la herramienta de contenedores y súmate a la conversación en GitHub. Puedes ver el código fuente, enviar problemas y crear pull requests. Queremos ver qué es lo próximo que creas.

    • 9:58 - Container Image Pull

      container image pull alpine:latest
    • 10:43 - Container Run

      container run -t -i alpine:latest sh
    • 0:00 - Introducción
    • La nueva estructura Swift de código abierto llamada Containerization permite crear apps Linux en contenedores que son seguras, privadas y de alto rendimiento, con una experiencia nativa. La estructura incluye API y una herramienta de línea de comandos para la creación, administración y ejecución de contenedores.

    • 0:48 - ¿Qué es un contenedor?
    • Los contenedores de Linux revolucionan la implementación de apps del lado del servidor al aislar cargas de trabajo y dependencias, permitiendo a los desarrolladores empaquetar apps con sus requisitos. Este paquete permite entornos consistentes en configuraciones locales y de producción, agilizando el desarrollo y las pruebas. Los contenedores brindan aislamiento en tiempo de ejecución y, para ejecutar contenedores de Linux en macOS, se necesita virtualización. El objetivo de Containerization es lograr un aislamiento de seguridad, reducir la sobrecarga de las máquinas virtuales, mejorar la privacidad con control de acceso por directorio y ofrecer un rendimiento eficiente que respete los recursos de los usuarios.

    • 3:50 - Análisis de la contenedorización: Administración de imágenes
    • Containerization ofrece API para la administración de imágenes, la ejecución de contenedores y un potente sistema de inicialización creado en Swift. Containerization funciona obteniendo imágenes de un registro. La imagen sirve como plantilla y tiene el contenido del sistema de archivos y la configuración predeterminada para un nuevo contenedor. La configuración de la imagen puede especificar el proceso predeterminado a ejecutar, el directorio de trabajo y la identidad de usuario. Containerization expone el sistema de archivos de la imagen como un dispositivo de bloques para un acceso eficiente, formateándolo con EXT4, un sistema de archivos de Linux muy usado.

    • 5:53 - Análisis de la contenedorización: Virtualización
    • Para poblar directamente un sistema de archivos EXT4 desde Swift, el sistema inicia una VM con Linux para ejecutar un contenedor que, a través de Containerization, ofrece un aislamiento liviano a nivel de VM, tiempos de inicio inferiores a un segundo, direcciones IP dedicadas para cada contenedor y un intercambio seguro de archivos y directorios.

    • 6:53 - Análisis de la contenedorización: Entorno de contenedores
    • Containerization usa una VM donde recursos como CPU y memoria se asignan dinámicamente cuando los contenedores están en ejecución. En esta VM, un sistema de archivos mínimo contiene el binario “vminitd”, un sistema de inicialización creado en Swift. “vminitd” se ejecuta como el primer proceso, administrando interfaces de red, montando sistemas de archivos y lanzando y supervisando los siguientes procesos. Para mejorar la seguridad, el sistema de archivos se despoja de utilidades centrales, bibliotecas dinámicas y de “libc.” Para eso, “vminitd” se compila como un ejecutable estático usando el SDK estático de Linux de Swift.

    • 9:19 - Herramientas de línea de comandos
    • Containerization brinda una API potente para crear soluciones en torno a contenedores Linux. Una herramienta de línea de comandos, “container”, usa estas API para administrar el almacenamiento, las imágenes, las redes y ejecutar contenedores. Los usuarios pueden extraer imágenes localmente con “container image pull” y ejecutar contenedores de forma interactiva con “container run -t -i .” Este enfoque crea una VM liviana que brinda aislamiento, como se ve al usar “ps aux” que solo muestra procesos de contenedor. La herramienta está disponible en GitHub.

    • 11:45 - Conclusión
    • macOS ahora admite API de Containerization que permiten contenedores Linux seguros, privados y de alto rendimiento. Accede a la estructura Containerization en GitHub, explora el código fuente y consulta proyectos de ejemplo. La herramienta “container” está disponible para su uso inmediato y se invita a la comunidad a compartir comentarios a través de GitHub.

Developer Footer

  • Videos
  • WWDC25
  • Conoce la contenedorización
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines