Slide 1

Slide 1 text

Docker AND ITS ECOSYSTEM

Slide 2

Slide 2 text

Julien Vey Numergy @julienvey Pierre Padrixe Numergy @undefd About us…

Slide 3

Slide 3 text

The reason behind Docker

Slide 4

Slide 4 text

« Works on my machine » We all said it once

Slide 5

Slide 5 text

The Matrix from hell My Machine Your Machine QA Staging Prod Web App ? ? ? ? ? Back Office ? ? ? ? ? Queue ? ? ? ? ? Workers ? ? ? ? ? DB ? ? ? ? ?

Slide 6

Slide 6 text

The Analogy ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Slide 7

Slide 7 text

The shipping container

Slide 8

Slide 8 text

Why it works for Industry

Slide 9

Slide 9 text

Standard size everything can be built to manipulate containers Focus on real work Shipping companies only care about shipping container

Slide 10

Slide 10 text

The Analogy

Slide 11

Slide 11 text

The Matrix from hell My Machine Your Machine QA Staging Prod Web App Back Office Queue Workers DB

Slide 12

Slide 12 text

Containers Virtual Machines vs

Slide 13

Slide 13 text

Bare Metal OS Hypervisor OS Guest Application VM OS Guest Application VM Bare Metal OS D o c k e r Application Container Application Container

Slide 14

Slide 14 text

Why Containers ?

Slide 15

Slide 15 text

Lightweight Fast Spawn Performance Isolated

Slide 16

Slide 16 text

Docker Internals

Slide 17

Slide 17 text

Linux Kernel Layer FS (DeviceMapper, AUFS) CGROUPS Namespaces Container Technology (LXC, LibContainer…) Docker

Slide 18

Slide 18 text

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"]

Slide 30

Slide 30 text

Distribute Images on Docker Hub $ docker push myuser/myimage $ docker pull myuser/myimage

Slide 31

Slide 31 text

Docker Networking

Slide 32

Slide 32 text

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…

Slide 55

Slide 55 text

Fleet systemd, etcd… [Unit] Description=My Apache Frontend After=docker.service Requires=docker.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill apache1 ExecStartPre=-/usr/bin/docker rm apache1 ExecStartPre=/usr/bin/docker pull coreos/apache ExecStart=/usr/bin/docker run -rm --name apache1 -p 80:80 coreos/apache /usr/sbin/apache2ctl ExecStop=/usr/bin/docker stop apache1 [X-Fleet] Conflicts=apache.*.service

Slide 56

Slide 56 text

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

Slide 60

Slide 60 text

OpenStack Heat - the Orchestration Engine heat_template_version: 2013-05-23 description: A load-balancer server parameters: image: type: string key_name: type: string flavor: type: string resources: server: type: OS::Nova::Server properties: flavor: {get_param: flavor} image: {get_param: image} key_name: {get_param: key_name}

Slide 61

Slide 61 text

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…

Slide 74

Slide 74 text

Thank you! Questions ?