Introduction : En 2026, Apple a officiellement open-sourcé le projet
container— une solution native de conteneur Linux conçue pour les Mac Apple Silicon. Écrit en Swift, il exploite les capacités de virtualisation intégrées à macOS pour exécuter des conteneurs compatibles OCI dans des machines virtuelles ultra-légères. Cet article vous guide pas à pas : découvrez les différences entre Apple Container et Docker Desktop, l'installation, l'utilisation quotidienne et des cas pratiques avancés.
Qu'est-ce qu'Apple Container ?
container est un outil CLI open-source d'Apple, conçu pour créer et exécuter des conteneurs Linux sur Mac. Ses points forts :
- Écrit en Swift natif, optimisé pour Apple Silicon (puces M)
- Basé sur des machines virtuelles légères, qui exploitent la virtualisation et les améliorations réseau de macOS 26
- Compatible OCI : peut tirer, construire et pousser des images conteneur standard, avec une intégration transparente à Docker Hub, GitHub Container Registry, etc.
- Open-source et gratuit, le dépôt GitHub est ouvert aux contributions de la communauté
Différences avec Docker Desktop
| Caractéristique | Apple Container | Docker Desktop (Mac) |
|---|---|---|
| Technologie sous-jacente | Virtualisation native macOS + Swift | VM Linux (HyperKit/VMware) |
| Consommation de ressources | Ultra-léger, allocation à la demande | Plus lourd, processus常驻 en arrière-plan |
| Intégration réseau | Service DNS intégré, accès aux conteneurs via hostname | Nécessite un mappage de ports ou une configuration réseau complexe |
| Optimisation Apple Silicon | Support ARM64 natif | Traduction Rosetta 2 pour les images AMD64 |
| Open-source | ✅ Entièrement open-source (Apache 2.0) | ❌ Logiciel commercial |
| Configuration requise | macOS 26 + Apple Silicon | macOS 12+ (Intel/Apple Silicon) |
En résumé, si vous utilisez un Mac Apple Silicon et que votre besoin principal est d'exécuter des conteneurs Linux localement pour le développement, Apple Container est une option plus légère, plus native et plus transparente.
Configuration requise
⚠️ Apple Container nécessite : - Un Mac avec Apple Silicon (M1/M2/M3/M4) - macOS 26 ou version ultérieure - Non compatible avec les Mac Intel ni avec les anciennes versions de macOS
Installer Apple Container
Méthode 1 : Via le paquet d'installation (recommandé)
- Rendez-vous sur la page GitHub Release
- Téléchargez le dernier paquet
.pkgsigné - Double-cliquez sur le fichier
.pkget suivez l'assistant d'installation - Le mot de passe administrateur sera demandé pendant l'installation. Le chemin d'installation est
/usr/local
Méthode 2 : Compiler depuis les sources
Si vous souhaitez tester la dernière version ou contribuer au projet, compilez depuis les sources :
# Cloner le dépôt
git clone https://github.com/apple/container.git
cd container
# Suivre les instructions de BUILDING.md
# Xcode Command Line Tools et Swift 5.10+ requis
Démarrer le service système
Après l'installation, lancez le service système de container :
container system start
Lors du premier démarrage, container vous proposera automatiquement d'installer le noyau Linux recommandé (basé sur Kata Containers) :
$ container system start
Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from
https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz?
[Y/n]: y
Installing kernel...
Tapez y pour lancer le téléchargement et l'installation automatiques. Une fois terminé, vérifiez que le service fonctionne correctement :
$ container list --all
ID IMAGE OS ARCH STATE IP
Une liste vide signifie que le service est prêt. Vous pouvez commencer à créer des conteneurs.
Premiers pas : votre premier conteneur
1. Construire une image conteneur
Commençons par un Dockerfile pour construire une image de serveur web Python simple.
# Créer le répertoire de travail
mkdir web-test && cd web-test
# Créer le Dockerfile
cat > Dockerfile << 'EOF'
FROM docker.io/python:alpine
WORKDIR /content
RUN apk add curl
RUN echo '<!DOCTYPE html><html><head><title>Hello</title></head><body><h1>Hello from Apple Container!</h1></body></html>' > index.html
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
EOF
# Construire l'image
container build --tag web-test --file Dockerfile .
Une fois la construction terminée, consultez la liste des images locales :
$ container image list
NAME TAG DIGEST
python alpine b4d299311845
web-test latest 25b99501f174
2. Exécuter le conteneur
container run --name my-web-server --detach --rm web-test
Explication des paramètres :
- --name : donnez un nom mémorable à votre conteneur
- --detach : exécution en arrière-plan, sans bloquer le terminal
- --rm : suppression automatique du conteneur après son arrêt
Vérifiez les conteneurs en cours d'exécution :
$ container ls
ID IMAGE OS ARCH STATE IP
buildkit ghcr.io/apple/... linux arm64 running 192.168.64.2
my-web-server web-test:latest linux arm64 running 192.168.64.3
3. Accéder au service web dans le conteneur
Container intègre un service DNS permettant d'accéder aux conteneurs directement via leur hostname. Commencez par configurer un domaine local :
sudo container system dns create test
Une fois configuré, deux façons d'accéder au conteneur :
# Méthode 1 : via l'adresse IP
open http://192.168.64.3
# Méthode 2 : via le hostname (plus élégant !)
open http://my-web-server.test
C'est l'un des grands atouts de container : pas besoin de mapper manuellement les ports, le DNS résout automatiquement le nom du conteneur vers son adresse IP.
4. Vérifier la consommation de ressources
# Statistiques en temps réel (similaire à top)
container stats my-web-server
# Capture instantanée
container stats --no-stream my-web-server
Exemple de sortie :
Container ID Cpu % Memory Usage Net Rx/Tx Block I/O Pids
my-web-server 0.23% 12.45 MiB / 1.00 GiB 856 KiB / 1.2 KiB 2.10 MiB / 512 KiB 2
Fonctionnalités avancées : flux de travail quotidien
Exécuter des commandes dans un conteneur
# Exécuter une commande dans un conteneur en cours d'exécution
container exec my-web-server cat /content/index.html
# Ouvrir un shell interactif dans le conteneur
container exec -it my-web-server /bin/sh
Gérer le cycle de vie des conteneurs
# Arrêter un conteneur
container stop my-web-server
# Redémarrer un conteneur arrêté
container start my-web-server
# Consulter les journaux du conteneur
container logs my-web-server
# Forcer l'arrêt du conteneur
container kill my-web-server
# Supprimer le conteneur
container rm my-web-server
# Afficher les informations détaillées du conteneur
container inspect my-web-server
Gestion des images
# Lister toutes les images locales
container image list
# Tirer une image depuis Docker Hub
container image pull ubuntu:latest
# Taguer une image
container image tag web-test:latest my-registry.example.com/web-test:v1.0
# Pousser une image vers un registre distant
container image push my-registry.example.com/web-test:v1.0
Configuration des registres
Container permet de configurer plusieurs sources de registres :
# Lister les registres configurés
container registry list
# Ajouter un registre privé
container registry add --name my-private --url https://my-registry.example.com
Cas pratiques
Scénario 1 : Environnement de développement local
Utilisez container pour mettre en place un environnement de développement local, sans la surcharge de Docker Desktop :
# Tirer l'image PostgreSQL
container image pull postgres:17-alpine
# Exécuter le conteneur de base de données
docker run --name dev-db --detach --env POSTGRES_PASSWORD=dev123 postgres:17-alpine
# Exécuter votre conteneur applicatif et le connecter à la base de données
container run --name my-app --detach my-app-image
Grâce au domaine DNS, votre application peut accéder directement à la base de données via dev-db.test, sans configuration de mappage de ports.
Scénario 2 : Validation CI/CD locale
Avant de pousser votre code, simulez l'environnement CI avec container :
# Construire l'image pour l'environnement CI
container build --tag ci-test --file Dockerfile.ci .
# Exécuter les tests
docker run --rm ci-test make test
# Si les tests passent, construire l'image de production
container build --tag my-app:prod .
Scénario 3 : Débogage de microservices
Lancez rapidement un ensemble de microservices pour le débogage local :
# Configurer le domaine
sudo container system dns create local
# Démarrer le cache Redis
container run --name cache --detach redis:7-alpine
# Démarrer le broker de messages
container run --name broker --detach rabbitmq:3-management
# Démarrer votre application
container run --name api-service --detach --env REDIS_URL=redis://cache.local:6379 my-api
Chaque service est accessible par les autres via des hostnames comme cache.local ou broker.local, aussi facilement que dans un cluster Kubernetes.
Mise à jour et désinstallation
Mise à jour
Mettez à jour en une commande grâce au script intégré :
# Arrêter le service existant
container system stop
# Exécuter le script de mise à jour
/usr/local/bin/update-container.sh
# Redémarrer
container system start
Revenir à une version antérieure
container system stop
# Désinstaller la version actuelle (-k conserve les données utilisateur)
/usr/local/bin/uninstall-container.sh -k
# Installer une version spécifique
/usr/local/bin/update-container.sh -v 0.3.0
container system start
Désinstallation complète
# Désinstaller et supprimer les données utilisateur
/usr/local/bin/uninstall-container.sh -d
Tableau récapitulatif des commandes
| Commande | Description |
|---|---|
container system start/stop |
Démarrer/arrêter le service système |
container build |
Construire une image depuis un Dockerfile |
container run |
Exécuter un conteneur |
container ls |
Lister les conteneurs |
container exec |
Exécuter une commande dans un conteneur |
container stop/start/kill/rm |
Gestion du cycle de vie des conteneurs |
container logs |
Consulter les journaux du conteneur |
container stats |
Vérifier l'utilisation des ressources |
container image list/pull/push/tag |
Gestion des images |
container system dns create |
Configurer le DNS local pour les domaines |
container inspect |
Afficher les informations détaillées du conteneur |
Compatibilité avec Docker CLI
Si vous êtes habitué à la ligne de commande Docker, les commandes de container sont très similaires. La migration est quasi transparente :
# Docker → Apple Container
docker build → container build
docker run → container run
docker ps → container ls
docker exec → container exec
docker stop/rm → container stop/rm
docker images → container image list
docker pull/push → container image pull/push
docker logs → container logs
docker inspect → container inspect
La seule différence : le préfixe docker devient container, et les commandes de gestion système (container system) n'existent tout simplement pas dans Docker.
Architecture technique
Apple Container s'appuie sur le package Swift Containerization, développé en interne par Apple, qui gère :
- Runtime de conteneur : exécution des conteneurs Linux dans des micro-VM légères
- Gestion des images : implémentation complète de la spécification OCI
- Stack réseau : réseau virtuel + résolution DNS intégrée
- Isolation des processus : exploitation du mécanisme sandbox de macOS
Contrairement à l'architecture Docker traditionnelle (qui nécessite une VM Linux pour exécuter des conteneurs), container exécute les conteneurs directement sur macOS via une VM légère. Cette approche élimine la surcharge de la double virtualisation, ce qui rend container plus léger et plus rapide.
Conclusion
Apple Container marque une étape importante pour Apple dans la communauté open-source. Il offre aux utilisateurs de Mac Apple Silicon une solution de conteneur légère, native et open-source.
Cas où Apple Container est idéal : - ✅ Utilisateurs de Mac Apple Silicon - ✅ Développement et test de conteneurs Linux en local - ✅ Débogage léger de microservices - ✅ Alternative légère à Docker Desktop
Cas où ce n'est pas (encore) adapté : - ❌ Utilisateurs de Mac Intel (nécessite macOS 26 + Apple Silicon) - ❌ Orchestration multi-conteneurs type Docker Compose (container cible principalement les conteneurs individuels pour le moment) - ❌ Déploiement en production (le projet est encore en développement actif, l'API n'a pas atteint la version 1.0)
Dépôt GitHub d'Apple Container : github.com/apple/container
Liens utiles : - Tutoriel officiel Container - Référence des commandes - Vue d'ensemble de l'architecture technique - Package Swift Containerization