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 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 !
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 :
- Virtualisation et Réseau : Utilise
Virtualization.framework
etvmnet
pour une gestion efficace des VM et du réseau. - Gestion des Services : Le démon
container-apiserver
est géré parlaunchd
, la méthode standard de gestion des services sur macOS. - Sécurité : S'appuie sur les services Keychain pour stocker en toute sécurité les identifiants de registre.
- Journalisation : S'intègre au système de journalisation unifié de macOS, de sorte que toutes ses sorties de diagnostic se trouvent dans un endroit familier.
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 :
-name my-web-server
: Donne un nom mémorable à notre conteneur.-detach
(oud
) : Exécute le conteneur en arrière-plan.-rm
: Supprime automatiquement l'enregistrement du conteneur lorsqu'il s'arrête, ce qui permet de garder les choses propres.
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 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!