Étant ingénieur logiciel depuis quelques années, j'ai souvent utilisé Docker Desktop dans ma carrière pour gérer des applications conteneurisées. Suite à la mise à jour des accords de service de Docker le 31 août 2021, j'ai dû trouver une alternative open-source ou gratuite à Docker Desktop, ce qui m'a mené à Colima.
Qu'est-ce que Colima ?
Colima est une machine virtuelle basée sur Lima qui fournit des environnements d'exécution de conteneurs sur MacOS/Linux.
Parmi les fonctionnalités de Colima, on trouve :
- une interface en ligne de commande (CLI) simple ;
- la gestion de profils multiples ;
- la prise en charge de plusieurs architectures (Intel, M1) ;
- les environnements d'exécution Docker et containerd ;
- l'intégration de Kubernetes.
Colima vs Docker Desktop
Il est temps de mettre les mains dans le cambouis ! Exécutons quelques scripts pour comparer les performances de Colima et Docker Desktop.
Pour les besoins des tests, nous allons comparer les I/O en utilisant des volumes et le calcul (^) à l'intérieur du conteneur. Les deux machines virtuelles ont la même configuration (2 Go de mémoire, 2 processeurs, 60 Go de disque). La gestion des fichiers et la charge du processeur seront déclenchées à l'aide de l'image Docker alpine officielle.
Vous trouverez les scripts de test sur Github.
Entrée-sortie (I/O)
Utilisation d'un volume lié (hôte)

| VM | Create 200Mb file (MB/s) | Read 200Mb file (MB/s) | Copy 200Mb file (MB/s) | Create 10000 4Kb files (MB/s) | Delete folder (MB/s) |
|---|---|---|---|---|---|
| Colima | 165.29 | 250 | 126.58 | 24.27 | 61.54 |
| Docker Desktop | 176.99 | 133.33 | 112.42 | 20.96 | 31.75 |
Utilisation d'un volume Docker

| VM | Create 200Mb file (MB/s) | Read 200Mb file (MB/s) | Copy 200Mb file (MB/s) | Create 10000 4Kb files (MB/s) | Delete folder (MB/s) |
|---|---|---|---|---|---|
| Colima | 2222.22 | 6666.67 | 4000 | 2000 | 2500 |
| Docker Desktop | 748.31 | 2000 | 1538.46 | 1333.33 | 1052.63 |
Utilisation du conteneur

| VM | Create 200Mb file (MB/s) | Read 200Mb file (MB/s) | Copy 200Mb file (MB/s) | Create 10000 4Kb files (MB/s) | Delete folder (MB/s) |
|---|---|---|---|---|---|
| Colima | 2000 | 6666.67 | 4000 | 1538.46 | 2000 |
| Docker Desktop | 800 | 2000 | 1666.67 | 952.38 | 952.38 |
Charge du processeur

