Docker

The new hotness in the Linux container space (because nobody remembers LXC anymore).

Resources

CategoryDateLinkNotes
Base Images2015gliderlabs/alpine

A minimal Alpine Linux base image

phusion/baseimage-docker

an arguably sane Ubuntu base image

CLI2015codekitchen/dinghy

a nice wrapper that sets up a host NFS server and other niceties

Wharfee

a nice CLI wrapper

2014dockersh

Segregate logged in users into different containers

Distros2013Core OS

a lightweight distro focused on containers, since acquired by RedHat

GUI2026Dockge

a self-hosted, stack-oriented Docker Compose manager with a reactive UI

2025Arcane

A Portainer alternative

2016

a simple NodeJS Web UI

2015Portus

A registry front-end that works with the v2 registry and has some user management features.

2014Seagull

A Web UI for container management

Mac Alternatives2026Davit

a native macOS UI for Apple platform containers

2021podman-macos

a menubar item to manage podman machine, which is in turn available on Homebrew

lima

a possible replacement for Docker Desktop on Mac

2019boot2docker-xhyve

a clean way to run Docker inside Hypervisor.framework

Network2018pipework

map physical interfaces to specific containers

2015socketplane

Auto-discovery and OVS for inter-host traffic

2014weave

inter-host tunneling, with encryption

OCI Tools2019docker-slim

performs simple runtime analysis to remove unnecessary libraries and slim down images

2018buildah

a CLI tool for builting OCI container images from Dockerfiles

Orchestration2015Kubernetes

The current industry favorite

Rancher

Still arguably one of the nicer options in 2018

Other runtimes2025container

Apple’s own container host, with a Docker-like interface

2022nerdctl

can be used to manage containers in containerd/k3s

2019podman

aims for 1:1 CLI parity (see also Buildah and Skopeo)

2018Singularity

a different take on containers, not quite OCI compliant

PaaS2026Cloud in a Bottle

self-hosted app platform that deploys web apps from Git repositories using manifests and rootless Podman

2020CapRover

a nice web front-end for Docker Swarm

Tools2026Z-Jail

lightweight Linux sandbox combining namespaces, pivot_root, seccomp-bpf, capability dropping, and verdict auditing

maintenant

Single-container monitoring stack — auto-discovers Docker services, built-in dashboards, alerts, uptime checks, no config needed

2025Container-Compose

docker compose for Apple’s container engine

tart

a macOS VM manager targeting CI/CD applications

Diun

A tool to monitor Docker images and notify when updates are available

tini

a tiny init system for Docker containers, to handle zombie processes and reaping

uncloud

a lightweight clustering and container orchestration tool

unregistry

a tool for directly copying images between servers without a registry.

tilt

a tool for managing local development environments, with a focus on Kubernetes and Docker

2024lazydocker

a nice TUI for Docker management, with usage charts and easy stack/compose viewing (Portainer for terminals)

2023distrobox

a nice wrapper for sandbox management

colima

a macOS VM container manager that replaces Docker desktop and works well with brew.

Setting up boot2docker manually on Parallels

Since I don’t have Parallels Pro, I run Docker on my older Macs like this:

  • Download a recent release and put the ISO someplace safe
  • Create a new VM manually by dragging the ISO to Parallels (use the Shared or NAT network type)
  • After first boot, use fdisk to create a primary partition in /dev/sda and format it using mkfs.ext4 -L boot2docker-data /dev/sda1
  • Reboot so that it gets mounted and used for certificate storage
  • Do brew install docker (which gets you the CLI)
  • Set up port forwarding for port 2376 and a local port to the VM’s SSH port
  • SSH into the VM (docker/tcuser) and copy the *.pem files from /var/lib/boot2docker/tls to your ~/.docker folder
  • Set and export DOCKER_HOST and DOCKER_TLS_VERIFY accordingly:
export DOCKER_HOST=localhost:2376
export DOCKER_TLS_VERIFY=1

Useful Dockerfile Snippets

Base ImageDescriptionDockerfile snippet
UbuntuInstalling the Oracle JDK (and setting the EULA)
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections \
 && add-apt-repository -y ppa:webupd8team/java \
 && apt-get install -y java-common oracle-java8-installer oracle-java8-set-default \
 && rm -rf /var/cache/oracle-jdk8-installer

Building The Docker Registry From Scratch (on ARM, too!)

Very simple, really, once you have installed. Quite quick on a 2, too:

export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
# this fetches godep and golint
go get github.com/tools/godep github.com/golang/lint/golint
# this fetches and builds the registry
go get github.com/docker/distribution/cmd/registry
# test it with the default config
$GOPATH/bin/registry $GOPATH/src/github.com/docker/distribution/cmd/registry/config.yml

Restarting a Container Automatically in Docker Compose

Since watchtower only does updates and not restarts (which seems like a missed opportunity), this simple snippet will restart a container at a specific time every day:

version: "3"
services:

  myservice:
    container_name: myservice
      
  restarter:
    image: docker:cli
    restart: unless-stopped
    volumes: ["/var/run/docker.sock:/var/run/docker.sock"]
    entrypoint: ["/bin/sh","-c"]
    command:
      - |
        while true; do
          current_epoch=$$(date +%s)
          target_epoch=$$(( $$(date -d "05:00" +%s) + 86400 ))
          sleep_seconds=$$(( target_epoch - current_epoch ))
          echo "$$(date) + $$sleep_seconds seconds"
          sleep $$sleep_seconds
          
          docker restart myservice
        done        

This page is referenced in: