CGroups
Control resource allocations (CPU, Memory, Disk, I/O)
Namespaces
Restrict your view of the system (Mounts, PID…)
Slide 19
Slide 19 text
Docker
Toolbox
Slide 20
Slide 20 text
Docker Engine
runs containers
CLI + Docker Daemon
Slide 21
Slide 21 text
$ docker run ubuntu echo Hello
Hello
Docker Engine
Run a container
Slide 22
Slide 22 text
$ docker run -d nginx
61af09d5d50b
Docker Engine
Run a container in « detach » mode
Slide 23
Slide 23 text
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
61af09d5d50b nginx:latest "nginx -g 'daemon of 12 hours ago Up 4 seconds 443/tcp, 80/tcp
Docker Engine
List running containers
Slide 24
Slide 24 text
Docker Hub
Cloud Service
Share containers
Automatic build of images
Slide 25
Slide 25 text
Docker
Images
Slide 26
Slide 26 text
Images represents the
state of a container
Slide 27
Slide 27 text
Create Images
from a container
$ docker commit 61af09d5d50b
10b9b93d189b
Slide 28
Slide 28 text
Create Images
from a Dockerfile
$ docker build -t myimage .
Slide 29
Slide 29 text
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y mongodb-org
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
EXPOSE 28017
ENTRYPOINT ["mongod"]
Docker creates containers in its
Own internal network
with their
Own IP address
Slide 33
Slide 33 text
Host
eth0
192.168.0.12
docker0
172.17.42.1
Slide 34
Slide 34 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
Slide 35
Slide 35 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
Container B
Slide 36
Slide 36 text
What happens
When…
Slide 37
Slide 37 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
$ ping 172.17.42.3
Container B
Slide 38
Slide 38 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
$ ping 172.17.42.3
Container B
Slide 39
Slide 39 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
$ ping google.fr
Container B
Slide 40
Slide 40 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
$ ping 172.17.42.2
X
Container B
Slide 41
Slide 41 text
Port Mapping
Bind a port on the host with a port on the container
$ docker run -d -p 80:8080 webapp
Slide 42
Slide 42 text
Container A
Host
eth0
172.17.42.2
eth0
192.168.0.12
docker0
172.17.42.1
eth0
172.17.42.3
$ docker run -d -p 80:8080 A
$ telnet 192.168.0.12 80
:8080
:80
Container B
Slide 43
Slide 43 text
Docker
Links
Bind containers together
Slide 44
Slide 44 text
Disclaimer:
Only works on the
same host
Slide 45
Slide 45 text
Links
Bind containers together
$ sudo docker run -d --name dbcont dbimage
$ sudo docker run -d -P --name web \
--link dbcont:db webapp
Slide 46
Slide 46 text
Links
What it does - Injects Environment variables
$ sudo docker run -d -P --name web \
--link dbcont:db webapp env
DB_NAME=/web/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_ADDR=172.17.0.5
Slide 47
Slide 47 text
Links
What it does - Updates container /etc/hosts
$ sudo docker run -P --name web \
--link dbcont:db webapp env
root@aed84ee21bde:/opt/webapp# cat /etc/hosts
172.17.0.7 aed84ee21bde
. . .
172.17.0.5 db
Slide 48
Slide 48 text
Docker
Volumes
Manage data in containers
Slide 49
Slide 49 text
Volumes
Sharing volumes between the host and containers
sudo docker run -d \
-v /src/webapp:/opt/webapp \
webapp
Slide 50
Slide 50 text
Volumes
Sharing volumes between containers
$ sudo docker run -d \
-v /dbdata --name dbdata \
database
$ sudo docker run -d \
--volumes-from dbdata database
Slide 51
Slide 51 text
Docker
Orchestration
Slide 52
Slide 52 text
Using Docker
containers on a Single
machine is Simple
Slide 53
Slide 53 text
Orchestrating Docker
containers on Multiple
nodes is Hard
Slide 54
Slide 54 text
Config file based tools
Fleet, Fig, Maestro, Ansible, Terraform…
API based tools
Mesos, Helios, Kubernetes…
PaaS Solutions
Flynn, Deis, OpenShift, CloudFoundry (Diego)…
OpenStack
Solum, nova-docker…
Fleet
systemd, etcd, (works great with CoreOS)
Start a fleet Unit
$ fleetctl start myapp.service
List all units
$ fleetctl list-units
UNIT MACHINE ACTIVE SUB
myapp.service c9de9451.../10.10.1.3 active running
apache.1.service 491586a6.../10.10.1.2 active running
apache.2.service 148a18ff.../10.10.1.1 active running
List "fleet enables" machines
$ fleetctl list-machines
MACHINE IP METADATA
148a18ff-6e95-4cd8-92da-c9de9bb90d5a 10.10.1.1 -
491586a6-508f-4583-a71d-bfc4d146e996 10.10.1.2 -
c9de9451-6a6f-1d80-b7e6-46e996bfc4d1 10.10.1.3 -
Slide 57
Slide 57 text
Apache Mesos
Cluster Manager
Orchestrate applications deployment on a
Shared pool of resources
Slide 58
Slide 58 text
Kubernetes
Containers the Google way
Originally designed for Google
internal container cluster management
API and CLI to orchestrate containers
Use Providers for the underlying Infrastructure
Slide 59
Slide 59 text
OpenStack
Nova-Docker
Hypervisor driver for OpenStack Nova Compute
Launch Containers as VMs
Store Images in Glance
OpenStack
Heat - the Orchestration Engine
heat_template_version: 2013-05-23
description: >
Heat template to deploy Docker containers to an existing host
resources:
nginx-01:
type: DockerInc::Docker::Container
properties:
image: nginx
docker_endpoint: 'tcp://192.168.1.207:2345'
Slide 62
Slide 62 text
OpenStack
Solum, CI/CD for OpenStack
describe development pipelines (dev -> stage…)
run unit tests in containers
create heat stacks for integration tests
manage heat stacks for environments
Slide 63
Slide 63 text
Docker
Service Discovery
Slide 64
Slide 64 text
Containers need to
discover its peers
Slide 65
Slide 65 text
Environment variables
Inject environment variable at runtime
$ docker run \
-e SQL_IP=192.168.1.21 \
-e SQL_PORT=3306 \
webapp
Slide 66
Slide 66 text
bind-mount
Inject configuration files at runtime
$ docker run \
-v /home/user/sql.conf:/sql.conf \
webapp
Slide 67
Slide 67 text
DNS
Add DNS records for each service
Slide 68
Slide 68 text
Ambassador Pattern
Delegate multi-host service discovery to an Ambassador
Slide 69
Slide 69 text
Host DB
DB Container
Host Web
Web Container
?
Slide 70
Slide 70 text
Host DB
DB Container
Ambassador
Host Web
Web Container
Ambassador
docker link
docker link
Slide 71
Slide 71 text
Host DB
DB Container
Ambassador
Host Web
Web Container
Ambassador
docker link
docker link
Slide 72
Slide 72 text
Host DB
DB Container
Ambassador
Host Web
Web Container
Ambassador
docker link
docker link
?
Slide 73
Slide 73 text
Ambassador Pattern
The solutions
Grand Ambassador
https://github.com/cpuguy83/docker-grand-ambassador
Key-value
Consul, etcd…