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