Comment utiliser Apple Container, l'alternative open source à Docker en Swift

Mark Ponomarev

Mark Ponomarev

10 June 2025

Comment utiliser Apple Container, l'alternative open source à Docker en Swift

Les conteneurs sont devenus un outil indispensable. Ils offrent portabilité, cohérence et efficacité, permettant aux développeurs de créer et de déployer des applications de manière fiable dans différents environnements. Pendant des années, Docker a été le standard de facto sur macOS, mais un nouveau concurrent, né directement chez Apple, est prêt à offrir une expérience plus native, intégrée et simplifiée aux développeurs sur Apple Silicon : container.

container est un nouvel outil open source d'Apple qui vous permet de créer et d'exécuter des conteneurs Linux standard, conformes à l'OCI, sur votre Mac. Entièrement écrit en Swift et optimisé pour Apple Silicon, il est conçu pour être une alternative légère et performante aux autres runtimes de conteneurs. Il exploite les propres technologies de virtualisation de macOS pour exécuter les conteneurs comme des machines virtuelles minimales et isolées, promettant une meilleure sécurité et une empreinte plus faible.

Cet article propose une exploration approfondie du projet container d'Apple. Nous examinerons son architecture, ses principaux avantages, puis nous suivrons un tutoriel complet sur la façon de construire, d'exécuter et de partager votre première application conteneurisée. Que vous soyez un développeur backend chevronné ou un utilisateur Mac curieux, vous trouverez tout ce dont vous avez besoin pour démarrer avec ce nouvel outil passionnant.

💡
Vous voulez un excellent outil de test d'API qui génère une belle documentation API ?

Vous voulez une plateforme intégrée tout-en-un pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?

Apidog répond à toutes vos demandes et remplace Postman à un prix beaucoup plus abordable !
button

Pourquoi un nouvel outil de conteneurs ? La vision derrière container

Dans un paysage dominé par des acteurs établis, pourquoi Apple a-t-elle décidé de construire son propre outil de conteneurs ? La réponse réside dans une vision d'une expérience profondément intégrée, performante et conviviale pour les développeurs sur son propre matériel et logiciel. container n'est pas seulement un autre clone de Docker ; c'est une réimagination de ce que la conteneurisation peut être sur un Mac.

Performances natives sur Apple Silicon

Contrairement à d'autres solutions qui peuvent s'appuyer sur des machines virtuelles Linux plus lourdes ou des couches de compatibilité multiplateformes, container est construit à partir de zéro pour Apple Silicon. C'est une application Swift qui communique directement avec le Virtualization.framework natif d'Apple. Cela se traduit par un avantage de performance significatif. Il n'y a pas de couche d'émulation comme Rosetta 2 impliquée pour le runtime lui-même, et chaque conteneur s'exécute dans sa propre VM légère, démarrant en une fraction du temps nécessaire pour lancer une machine virtuelle complète.

Une architecture particulièrement sécurisée

La sécurité est une pierre angulaire de la conception de container. L'aperçu technique révèle une décision architecturale clé : au lieu d'exécuter tous les conteneurs au sein d'une seule VM Linux partagée, container lance une micro-VM dédiée et minimale pour chaque conteneur.

Ce modèle "une VM par conteneur" offre une isolation robuste au niveau matériel. Un processus s'échappant de son conteneur se retrouverait à l'intérieur d'une VM fortement restreinte et à usage unique, et non dans un environnement partagé avec accès à d'autres conteneurs. Cela réduit considérablement la surface d'attaque potentielle et améliore la posture de sécurité globale de votre environnement de développement.

Conformité OCI : Bien s'entendre avec les autres

Malgré son architecture unique, container adhère pleinement aux standards ouverts. Il consomme et produit des images conformes à l'Open Container Initiative (OCI). C'est une fonctionnalité essentielle, car cela signifie que vous n'êtes pas enfermé dans un écosystème propriétaire. Vous pouvez extraire une image standard de Docker Hub, l'exécuter avec container, construire une nouvelle image et la pousser vers n'importe quel registre conforme à l'OCI comme GitHub Container Registry (ghcr.io). Vos images construites avec container fonctionneront de manière transparente dans d'autres outils et dans les pipelines CI/CD de production.

Intégration poussée avec macOS

