Who I am?
• Robert Reiz
• Software Developer
• I started VersionEye
• Software Dev since 1998
Started 2009 DevOps Days in Belgium
DevOps is all about working together. About agile Infrastructure.
Youbuildit.Yourunit.Youtakeresponsibilityforit!
Shipment
without
Containers
1956 Malcom McLean introduced the 40’Container - ISO 668.
> 15 Million inst.
2/3
of global trade run
over 40’Containers!
The Logistic Problem
Same Problem in Software Dev.
Java ? ? ?
Ruby ? ? ?
Node.JS ? ? ?
MySQL ? ? ?
Dev-Env. Test-Env. Prod-Env.
Java JKD 1.8.14 - Win32 JKD 1.8.1 - Lnx-64 JDK 1.7-patch UNX
Ruby 2.2.2 rvm 2.2.1 nat MRI 2.1.0 rubinius
Node.JS 4.0 win 4.0 Linux 4.0 Linux
MySQL 5.5 win 5.0 Linux 5.0 Linux
Dev-Env. Test-Env. Prod-Env.
Java .WAR / .EAR .WAR / .EAR .WAR / .EAR
Ruby GEM / GIT GEM / GIT GEM / GIT
Node.JS ZIP / GIT ZIP / GIT ZIP / GIT
MySQL .dmg .exe .dep
Dev-Env. Test-Env. Prod-Env.
Java
Ruby
Node.JS
MySQL
Dev-Env. Test-Env. Prod-Env.
What is Docker?
What is Docker?
❖ Open Source Project started in March 2013
❖ From the makes of dotCloud (PaaS).
❖ Received $162 Million Funding.
❖ Community grows rapidly!
What is Docker?
❖ Tiny VM (25 MB)
❖ Linux based - LXC Interface / libcontainer
❖ Own Namespaces and Cgroups!
❖ Shared resources with host system.
❖ It doesn’t work natively on Windows! Not yet!
Build - Ship - Run
Docker-Hub
Build RUN
RUN
RUN
docker push
docker pull
Server Farm Production
Build
Dockerfile
FROM ubuntu:14.10
MAINTAINER Robert Reiz <reiz@versioneye.com>
ENV LANG en_US.UTF-8
RUN apt-get update
RUN apt-get install -y --force-yes -q nginx
ADD nginx.conf /etc/nginx/nginx.conf
CMD nginx
EXPOSE 80
Build - Dockerfile
> docker build -t reiz/nginx:1.0.0 .
docker image => reiz/nginx:1.0.0
Ship
Ship Docker Image
> docker push reiz/nginx:1.0.0
Run
Fetch a Docker Image
> docker pull reiz/nginx:1.0.0
Download docker image reiz/nginx:1.0.0 from Docker Hub to local
Docker repository.
Run a Docker Container
> docker run reiz/nginx:1.0.0
Creates a Docker container out of the Docker image reiz/nginx:1.0.0.
It runs the nginx process.
More Commands
> docker stop <container_id>
> docker start <container_id>
> docker top <container_id>
> docker logs <container_id>
> docker rm <container_id>
Important
❖ A Docker Container doesn’t store state!
❖ You can not ssh into a Docker Container!
❖ A container is supposed to run 1 process!
Shell
Get a Shell
> docker run -it reiz/mongodb:1.0.2 /bin/bash
Starts a new Docker container with an active shell.
Get a Shell
> docker exec -it mongodb /bin/bash
Executes a command on a running contianer
Volumes
Mount a Volume
> docker run -v/mnt/mongodb:/data -d reiz/mongodb:1.0.2
Mounts “/mnt/mongodb” directory into the Docker container as “/data”.
Keep the data on the host. That’s how you keep data persisted.
Environment Variables
Set environment variables
> docker run --envLANG=en_US.UTF-8 -d reiz/mongodb:1.0.2
You can overwrite ENV variables from the Dockerfile here and also define
completely new ones.
Links
Link Docker Containers
> docker run —name mongodb -d versioneye/mongodb:1.0.2
> docker run —linkmongodb:mongo versioneye/api:1.0.0
MONGO_PORT=tcp://172.1.10.1:27017
MONGO_PORT_27017_TCP=tcp://172.1.10.1:27017
MONGO_PORT_27017_TCP_ADDR=172.1.10.1
MONGO_PORT_27017_TCP_PORT=27017
MONGO_PORT_27017_TCP_PROTO=tcp
Environmentvariablesareinjectedin2ndcontainer:
DEMO
Docker Compose
api:
image: versioneye/rails_api:2.5.7
ports:
- "9090:9090"
container_name: "api"
links:
- mongodb:db
- elasticsearch:es
mongodb:
image: reiz/mongodb:2.6.6_2
container_name: “mongodb"
elasticsearch:
image: reiz/elasticsearch:0.9.1
container_name: "elasticsearch"
docker-compose.yml
describes a whole
set of Docker
containers
Docker Compose
> docker-compose up -d
> docker-compose ps
> docker-compose stop
Docker Compose
> docker-compose build api
> docker-compose up --no-deps -d api
Updating a single container, not ALL of them.
Docker Compose
> docker-compose scale worker=3
Scaling up containers
DEMO
Docker Machine
> docker-machine create --driver virtualbox dev
Docker Machine: create, manage and remote control
docker machines/hosts.
BETA
Docker Machine
> docker-machine ls
> eval "$(docker-machine env dev)"
> docker ps
DEMO
Docker Swarm
DockerNode
DockerNode
DockerNode
DockerMaster
DockerSwarm
DockerClient
docker run
ServiceDiscovery
BETA
Continuous Testing with Docker Containers
Storage Driver
❖ AUFS
❖ devicemapper
DON’TUSE
DEVICEMAPPER!
Link Docker Containers
Linking only works on same hosts!
Service Discovery
Service Discovery
❖ Environment Variables
❖ Mount configuration via volumes
❖ Use a service like: etcd, zookeeper etc…
Orchestration
Docker Orchestration
❖ Docker Swarm
❖ CM-Tools (Chef, Puppet, Ansible, Salt)
❖ Kubernetes
❖ Mesos
? ? ?
@RobertReiz
https://www.versioneye.com/go/docker:docker

Docker Introduction