Comment installer Colima ?
En utilisant Homebrew comme gestionnaire de paquets, exécutez brew install colima pour l'installer.
Note : D'autres options d'installation sont disponibles ici.
Pour une expérience plus fluide, ajoutez l'autocomplétion de Colima à votre terminal. Enfin, exécutez colima start pour démarrer une instance par défaut.
$ colima start
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0000] preparing network ... context=vm
INFO[0000] starting ... context=vm
INFO[0022] provisioning ... context=docker
INFO[0022] starting ... context=docker
INFO[0027] done
Environnements d'exécution
Deux environnements d'exécution de conteneurs sont pris en charge par Colima : Docker (par défaut) et containerd.
Docker
Docker est l'environnement d'exécution par défaut de Colima, ce qui signifie que les fonctionnalités de Docker sont disponibles immédiatement. Les CLIs docker et docker-compose sont nécessaires pour utiliser Docker avec Colima. brew install docker docker-compose
containerd
containerd est disponible en exécutant colima start -r containerd.
Note : containerd n'est pas couvert dans cet article. Plus de détails sont disponibles ici.
Kubernetes
Colima inclut un serveur K3s autonome, vous pouvez donc gérer un cluster Kubernetes en utilisant colima start -k.
D'autres options sont disponibles avec le cluster Kubernetes :
- choisir un environnement d'exécution spécifique avec le drapeau
-r; - déployer un contrôleur d'entrée Traefik avec le drapeau
--kubernetes-ingress; - sélectionner une version de Kubernetes avec le drapeau
--kubernetes-version.
Enfin, kubectl est nécessaire pour utiliser Kubernetes en exécutant brew install kubectl.
Note : Un futur article couvrira la gestion de Kubernetes avec Colima. Restez à l'affût !
Personnalisation de la machine virtuelle
Le colima start par défaut configurera une instance avec 2 Go de mémoire, 2 processeurs, 60 Go de disque et un environnement d'exécution Docker.
Vous pouvez facilement personnaliser votre instance en utilisant des drapeaux. Par exemple, colima start -c 5 -m 4 -d 100 démarrera une instance avec 4 Go de mémoire, 5 processeurs, 100 Go de disque et un environnement d'exécution Docker. Pour obtenir la liste complète des options disponibles, exécutez colima start -h.
$ colima start -h
Start Colima with the specified container runtime and optional kubernetes.
Colima can also be configured with a YAML file.
Run 'colima template' to set the default configurations or 'colima start --edit' to customize before startup.
Usage:
colima start [profile] [flags]
Examples:
colima start
colima start --edit
colima start --runtime containerd
colima start --kubernetes
colima start --runtime containerd --kubernetes
colima start --cpu 4 --memory 8 --disk 100
colima start --arch aarch64
colima start --dns 1.1.1.1 --dns 8.8.8.8
Flags:
--activate set as active Docker/Kubernetes context on startup (default true)
-a, --arch string architecture (aarch64, x86_64) (default "aarch64")
-c, --cpu int number of CPUs (default 2)
--cpu-type string the CPU type, options can be checked with 'qemu-system-aarch64 -cpu help'
-d, --disk int disk size in GiB (default 60)
-n, --dns ipSlice DNS servers for the VM (default [])
-e, --edit edit the configuration file before starting
--editor string editor to use for edit e.g. vim, nano, code (default "$EDITOR" env var)
--env stringToString environment variables for the VM (default [])
-h, --help help for start
-k, --kubernetes start with Kubernetes
--kubernetes-ingress enable Traefik ingress controller
--kubernetes-version string must match a k3s version https://github.com/k3s-io/k3s/releases (default "v1.25.0+k3s1")
-l, --layer enable Ubuntu container layer
-m, --memory int memory in GiB (default 2)
-V, --mount strings directories to mount, suffix ':w' for writable
--mount-type string volume driver for the mount (sshfs, 9p) (default "sshfs")
--network-address assign reachable IP address to the VM
--network-driver string network driver to use (slirp, gvproxy) (default "gvproxy")
-r, --runtime string container runtime (docker, containerd) (default "docker")
-s, --ssh-agent forward SSH agent to the VM
Global Flags:
-p, --profile string profile name, for multiple instances (default "default")
-v, --verbose enable verbose log
--very-verbose enable more verbose log
Pour arrêter votre instance en cours d'exécution, exécutez colima stop. Pour la supprimer, exécutez colima delete. Tous les éléments associés seront supprimés (images, conteneurs, volumes...).
Gestion de profils multiples
L'une des fonctionnalités les plus intéressantes de Colima est la gestion d'instances. Pour ce faire, Colima utilise des profils.
Pour créer une instance avec un nom de profil, ajoutez le drapeau -p à la ligne de commande. Par exemple, colima start -p funny_profile créera une instance par défaut avec funny_profile comme nom de profil. colima start -p intel -a x86_64 -c 1 démarrera une instance Intel avec 1 processeur en utilisant le nom intel.
Vous pouvez récupérer vos profils actuels en exécutant colima list.
PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
default Stopped aarch64 2 2GiB 60GiB
funny_profile Running aarch64 2 2GiB 60GiB docker
intel Running x86_64 1 8GiB 60GiB docker
Note : Le nom du profil doit être unique. Si le nom n'est pas donné lors du démarrage d'une instance,
defaultsera le nom par défaut.
Pour arrêter votre instance, exécutez colima stop avec -p <PROFIL> ( est le nom de votre instance). Pour supprimer un profil, exécutez colima delete avec -p <PROFIL>.
Modification d'une instance
Il est possible de personnaliser une instance avant de la démarrer en utilisant des drapeaux, ou en exécutant la commande start avec le drapeau -e. L'éditeur de votre terminal ouvrira le fichier de configuration de l'instance pour être modifié. Après modification, l'instance démarrera.
Note : Une fois créée, chaque propriété de configuration est modifiable sauf la taille du disque.
Gestion multi-architecture
La deuxième grande fonctionnalité de Colima est l'émulation d'architecture de processeur (c'est-à-dire aarch64, x86_64), disponible avec le drapeau -a. Imaginons que vous ayez un ordinateur portable M1 et que l'image Docker souhaitée n'ait pas de version aarch64. En basculant ou en créant une instance amd64 spécifique, vous pourrez exécuter l'image.
# Default with Intel architecture
colima start -a x86_64
# Default with arm architecture
colima start -a aarch64
Conclusion
Les performances de Colima sont bien meilleures que celles de Docker Desktop**, en particulier lors de l'exécution d'opérations d'I/O et de charge du processeur. De plus, des fonctionnalités telles que la gestion de profils et la gestion des environnements d'exécution de conteneurs sont également un excellent ajout à ce projet.
Si vous recherchez une alternative à Docker Desktop sur Mac, Colima semble être le meilleur acteur pour la gestion de conteneurs.
Testé sur un Mac Book Pro M1 avec Colima v0.4.6, Docker Desktop v4.14.1. **Les fonctionnalités bêta de Docker Desktop peuvent améliorer les opérations d'I/O en activant VirtioFS et le nouveau framework de virtualisation, mais Colima conserve les meilleures performances d'I/O.