container est un bon citoyen sur macOS. Il s'intègre aux technologies système de base pour offrir une expérience utilisateur fluide :

Sous le capot : Un rapide aperçu technique approfondi

L'outil en ligne de commande container est un client qui communique avec un processus serveur en arrière-plan, container-apiserver. Ce serveur, que vous démarrez avec container system start, gère tout.

Lorsque vous émettez une commande comme container run, le serveur API lance un helper runtime dédié (container-runtime-linux) pour ce conteneur spécifique. Ce helper, à son tour, utilise le Virtualization.framework pour lancer une nouvelle VM Linux minimale qui héberge les processus de votre conteneur. Cette architecture est élégante, robuste et conçue pour la sécurité et la performance.

Il est important de noter qu'en tant que nouveau projet, container présente certaines limitations. Il nécessite une version moderne de macOS (macOS 15, avec les meilleures performances sur la dernière version bêta 1 de macOS 26). La mise en réseau entre les conteneurs et l'hôte a quelques solutions de contournement spécifiques, et des fonctionnalités avancées comme le "memory ballooning" sont encore en développement. Cependant, la fondation est solide et le projet évolue rapidement.

Comment utiliser container : Un tutoriel étape par étape

Mettons les mains dans le cambouis. Ce tutoriel vous guidera à travers tout le cycle de vie d'un conteneur : construire une image pour un simple serveur web, l'exécuter, interagir avec lui et le publier.

Étape 1 : Installation et configuration

Tout d'abord, assurez-vous de respecter les exigences : un Mac Apple Silicon exécutant une version récente de macOS.

Installer container : Téléchargez le dernier package d'installation signé depuis la page des versions GitHub du projet. Double-cliquez sur le fichier .pkg et suivez les instructions d'installation.

Démarrer le service : Ouvrez votre terminal et démarrez les services système container.

container system start

La première fois que vous l'exécutez, il vous demandera probablement de télécharger et d'installer un noyau Linux par défaut. Tapez y et appuyez sur Entrée pour continuer.

Vérifier l'installation : Vérifiez que le service est en cours d'exécution en listant tous les conteneurs disponibles (qui ne devraient être aucun à ce stade).

container ls -a
# Vous devriez voir des en-têtes vides :
# ID  IMAGE  OS  ARCH  STATE  ADDR

Étape 2 : Construire votre première image

Maintenant, créons une image de conteneur pour un simple serveur web Python.

Créer un répertoire de projet :

mkdir web-test
cd web-test

Créer un Dockerfile : Dans le répertoire web-test, créez un fichier nommé Dockerfile (ou Containerfile) avec le contenu suivant. Ce fichier définit la "recette" de notre image.

# Start from a lightweight Python base image
FROM docker.io/python:alpine

# Set the working directory inside the container
WORKDIR /content

# Add the 'curl' utility for testing
RUN apk add curl

# Create a simple HTML file
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html

# The command to run when the container starts
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

Construire l'image : Maintenant, dites à container de construire une image à partir de votre Dockerfile. Nous allons la taguer avec le nom web-test.

container build --tag web-test --file Dockerfile .

Le . à la fin indique au builder d'utiliser le répertoire actuel comme contexte.

Lister vos images : Une fois la construction terminée, vous pouvez voir votre nouvelle image dans le magasin d'images local.

container images list
# Vous devriez voir votre image `web-test` et l'image de base `python:alpine`.
# NAME      TAG     DIGEST
# python    alpine  b4d299311845...
# web-test  latest  25b99501f174...

Étape 3 : Exécuter votre conteneur

Avec notre image construite, exécutons-la.

Exécuter le serveur web : Utilisez la commande container run pour démarrer un conteneur à partir de votre image web-test.

container run --name my-web-server --detach --rm web-test

Décomposons ces drapeaux :

Vérifier le conteneur en cours d'exécution : Listez les conteneurs actifs.

container ls

Vous verrez votre conteneur my-web-server dans l'état running, ainsi que son adresse IP attribuée dans la colonne ADDR (par exemple, 192.168.64.3).

Accéder à votre serveur web : Ouvrez un navigateur web et naviguez vers l'adresse IP affichée à l'étape précédente. Vous devriez voir votre message "Hello, Apple Container!".

# Remplacez l'IP par celle de `container ls`
open <http://192.168.64.3>

