<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thomas Perron</title>
    <description>The latest articles on DEV Community by Thomas Perron (@ths83).</description>
    <link>https://dev.to/ths83</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F966014%2F565cff42-b2f4-40ec-9537-f1550b80d70b.jpeg</url>
      <title>DEV Community: Thomas Perron</title>
      <link>https://dev.to/ths83</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ths83"/>
    <language>en</language>
    <item>
      <title>How Colima Is A Good Alternative To Docker Desktop</title>
      <dc:creator>Thomas Perron</dc:creator>
      <pubDate>Sun, 11 Dec 2022 01:33:35 +0000</pubDate>
      <link>https://dev.to/ths83/how-colima-is-a-good-alternative-to-docker-desktop-4ap6</link>
      <guid>https://dev.to/ths83/how-colima-is-a-good-alternative-to-docker-desktop-4ap6</guid>
      <description>&lt;p&gt;&lt;em&gt;Original publication: &lt;a href="https://ths83.github.io/2022/11/28/how-colima-is-a-good-alternative-to-docker-desktop.html" rel="noopener noreferrer"&gt;https://ths83.github.io/2022/11/28/how-colima-is-a-good-alternative-to-docker-desktop.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Being a software engineer for some years, I have often used Docker Desktop in my career to manage containerized applications. As Docker &lt;a href="https://www.docker.com/blog/updating-product-subscriptions" rel="noopener noreferrer"&gt;updated their service agreements&lt;/a&gt; August 31st, 2021, I needed to find an open-source or a free alternative to Docker Desktop, leading to Colima.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Colima?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/abiosoft/colima" rel="noopener noreferrer"&gt;Colima&lt;/a&gt; is a VM based on &lt;a href="https://github.com/lima-vm/lima" rel="noopener noreferrer"&gt;Lima&lt;/a&gt; providing container runtimes in MacOS/Linux.&lt;/p&gt;

&lt;p&gt;Some of Colima's features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a simple CLI;&lt;/li&gt;
&lt;li&gt;multi-profiles management;&lt;/li&gt;
&lt;li&gt;multi-architectures (Intel, M1);&lt;/li&gt;
&lt;li&gt;Docker and containerd runtimes;&lt;/li&gt;
&lt;li&gt;Kubernetes integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to install Colima?
&lt;/h2&gt;

&lt;p&gt;Using Homebrew as package manager, run &lt;code&gt;brew install colima&lt;/code&gt; to install it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Other installation options are available &lt;a href="https://github.com/abiosoft/colima#installation" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For a smoother experience, add Colima &lt;a href="https://github.com/abiosoft/colima/blob/main/cmd/completion.go" rel="noopener noreferrer"&gt;autocompletion&lt;/a&gt; to your terminal.&lt;br&gt;
Finally, run &lt;code&gt;colima start&lt;/code&gt; to start a default instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;colima start
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0000] preparing network ...                         &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;vm
INFO[0000] starting ...                                  &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;vm
INFO[0022] provisioning ...                              &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker
INFO[0022] starting ...                                  &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker
INFO[0027] &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Runtimes
&lt;/h3&gt;

&lt;p&gt;Two container runtimes are supported by Colima: Docker (default) and containerd.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker
&lt;/h4&gt;

&lt;p&gt;Docker is Colima's default runtime, meaning features from Docker are available out of the box.&lt;br&gt;
&lt;code&gt;docker&lt;/code&gt; and &lt;code&gt;docker-compose&lt;/code&gt; CLIs are required to use Docker with Colima. &lt;code&gt;brew install docker docker-compose&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  containerd
&lt;/h4&gt;

&lt;p&gt;containerd is available by running &lt;code&gt;colima start -r containerd&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: containerd is not covered in this article. More details are available &lt;a href="https://github.com/abiosoft/colima/blob/main/README.md#containerd" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Kubernetes
&lt;/h3&gt;

&lt;p&gt;Colima includes a standalone &lt;a href="https://k3s.io/" rel="noopener noreferrer"&gt;K3s&lt;/a&gt; server, so you can manage a Kubernetes cluster using &lt;code&gt;colima start -k&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;They are other options available with the Kubernetes cluster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;picking a specific runtime with the &lt;code&gt;-r&lt;/code&gt; flag;&lt;/li&gt;
&lt;li&gt;deploying an ingress controller &lt;a href="https://github.com/traefik/traefik" rel="noopener noreferrer"&gt;Traefik&lt;/a&gt; with the &lt;code&gt;--kubernetes-ingress&lt;/code&gt; flag;&lt;/li&gt;
&lt;li&gt;selecting a Kubernetes version with the &lt;code&gt;--kubernetes-version&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last but not the least, &lt;code&gt;kubectl&lt;/code&gt; is required to use Kubernetes by running &lt;code&gt;brew install kubectl&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: A future post will cover Kubernetes management with Colima. Stay tuned!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Customizing the VM
&lt;/h3&gt;

