Docker Knowledge

Kip Landergren

(Updated: )

My Docker knowledge base explaining how containerization integrates into a build and development process.

Contents

Overview

Docker is a tool for operating system level virtualization. An isolated area of the host system is created using cgroups and namespaces, and it is through these mechanisms that a container is run.

Core Ideas

Builds Should Be Reproducible

A Dockerfile should create an immutable image.

Apps Should Be Isolated

From their host machines and have defined entry and exit points.

Scaling Should Be Easy

Both up and down.

Key Concepts

Operating System Level Virtualization

Lightweight compared to Virtual Machines / Hypervisors, which allocate dedicated resources beyond what may be actually used.

Docker Terminology

Dockerfile
text file containing all necessary instructions to assemble an image
container
a runnable instance of an image. also a loosely isolated environment
container, service, stack
how docker describes app building, from bottom of hierarchy to the top. a service is how containers behave in production. a stack defines all interactions of services
image
a read-only template with instructions for creating a compute environment

Multi-Stage Builds

Use when you have multiple intermediate products generated in the course of your build. By using Docker’s multi-stage build capability you can simplify your Dockerfile(s), reduce disk usage, and improve performance through caching.

Each FROM statement starts a new stage of the build, which are referable by their index of appearance. Additionally, they may be named via the AS statement:

FROM ruby:2.6-alpine3.10 AS builder

Once referenced, any artifacts may be referenced or copied from other build stages:

COPY --from=builder /usr/app/_site /usr/share/nginx/html