Introduction into Docker

Daniel Banck, @dbanck

Was ist Docker?

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications.

Demo #1

Begriffe

  • Container
  • Image
  • Tag
  • Engine
  • Client
  • Hub

Container

A container is a self contained execution environment that shares the kernel of the host system and which is (optionally) isolated from other containers in the system.

VM vs. Container

Image

A Docker image is a read-only template. For example, an image could contain an Ubuntu operating system with Apache and your web application installed. Images are used to create Docker containers.

Tagging Images

$ docker tag 5db5f8471261 ouruser/sinatra:devel

$ docker images ouruser/sinatra
REPOSITORY          TAG     IMAGE ID      CREATED        VIRTUAL SIZE
ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 MB
ouruser/sinatra     devel   5db5f8471261  11 hours ago   446.7 MB
ouruser/sinatra     v2      5db5f8471261  11 hours ago   446.7 MB

Engine

Client

Hub

Docker Hub is the central hub for Docker. It hosts public Docker images and provides services to help you build and manage your Docker environment.

Erstellung

manuell oder automatisiert?

Manuell

Tutorial: https://www.docker.com/tryit/

Automatisiert

Dockerfile

Dockerfile?

FROM debian:jessie

MAINTAINER Stuart P. Bentley <stuart@testtrack4.com>

# Add the RethinkDB repository and public key
RUN apt-key adv --keyserver pgp.mit.edu --recv-keys \
	1614552E5765227AEC39EFCFA7E00EF33A8F2399
RUN echo "deb http://download.rethinkdb.com/apt jessie main" \
	> /etc/apt/sources.list.d/rethinkdb.list

ENV RETHINKDB_PACKAGE_VERSION 2.0.2~0jessie

RUN apt-get update \
	&& apt-get install -y rethinkdb=$RETHINKDB_PACKAGE_VERSION \
	&& rm -rf /var/lib/apt/lists/*

VOLUME ["/data"]

WORKDIR /data

CMD ["rethinkdb", "--bind", "all"]

# process cluster webui
EXPOSE 28015 29015 8080

Demo #2

$ brew install docker
$ brew install docker-machine

# VirtualBox should already be installed
$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL

$ docker-machine create --driver virtualbox dev
[...]

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376

$ docker-machine env dev | source

$ docker ps -a

$ docker run --rm -it ubuntu:14.04

Mehrere Container

Linking

# RethinkDB Cluster
docker run -p 8080 --name rethink1 rethinkdb:latest

docker run --link rethink1 --name rethink2 rethinkdb:latest

# Simple App using RethinkDB
docker run --link rethink1 --name my-app app

docker-compose

db:
  image: postgres:9.3

redis:
  image: redis:2.8.13

backend:
  image: productmate/webapp:latest
  working_dir: /home/user/app
  command: /home/user/.rvm/bin/app_bundle exec rails s
  environment:
    - RAILS_ENV=development
  volumes:
    - ../webapp:/home/user/app
  links:
    - db
    - redis

Data volumes

A data volume is a specially-designated directory within one or more containers that bypasses the Union File System. Data volumes provide several useful features for persistent or shared data

Data Volume Container

If you have some persistent data that you want to share between containers, or want to use from non-persistent containers, it's best to create a named Data Volume Container, and then to mount the data from it.

Production?

  • Apache Mesos / Mesosphere
  • Google Kubernetes
  • Docker Swarm
  • Shipyard
  • Panamax
  • CoreOS Fleet
  • Rancher
    Etc, etc, etc...

Fragen?

Ausblick

Introduction into Docker

By Daniel Banck

Introduction into Docker

  • 2,063