blog.title

blog.return

É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, default sera 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.