&lt;p&gt;The default &lt;code&gt;colima start&lt;/code&gt; will set up an instance with 2 GB memory, 2 CPUs, 60 GB disk and a Docker runtime.&lt;/p&gt;

&lt;p&gt;You can easily customize your instance by using flags.&lt;br&gt;
As an example, &lt;code&gt;colima start -c 5 -m 4 -d 100&lt;/code&gt; will start a 4 GB memory with 5 CPUs, an 100 GB disk and a Docker runtime instance.&lt;br&gt;
To get the full list of available options, run &lt;code&gt;colima start -h&lt;/code&gt; .&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;colima start &lt;span class="nt"&gt;-h&lt;/span&gt;
Start Colima with the specified container runtime and optional kubernetes.

Colima can also be configured with a YAML file.
Run &lt;span class="s1"&gt;'colima template'&lt;/span&gt; to &lt;span class="nb"&gt;set &lt;/span&gt;the default configurations or &lt;span class="s1"&gt;'colima start --edit'&lt;/span&gt; to customize before startup.

Usage:
  colima start &lt;span class="o"&gt;[&lt;/span&gt;profile] &lt;span class="o"&gt;[&lt;/span&gt;flags]

Examples:
  colima start
  colima start &lt;span class="nt"&gt;--edit&lt;/span&gt;
  colima start &lt;span class="nt"&gt;--runtime&lt;/span&gt; containerd
  colima start &lt;span class="nt"&gt;--kubernetes&lt;/span&gt;
  colima start &lt;span class="nt"&gt;--runtime&lt;/span&gt; containerd &lt;span class="nt"&gt;--kubernetes&lt;/span&gt;
  colima start &lt;span class="nt"&gt;--cpu&lt;/span&gt; 4 &lt;span class="nt"&gt;--memory&lt;/span&gt; 8 &lt;span class="nt"&gt;--disk&lt;/span&gt; 100
  colima start &lt;span class="nt"&gt;--arch&lt;/span&gt; aarch64
  colima start &lt;span class="nt"&gt;--dns&lt;/span&gt; 1.1.1.1 &lt;span class="nt"&gt;--dns&lt;/span&gt; 8.8.8.8

