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

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Sujets
  • Toutes les vidéos
  • À propos

Retour à WWDC25

  • À propos
  • Résumé
  • Transcription
  • Code
  • Découvrez Containerization

    Découvrez Containerization, un projet open source écrit en Swift permettant de créer et d'exécuter des conteneurs Linux sur votre Mac. Découvrez comment Containerization aborde les conteneurs Linux de manière sécurisée et privée. Découvrez comment l'outil open source Container CLI utilise le package Containerization pour fournir des fonctionnalités simples, mais puissantes pour créer, exécuter et déployer des conteneurs Linux sur Mac.

    Chapitres

    • 0:00 - Introduction
    • 0:48 - Qu’est-ce qu’un conteneur ?
    • 3:50 - Présentation approfondie de Containerization : Gestion des images
    • 5:53 - Présentation approfondie de Containerization : Virtualisation
    • 6:53 - Présentation approfondie de Containerization : Environnement de conteneur
    • 9:19 - Outils de ligne de commande
    • 11:45 - Conclusion

    Ressources

    • Container
    • Containerization
      • Vidéo HD
      • Vidéo SD
  • Rechercher dans cette vidéo…

    Bonjour, je m’appelle Michael et je vais vous présenter un nouveau framework open source. Containerization, écrit en Swift, permet de créer des applications conteneurisées d’aspect natif. Containerization privilégie la sécurité, la confidentialité et les performances, ce qui a contribué à façonner sa conception et sa mise en œuvre des conteneurs Linux. Avant de découvrir Containerization, nous nous familiariserons avec les conteneurs, puis nous examinerons les API fournies par Containerization ainsi qu’un outil de ligne de commande pour créer, exécuter et gérer les conteneurs. Donc, qu’est-ce qu’un conteneur et quels cas d’utilisation courants résout-il ? Les conteneurs Linux servent à la création, au test et au déploiement d’applications côté serveur. Lorsque des charges de travail côté serveur sont déployées à grande échelle, elles doivent s’exécuter dans divers environnements. Les conteneurs nous permettent d’isoler ces charges de travail de la machine hôte et les unes des autres. Ils nous permettent aussi de répliquer nos environnements de déploiement sur notre machine locale. Nous pouvons ainsi développer et tester nos applications localement, comme si elles étaient exécutées en production. Avec les conteneurs, les développeurs peuvent packager leur application et ses dépendances, telles que des fichiers binaires, bibliothèques dynamiques et ressources. Quand l’application et les dépendances sont packagées ensemble, les conteneurs acceptent différentes versions de ces dernières, de la machine hôte et d’autres conteneurs. Le résultat est regroupé dans une seule unité déployable : un conteneur. Les conteneurs isolent également l’exécution. Ils ont généralement une pile réseau isolée de la machine hôte. Pour assurer la confidentialité, les processus exécutés dans un conteneur ne peuvent pas voir ni inspecter ceux exécutés sur l’hôte ou d’autres conteneurs. Les conteneurs peuvent être dimensionnés et mis à l’échelle individuellement. Les ressources (processeur, mémoire, disque, etc.) peuvent être allouées selon les besoins de la charge de travail.

    Pour exécuter un conteneur Linux sur macOS, il faut virtualiser l’environnement Linux. La solution historique consiste à créer une grande machine virtuelle (MV) pour héberger tous les conteneurs exécutés. Des ressources sont allouées à cette machine virtuelle et réparties selon les besoins, à mesure que des conteneurs sont ajoutés. Lorsque vous devez partager des répertoires et fichiers supplémentaires à partir de votre Mac, ceux-ci sont d’abord partagés avec la machine virtuelle, puis fournis au conteneur qui a demandé les données. En cherchant à utiliser des conteneurs Linux avec macOS, nous nous sommes fixé plusieurs objectifs. Pour la sécurité, nous voulions fournir à chaque conteneur le même niveau d’isolement que celui des grandes MV aujourd’hui. Nous voulions aussi réduire le besoin d’utilitaires de base et de bibliothèques dynamiques dans ces MV afin de diminuer la surface d’attaque et les coûts de maintenance liés à leur mise à jour. Pour la confidentialité, la limitation de l’accès aux répertoires doit se faire par conteneur. Seul le conteneur demandant le répertoire doit avoir accès à son contenu. Et nous voulions offrir une expérience performante, tout en respectant les ressources de l’utilisateur.

    Nous avons tenu compte de ces objectifs en créant Containerization. Containerization est un framework Swift open source. Il fournit des API pour gérer les images et exécuter les conteneurs, ainsi qu’un puissant système init intégré à Swift. Explorons quelques-unes des API permettant de créer un conteneur. Tout d’abord, voyons comment Containerization gère les images.

    La plupart des conteneurs sont créés à partir d’une image. Une image est un artefact de distribution regroupant le contenu du système de fichiers et une configuration par défaut. Les images servent de modèle lors de la création d’un conteneur.

    Containerization fournit des API permettant de récupérer le contenu du système de fichiers et la configuration de l’image. Pour cette opération, un registre reçoit des demandes, un service gère le stockage et la distribution des images, puis la réponse du registre est écrite vers le système de fichiers local pour utilisation.

    Une fois qu’une image existe en local, sa configuration peut être utilisée comme point de départ pour un nouveau conteneur. Cette configuration peut contenir le processus par défaut à exécuter, le répertoire de travail où il est exécuté et l’utilisateur de l’exécution. Le contenu du système de fichiers d’une image comprend les fichiers et répertoires de l’app. Pour un accès performant au contenu de l’image, nous exposons le système de fichiers en tant que périphérique bloc. Un périphérique bloc consiste à créer un fichier volumineux et à le formater avec un système de fichiers. Pour que nos conteneurs Linux consomment ce périphérique bloc, il doit être formaté avec un système de fichiers que Linux peut comprendre, tel qu’EXT4 qui est largement utilisé. Containerization fournit un package Swift qui permet de formater, créer une structure de répertoires et remplir un système de fichiers EXT4 directement à partir de Swift. Une fois qu’un conteneur a été créé à partir d’une image, une MV Linux doit être démarrée pour exécuter le conteneur. Pour la sécurité, nous voulions fournir le même niveau d’isolement que celui utilisé par les grandes MV et l’appliquer à chaque conteneur démarré. Pour ce faire, Containerization exécute chaque conteneur à l’intérieur de sa propre MV légère, tout en offrant des temps de démarrage inférieurs à la seconde. Autre avantage : chaque conteneur a sa propre adresse IP dédiée. L’adresse IP dédiée fournit un accès réseau performant à chaque conteneur et évite d’avoir à mapper les ports individuels pour accéder aux services fournis par les conteneurs. Lors du partage de répertoires et de fichiers, seul le conteneur demandant le répertoire a accès au contenu. Quant aux ressources comme le processeur et la mémoire, si aucun conteneur ne s’exécute, aucune n’est allouée. Après le démarrage, les étapes suivantes se déroulent dans la machine virtuelle. Voyons comment Containerization configure l’environnement d’exécution avant de démarrer le conteneur. Une fois la machine virtuelle démarrée, un processus initial est lancé. Le binaire de ce processus est fourni par un système de fichiers minimal qui fait partie de Containerization. Ce système de fichiers contient un binaire appelé vminitd. vminitd est un système init intégré à Swift qui s’exécute en tant que premier processus dans la MV.

    Ce processus initial a de nombreuses responsabilités avant et pendant l’exécution du conteneur. vminitd doit attribuer des adresses IP aux interfaces réseau et monter des systèmes de fichiers, tels que le contenu de l’image que nous exposons avec le périphérique bloc. Il doit lancer et superviser tous les processus exécutés dans la machine virtuelle. vminitd dispose d’une API qui permet de générer et de gérer les processus à partir de l’hôte. À l’origine, lors de l’utilisation d’une grande MV, ils étaient démarrés en tant que système complet. Le système de fichiers de ces grandes MV comprenait des éléments tels qu’une implémentation libc, des bibliothèques dynamiques et des utilitaires de base (cd, cp et ls). Pour plus de sécurité, nous voulons réduire la surface d’attaque de nos conteneurs. Le système de fichiers fourni par Containerization ne comporte ni utilitaires de base, ni bibliothèques dynamiques, ni implémentation libc. Pour que vminitd s’exécute dans cet environnement limité, sans bibliothèque à laquelle se relier, nous devons compiler vminitd en tant qu’exécutable statique. Nous utilisons donc le Static Linux SDK de Swift, qui permet d’intercompiler des binaires Linux statiques, directement depuis notre Mac. Nous pouvons aussi utiliser musl, une implémentation libc qui prend en charge les liens statiques. Ainsi, nous produisons vminitd en tant qu’exécutable Linux statique, intercompilé à partir de notre Mac et capable de s’exécuter dans cet environnement isolé. Containerization combine tous ces composants de base, offrant une API puissante pour créer des solutions avec des conteneurs Linux. Examinons maintenant un outil de ligne de commande simple et robuste pour exécuter des conteneurs. Il comprend une interface de ligne de commande et des services XPC créés avec les API de Containerization. Ces services prennent en charge le stockage, la gestion des images et les services réseau qui allouent des adresses IP aux conteneurs et gèrent les requêtes DNS, puis la gestion et l’exécution des conteneurs. Commençons par utiliser le terminal et un conteneur pour télécharger une image vers notre machine locale. Dans le terminal, nous pouvons commencer par saisir "container image pull",

    puis un nom d’image. Pour cette démo, nous utiliserons "alpine:latest". Cette commande exécutée, le conteneur extrait le contenu de l’image et la configuration localement, puis crée le fichier bloc que nous pourrons utiliser. Parfait.

    Maintenant qu’une image existe localement, exécutons un conteneur basé dessus.

    L’outil créera un conteneur à partir du contenu du système de fichiers et de la configuration de l’image. Ensuite, il utilisera les API de Containerization pour démarrer une MV légère pour exécuter le conteneur. Revenons dans notre terminal pour voir cela en action. Pour la commande d’exécution, nous tapons "container run" et, comme nous voulons exécuter un shell interactif, nous ajoutons un appareil terminal avec "-t" et une entrée interactive avec l’indicateur "-i". Enfin, nous indiquons le nom de l’image et la commande à exécuter, qui sera un shell, donc "sh". En quelques centaines de millisecondes, nous arrivons dans un shell interactif. Nous pouvons inspecter l’environnement d’exécution de notre conteneur. L’exécution de "uname -a" nous montre que nous sommes dans un environnement Linux. Et du fait de l’isolement fourni par les conteneurs, quand nous exécutons des commandes comme "ps aux", nous ne voyons que notre shell et le processus ps. Aucun autre processus s’exécutant sur l’hôte ni aucun autre conteneur n’est visible. Cet outil de ligne de commande de conteneur est donc disponible sur GitHub. Grâce aux API de Containerization, il offre une expérience sécurisée, privée et performante pour les conteneurs. Nous vous invitons à nous rejoindre alors que nous étendons les primitives de Containerization à macOS. Si la création d’un projet intégrant des conteneurs Linux vous intéresse, vous trouverez le framework Containerization sur GitHub. Consultez le code source pour savoir comment les MV légères sont démarrées. Découvrez tous les packages Swift multiplateformes créés pour vminitd ainsi que les exemples de projets. Si vous souhaitez commencer à exécuter des conteneurs, testez l’outil de conteneur et rejoignez la conversation sur GitHub. Vous pourrez afficher le code source, soumettre des problèmes et créer des demandes de tirage. Nous avons hâte de découvrir vos prochaines créations !

    • 9:58 - Container Image Pull

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

      container run -t -i alpine:latest sh
    • 0:00 - Introduction
    • Un nouveau framework Swift open source, Containerization, permet de créer des applications Linux conteneurisées, sécurisées et performantes avec une expérience native. Le framework propose des API et un outil en ligne de commande pour créer, gérer et exécuter des conteneurs.

    • 0:48 - Qu’est-ce qu’un conteneur ?
    • Les conteneurs Linux révolutionnent le déploiement serveur en isolant charges de travail et dépendances, et en permettant aux développeurs de packager leurs applications avec leurs besoins. Ce packaging garantit des environnements cohérents dans tous les environnements locaux et de production, facilitant développement et tests. Les conteneurs assurent une isolation pendant leur exécution, et pour exécuter des conteneurs Linux sur macOS, la virtualisation est nécessaire. Containerization vise à assurer une isolation sécurisée, réduire la surcharge des machines virtuelles, améliorer la confidentialité grâce au contrôle d’accès par conteneur, et offrir une expérience performante qui respecte les ressources utilisateur.

    • 3:50 - Présentation approfondie de Containerization : Gestion des images
    • Containerization fournit des API pour gérer les images et exécuter les conteneurs, ainsi qu’un puissant système d’initialisation intégré à Swift. Containerization fonctionne en récupérant les images depuis un registre. L’image sert de modèle, contenant le système de fichiers et la configuration par défaut du nouveau conteneur. La configuration de l’image définit le processus par défaut, le répertoire de travail et l’identité utilisateur. Containerization expose le système de fichiers de l’image comme un périphérique bloc, formaté en EXT4, un système largement utilisé sous Linux.

    • 5:53 - Présentation approfondie de Containerization : Virtualisation
    • Pour remplir un système de fichiers EXT4 depuis Swift, le système lance une VM Linux exécutant un conteneur qui, via la conteneurisation, offre une isolation légère au niveau VM, un démarrage en moins d’1 seconde, des IP dédiées pour chaque conteneur, et un partage sécurisé des fichiers et répertoires.

    • 6:53 - Présentation approfondie de Containerization : Environnement de conteneur
    • Containerization utilise une VM avec allocation dynamique des ressources CPU et mémoire uniquement quand les conteneurs sont actifs. Dans cette VM, un système minimal contient le binaire vminitd, un système d’initialisation développé en Swift. vminitd s’exécute comme premier processus, gérant les interfaces réseau, montant les systèmes de fichiers, et lançant et supervisant tous les processus suivants. Pour renforcer la sécurité, le système de fichiers est épuré : utilitaires de base, bibliothèques dynamiques et libc sont supprimés. Pour cela, vminitd est compilé en exécutable statique avec le Static Linux SDK de Swift.

    • 9:19 - Outils de ligne de commande
    • Containerization offre une API puissante pour créer des solutions autour des conteneurs Linux. L’outil en ligne de commande container utilise ces API pour gérer stockage, images, réseaux et exécution des conteneurs. Les utilisateurs peuvent récupérer des images avec container image pull, puis lancer des conteneurs interactifs via container run -t -i . Cette approche crée une VM légère avec isolation, comme le montre ps aux qui n’affiche que les processus du conteneur. L’outil est disponible sur GitHub.

    • 11:45 - Conclusion
    • macOS prend désormais en charge les API Containerization pour des conteneurs Linux sécurisés, privés et performants. Accédez au framework Containerization sur GitHub, explorez le code source et découvrez des exemples. L’outil de conteneur est prêt à l’emploi, et les retours de la communauté sont les bienvenus sur GitHub.

Developer Footer

  • Vidéos
  • WWDC25
  • Découvrez Containerization
  • 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