Podman Logo

I have a problem. My daily laptop is a MacBook Pro, which is great unless you want to dual boot into Linux and develop on containers. While it is simple enough to install Red Hat CodeReady Containers, what I really needed was a way to run Buildah, Podman, and skopeo on macOS without having to water and feed a Linux VM.

Look no further: Podman-machine has somewhat solved this problem.

Podman-machine

Podman-machine starts a virtual machine that already streamlines the Podman, Buildah, and skopeo packages. The developers released two VM flavors: an in-memory Tiny Core and a Fedora version.

You have the option of compiling additional driver support for hypervisors like xhyve, but I would recommend VirtualBox as it seems to work more smoothly.

Getting started

My instructions are based on the official ones here. The guide also assumes you have VirtualBox already installed.

Start by downloading the latest podman-machine binary. At the time of this writing, the latest release was v0.16:

$ curl -L https://github.com/boot2podman/machine/releases/download/v0.16/podman-machine.darwin-amd64 --output /usr/local/bin/podman-machine
chmod +x 

Setting up your VM

Then, create a boot2podman VM. I am using a Fedora 31 virtual machine with 4GB of RAM, and I attached my local ~/Code directory to this VM.

I updated the image to Fedora 31 and allowed rootless image building. The image should make it to the official repo. In the meantime, I referenced the development release below:

$ podman-machine create --virtualbox-boot2podman-url https://github.com/snowjet/boot2podman-fedora-iso/releases/download/d1bb19f/boot2podman-fedora.iso --virtualbox-memory="4096" --virtualbox-share-folder ~/Code:code fedbox

You now have a VM with a persistent disk for container images, but it runs the OS in memory. You can log into the VM and view your shared directory at /sf_code:

$ podman-machine ssh fedbox

ls /sf_code
total 12
drwxrwx---.  1 root vboxsf  128 Jan 13 21:15 .
dr-xr-xr-x. 18 root root   4096 Jan 14 22:42 ..
drwxrwx---.  1 root vboxsf  480 Aug 28 05:40 container-proj

Setting up your container

Now, let's run a container and communicate with it:

$ podman-machine ssh fedbox
$ podman run -p 8080:80/tcp --rm httpd
Trying to pull docker.io/library/httpd...
Getting image source signatures
Copying blob 27298e4c749a done
Copying blob 354e6904d655 done
Copying blob 36412f6b2f6e done
Copying blob 10e27104ba69 done
Copying blob 8ec398bc0356 [======================================] 25.8MiB / 25.8MiB
Copying config c2aa7e16ed [======================================] 7.2KiB / 7.2KiB
Writing manifest to image destination
Storing signatures
...
[Thu Jan 16 01:28:19.051375 2020] [core:notice] [pid 1:tid 140000832345216] AH00094: Command line: 'httpd -D FOREGROUND'

In another terminal, run:

$ podman-machine ip fedbox
192.168.99.122
$ curl http://192.168.99.122:8080
It works!

Finally, you can create containers on your Mac and communicate with them.

Closing your workspace

To stop and clean up your workspace, run:

$ podman-machine stop fedbox
$ podman-machine rm fedbox

Now you can easily build, run, and push containers from your Mac.

Last updated: June 29, 2020