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é)

  1. Rendez-vous sur la page GitHub Release
  2. Téléchargez le dernier paquet .pkg signé
  3. Double-cliquez sur le fichier .pkg et suivez l'assistant d'installation
  4. 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 :

BASH
# 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 :

BASH
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 :

BASH
$ 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.

BASH
# 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 :

BASH
$ container image list
NAME         TAG       DIGEST
python       alpine    b4d299311845
web-test     latest    25b99501f174

2. Exécuter le conteneur

BASH
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 :

BASH
$ 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 :

BASH
sudo container system dns create test

Une fois configuré, deux façons d'accéder au conteneur :

BASH
# 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

BASH
# 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 :

TEXT
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

BASH
# 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

BASH
# 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

BASH
# 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 :

BASH
# 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 :

BASH
# 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 :

BASH
# 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 :

BASH
# 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é :

BASH
# 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

BASH
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

BASH
# 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 :

BASH
# 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