Étape 4 : Interagir avec le conteneur

container fournit des outils puissants pour interagir avec vos conteneurs en cours d'exécution.

Exécuter une commande : Vous pouvez exécuter des commandes directement à l'intérieur du conteneur en utilisant container exec. Listons les fichiers dans le répertoire de contenu de notre serveur web.

container exec my-web-server ls /content
# Output: index.html

Ouvrir un shell interactif : Pour un débogage plus complexe, vous pouvez obtenir un shell interactif à l'intérieur du conteneur.

container exec -it my-web-server sh

Les drapeaux -it (--interactive et --tty) sont essentiels pour connecter votre terminal au shell à l'intérieur du conteneur. Vous serez invité à une invite de shell à l'intérieur du WORKDIR de votre conteneur. Vous pouvez regarder autour de vous, vérifier les processus, puis taper exit pour revenir au terminal de votre Mac.

Étape 5 : Publier votre image

Partager votre travail est facile. Poussons notre image vers un registre de conteneurs. Cet exemple utilise Docker Hub, mais n'importe quel registre OCI fonctionnera. (Cela suppose que vous avez un compte Docker Hub avec le nom d'utilisateur fido).

Se connecter au registre :

# Cela vous demandera votre nom d'utilisateur et mot de passe/jeton
container registry login docker.io

Taguer l'image pour la publication : Les registres exigent que les images soient nommées au format registre/nom_utilisateur/image:tag. Créons un nouveau tag pour notre image.

container images tag web-test docker.io/fido/web-test:latest

Pousser l'image :

container images push docker.io/fido/web-test:latest

Votre image est maintenant disponible pour que d'autres puissent la tirer et l'exécuter, sur n'importe quelle plateforme conforme à l'OCI !

Étape 6 : Nettoyage

Une fois que vous avez terminé, vous pouvez arrêter le conteneur et arrêter le service.

# Arrêter le conteneur
container stop my-web-server

# Arrêter tous les services conteneur
container system stop

Au-delà des bases

Le tutoriel couvre le flux de travail de base, mais container peut faire plus. Voici quelques fonctionnalités tirées de la documentation how-to.md :

Gestion des ressources : Vous pouvez contrôler les ressources allouées à vos conteneurs. Pour les constructions gourmandes en mémoire, vous pouvez donner plus de RAM et de CPU au builder :

container builder start --cpus 8 --memory 16g

Partage de fichiers : Vous pouvez monter un répertoire de votre Mac dans le conteneur en utilisant le drapeau -volume, ce qui est essentiel pour les flux de travail de développement où vous souhaitez éditer du code sur l'hôte et voir les changements en direct dans le conteneur.

container run --volume ${HOME}/my-project:/app my-image

Constructions multiplateformes : Vous pouvez construire des images qui s'exécutent sur les architectures Apple Silicon (arm64) et Intel (amd64) en une seule commande, parfait pour le déploiement sur des environnements serveur diversifiés.

container build --arch arm64 --arch amd64 --tag my-multi-arch-image .

Inspection avancée : La commande container inspect fournit des informations JSON détaillées sur les conteneurs et les images, ce qui est utile pour les scripts et l'automatisation.

Conclusion

Le container d'Apple est plus qu'un simple nouvel outil ; c'est une déclaration. Il signale un engagement à fournir des outils de développement intégrés et de première classe pour l'ère moderne du développement cloud-native. En construisant un runtime de conteneurs léger, sécurisé et performant directement dans le système d'exploitation, Apple abaisse la barrière à l'entrée pour la conteneurisation sur Mac et offre une alternative convaincante aux solutions existantes.

Bien que le projet soit encore jeune, sa fondation est solide, son architecture est saine et son adhésion aux standards ouverts garantit qu'il sera un acteur précieux dans l'écosystème plus large des conteneurs. Si vous êtes un développeur sur un Mac Apple Silicon, container est un projet que vous devriez surveiller - et essayer - dès aujourd'hui.

💡
Vous voulez un excellent outil de test d'API qui génère une belle documentation API ?

Vous voulez une plateforme intégrée tout-en-un pour que votre équipe de développeurs travaille ensemble avec une productivité maximale ?

Apidog répond à toutes vos demandes et replaces Postman at a much more affordable price!
button

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API