Flags:
      &lt;span class="nt"&gt;--activate&lt;/span&gt;                    &lt;span class="nb"&gt;set &lt;/span&gt;as active Docker/Kubernetes context on startup &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-a&lt;/span&gt;, &lt;span class="nt"&gt;--arch&lt;/span&gt; string                 architecture &lt;span class="o"&gt;(&lt;/span&gt;aarch64, x86_64&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"aarch64"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-c&lt;/span&gt;, &lt;span class="nt"&gt;--cpu&lt;/span&gt; int                     number of CPUs &lt;span class="o"&gt;(&lt;/span&gt;default 2&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;--cpu-type&lt;/span&gt; string             the CPU &lt;span class="nb"&gt;type&lt;/span&gt;, options can be checked with &lt;span class="s1"&gt;'qemu-system-aarch64 -cpu help'&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt;, &lt;span class="nt"&gt;--disk&lt;/span&gt; int                    disk size &lt;span class="k"&gt;in &lt;/span&gt;GiB &lt;span class="o"&gt;(&lt;/span&gt;default 60&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-n&lt;/span&gt;, &lt;span class="nt"&gt;--dns&lt;/span&gt; ipSlice                 DNS servers &lt;span class="k"&gt;for &lt;/span&gt;the VM &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="o"&gt;[])&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt;, &lt;span class="nt"&gt;--edit&lt;/span&gt;                        edit the configuration file before starting
      &lt;span class="nt"&gt;--editor&lt;/span&gt; string               editor to use &lt;span class="k"&gt;for &lt;/span&gt;edit e.g. vim, nano, code &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$EDITOR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nb"&gt;env &lt;/span&gt;var&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;--env&lt;/span&gt; stringToString          environment variables &lt;span class="k"&gt;for &lt;/span&gt;the VM &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="o"&gt;[])&lt;/span&gt;
  &lt;span class="nt"&gt;-h&lt;/span&gt;, &lt;span class="nt"&gt;--help&lt;/span&gt;                        &lt;span class="nb"&gt;help &lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;start
  &lt;span class="nt"&gt;-k&lt;/span&gt;, &lt;span class="nt"&gt;--kubernetes&lt;/span&gt;                  start with Kubernetes
      &lt;span class="nt"&gt;--kubernetes-ingress&lt;/span&gt;          &lt;span class="nb"&gt;enable &lt;/span&gt;Traefik ingress controller
      &lt;span class="nt"&gt;--kubernetes-version&lt;/span&gt; string   must match a k3s version https://github.com/k3s-io/k3s/releases &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"v1.25.0+k3s1"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-l&lt;/span&gt;, &lt;span class="nt"&gt;--layer&lt;/span&gt;                       &lt;span class="nb"&gt;enable &lt;/span&gt;Ubuntu container layer
  &lt;span class="nt"&gt;-m&lt;/span&gt;, &lt;span class="nt"&gt;--memory&lt;/span&gt; int                  memory &lt;span class="k"&gt;in &lt;/span&gt;GiB &lt;span class="o"&gt;(&lt;/span&gt;default 2&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-V&lt;/span&gt;, &lt;span class="nt"&gt;--mount&lt;/span&gt; strings               directories to mount, suffix &lt;span class="s1"&gt;':w'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;writable
      &lt;span class="nt"&gt;--mount-type&lt;/span&gt; string           volume driver &lt;span class="k"&gt;for &lt;/span&gt;the mount &lt;span class="o"&gt;(&lt;/span&gt;sshfs, 9p&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"sshfs"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
      &lt;span class="nt"&gt;--network-address&lt;/span&gt;             assign reachable IP address to the VM
      &lt;span class="nt"&gt;--network-driver&lt;/span&gt; string       network driver to use &lt;span class="o"&gt;(&lt;/span&gt;slirp, gvproxy&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"gvproxy"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-r&lt;/span&gt;, &lt;span class="nt"&gt;--runtime&lt;/span&gt; string              container runtime &lt;span class="o"&gt;(&lt;/span&gt;docker, containerd&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"docker"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-s&lt;/span&gt;, &lt;span class="nt"&gt;--ssh-agent&lt;/span&gt;                   forward SSH agent to the VM

Global Flags:
  &lt;span class="nt"&gt;-p&lt;/span&gt;, &lt;span class="nt"&gt;--profile&lt;/span&gt; string   profile name, &lt;span class="k"&gt;for &lt;/span&gt;multiple instances &lt;span class="o"&gt;(&lt;/span&gt;default &lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt;, &lt;span class="nt"&gt;--verbose&lt;/span&gt;          &lt;span class="nb"&gt;enable &lt;/span&gt;verbose log
      &lt;span class="nt"&gt;--very-verbose&lt;/span&gt;     &lt;span class="nb"&gt;enable &lt;/span&gt;more verbose log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To stop your running instance, run &lt;code&gt;colima stop&lt;/code&gt;.&lt;br&gt;
To delete it, run &lt;code&gt;colima delete&lt;/code&gt;. All associated items will be deleted (images, containers, volumes...).&lt;/p&gt;
&lt;h4&gt;
  
  
  Multi-profiles management
&lt;/h4&gt;

&lt;p&gt;One of the most exciting Colima features is instances management. To do so, Colima is using profiles.&lt;/p&gt;

&lt;p&gt;To create an instance with a profile name, add the &lt;code&gt;-p&lt;/code&gt; flag to the command line.&lt;br&gt;
For example, &lt;code&gt;colima start -p funny_profile&lt;/code&gt; will create a default instance with &lt;code&gt;funny_profile&lt;/code&gt; as profile name.&lt;br&gt;
&lt;code&gt;colima start -p intel -a x86_64 -c 1&lt;/code&gt; will start an intel instance with 1 CPU using the &lt;code&gt;intel&lt;/code&gt; name.&lt;/p&gt;

&lt;p&gt;You can retrieve your current profiles by running &lt;code&gt;colima list&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: Profile name must be unique. If the name is not given when starting an instance, &lt;code&gt;default&lt;/code&gt; will be the default name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To stop your instance, run &lt;code&gt;colima stop&lt;/code&gt; with &lt;code&gt;-p &amp;lt;PROFILE&amp;gt;&lt;/code&gt; &lt;em&gt;(&amp;lt;PROFILE&amp;gt; is your instance name).&lt;/em&gt;&lt;br&gt;
To delete a profile, run &lt;code&gt;colima delete&lt;/code&gt; with &lt;code&gt;-p &amp;lt;PROFILE&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Editing an instance
&lt;/h3&gt;

&lt;p&gt;It is possible to customize an instance before starting it using flags, or by running the &lt;code&gt;start&lt;/code&gt; command with the &lt;code&gt;-e&lt;/code&gt; flag.&lt;br&gt;
Your terminal editor will open the instance configuration file to be edited. After modification, the instance will start.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Once created, each configuration property is editable except the disk size.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Multi-architecture management
&lt;/h4&gt;

&lt;p&gt;The second great feature of Colima is the CPU architecture emulation (i.e. aarch64, x86_64), available with the &lt;code&gt;-a&lt;/code&gt; flag.&lt;br&gt;
Let's say you got an M1 laptop and the desired docker image does not have an aarch64 version.&lt;br&gt;
By switching or creating a specific amd64 instance, you will be able to run the image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Default with Intel architecture&lt;/span&gt;
colima start &lt;span class="nt"&gt;-a&lt;/span&gt; x86_64

&lt;span class="c"&gt;# Default with arm architecture&lt;/span&gt;
colima start &lt;span class="nt"&gt;-a&lt;/span&gt; aarch64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Colima vs Docker Desktop
&lt;/h2&gt;

&lt;p&gt;Time to get our hands dirty! Let's run some scripts to compare Colima and Docker Desktop performance.&lt;/p&gt;

&lt;p&gt;For the purpose of the tests, we gonna compare I/O using volumes and (^) calculation inside the container.&lt;br&gt;
Both VMs have the same configuration (2Gb memory, 2 CPUs, 60Gb disk).&lt;br&gt;
Files management and CPU stress load will be triggered using the official &lt;code&gt;alpine&lt;/code&gt; Docker image.&lt;/p&gt;

&lt;p&gt;Please find the testing scripts on &lt;a href="https://github.com/ths83/colima-blog" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  I/O
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Using a &lt;a href="https://docs.docker.com/storage/bind-mounts" rel="noopener noreferrer"&gt;bind volume&lt;/a&gt; (host)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo9wt61kkl92gtgmxj32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo9wt61kkl92gtgmxj32.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VM&lt;/th&gt;
&lt;th&gt;Create 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Read 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Copy 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Create 10000 4Kb files (MB/s)&lt;/th&gt;
&lt;th&gt;Delete folder (MB/s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Colima&lt;/td&gt;
&lt;td&gt;165.29&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;126.58&lt;/td&gt;
&lt;td&gt;24.27&lt;/td&gt;
&lt;td&gt;61.54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker Desktop&lt;/td&gt;
&lt;td&gt;176.99&lt;/td&gt;
&lt;td&gt;133.33&lt;/td&gt;
&lt;td&gt;112.42&lt;/td&gt;
&lt;td&gt;20.96&lt;/td&gt;
&lt;td&gt;31.75&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Using a &lt;a href="https://docs.docker.com/storage/volumes" rel="noopener noreferrer"&gt;Docker volume&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frb3sytc5m5q50q7jpywr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frb3sytc5m5q50q7jpywr.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VM&lt;/th&gt;
&lt;th&gt;Create 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Read 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Copy 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Create 10000 4Kb files (MB/s)&lt;/th&gt;
&lt;th&gt;Delete folder (MB/s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Colima&lt;/td&gt;
&lt;td&gt;2222.22&lt;/td&gt;
&lt;td&gt;6666.67&lt;/td&gt;
&lt;td&gt;4000&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;2500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker Desktop&lt;/td&gt;
&lt;td&gt;748.31&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;1538.46&lt;/td&gt;
&lt;td&gt;1333.33&lt;/td&gt;
&lt;td&gt;1052.63&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Using the container
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8se1vl5cxq7i8dw0e91n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8se1vl5cxq7i8dw0e91n.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VM&lt;/th&gt;
&lt;th&gt;Create 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Read 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Copy 200Mb file (MB/s)&lt;/th&gt;
&lt;th&gt;Create 10000 4Kb files (MB/s)&lt;/th&gt;
&lt;th&gt;Delete folder (MB/s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Colima&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;6666.67&lt;/td&gt;
&lt;td&gt;4000&lt;/td&gt;
&lt;td&gt;1538.46&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker Desktop&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;1666.67&lt;/td&gt;
&lt;td&gt;952.38&lt;/td&gt;
&lt;td&gt;952.38&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  CPU load
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3mrhoqzrncuy07jkpbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3mrhoqzrncuy07jkpbc.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Colima's performance is way better than &lt;em&gt;Docker Desktop&lt;/em&gt;**, especially when performing I/O operations and CPU load. Moreover, features such as profile management and container runtime management are also a great addition to this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are looking for a Docker Desktop alternative on Mac, Colima seems to be the best player for container management.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tested on an M1 Mac Book Pro with Colima v0.4.6, Docker Desktop v4.14.1.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;**&lt;em&gt;Docker Desktop beta features can improve I/O operations by enabling VirtioFS and the new Virtualization framework, but Colima still have the best I/O performance.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>containers</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
