Introduction to Docker

Docker is an open-source Linux container technology

Speaking Containers...

Brief History of Docker

1979 - Unix chroot

2000 - FreeBSD jails

2004 - Solaris Containers

2005 - Open Virtuozzo (required patched kernel)

2006 - Google Process Containers (cgroups)

2008 - LXC (cgroups+namespaces; no kernel patching)

2013 - LMCTFY (Google's Let Me Contain That for You - contributed to libcontainer)

2013 - Docker (initially dotCloud project)

Containers vs Physical vs Virtual

Docker Ingredients

  • cgroups ('control groups') - limit/ accounts for/ isolate CPU, Mem, I/O usage for a collection of processes
  • namespaces - isolates and virtualise system resources. Docker supports PIDs, mount points, shared memory, network, hostnames namespaces. UID namespaces can be turned on.
  • A union filesystem (i.e. aufs, unionfs)

Docker Ingredients

... plus

  • simple to use CLI tool
  • API
  • Portability - via Dockerfile or an image
  • Share images via Docker Registries (public and private)
  • Ability to link running docker instances (via CLI or docker-compose)
  • Works on Linux, Mac, Windows
  • Clustering (Swarm, Kubernetes, Marathon, Nomad)

Benefits of Docker

  • Development-Test-QA-Production parity. "Build once - run anywhere".
  • Predictable and repeatable deployment process of an application and its dependencies.
  • Ability to easy upgrade/rollbacks and implement 'blue/green' types of deployments
  • Promote/encourages/enforces good practice. I.e. with docker it is easy to standartise service discovery, logging, monitoring/alerting, security aspects.
  • Cost effectiveness - allows for a denser deployment than the conventional VMs
  • Dev productivity (i.e. tools packaged as docker images)

Introduction to Docker

By Victor Orlov

Introduction to Docker

  • 417