docker extended
docker
client
daemon
http :2376
https://github.com/stage1/docker-php
$ docker -H tcp://192.168.10.1:2376 ps
$ export DOCKER_HOST="tcp://192.168.10.1:2376"
$ docker ps
client
local daemon
virtual machine
remote server
docker-machine
docker-machine
- ls
 - create
 - start
 - stop
 - status
 - ssh
 - upgrade
 - rm
 - ...
 
$ docker-machine create --driver virtualbox demo
...
$ docker-machine ls
NAME           ACTIVE   DRIVER       STATE     URL                         SWARM
demo           -        virtualbox   Running   tcp://192.168.99.100:2376   
$ docker-machine env demo
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/jderusse/.docker/machine/machines/demo"
export DOCKER_MACHINE_NAME="demo"
# Run this command to configure your shell: 
# eval "$(/usr/local/bin/docker-machine env demo)"
$ eval "$(docker-machine env demo)"
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMEShttps://github.com/docker/machine/blob/master/contrib/completion/bash/docker-machine.bash
available drivers
- Oracle VirtualBox
 - VMware vSphere
 - Amazon Web Services
 - Microsoft Azure
 - Digital Ocean
 - Google Compute Engine
 - OpenStack
 - ...
 - Generic
 
https://docs.docker.com/machine/drivers/
$ docker-machine create --driver amazonec2 \
    --amazonec2-access-key AKI******* \
    --amazonec2-secret-key 8T93C********* \
    --amazonec2-vpc-id vpc-****** \
    --amazonec2-ami ami-5f709f34 \
    --amazonec2-root-size 16 \
    demo2
$ tree ~/.docker/
/home/jderusse/.docker/
└── machine
    ├── certs
    │   ├── ca-key.pem
    │   ├── ca.pem
    │   ├── cert.pem
    │   └── key.pem
    └── machines
        ├── demo
        │   ├── boot2docker.iso
        │   ├── ca.pem
        │   ├── cert.pem
        │   ├── config.json
        │   ├── demo
        │   │   ├── demo.vbox
        │   │   ├── demo.vbox-prev
        │   │   └── Logs
        │   │       └── VBox.log
        │   ├── disk.vmdk
        │   ├── id_rsa
        │   ├── id_rsa.pub
        │   ├── key.pem
        │   ├── server-key.pem
        │   └── server.pem
        └── demo2
            ├── ca.pem
            ├── cert.pem
            ├── config.json
            ├── id_rsa
            ├── id_rsa.pub
            ├── key.pem
            ├── server-key.pem
            └── server.pemdocker volume
docker volume
- ls
 - create
 - inspect
 - rm
 
$ docker volume create --name demo_volume
demo_volume
$ docker run -v demo_volume:/foo debian touch /foo/test
$ docker run -v demo_volume:/bar debian ls -al /bar
total 8
drwxr-xr-x 2 root root 4096 Jan  5 12:12 .
drwxr-xr-x 1 root root 4096 Jan  5 12:12 ..
-rw-r--r-- 1 root root    0 Jan  5 12:12 test
plugins
- flocker
 - nfs
 - convoy
 - glusterfs
 - rex-ray
 - ...
 
$ docker volume create --driver nfs --name localhost/demo 
$ docker run --rm -v localhost/demo:/foo debian ls -al /foodocker network
docker network
- ls
 - create
 - connect
 - disconnect
 - inspect
 - rm
 
$ docker network create demo
$ docker network ls
NETWORK ID          NAME                DRIVER
b7c9b6d0c133        demo                bridge  
bfc56a57191f        none                null                
0a07e021ffd5        host                host                
a69e42ce961a        bridge              bridge              
$ docker run --rm -ti \
  --name hostA \
  debian bash$ docker run --rm -ti \
  --name hostB \
  --net demo \
  debian bash
$ docker run --rm -ti \
  --name hostC \
  --net demo \
  debian bash
$ ping -c 1 hostB
ping: unknown host$ ping -c 1 hostC                                                                                   
PING hostC (172.21.0.4): 56 data bytes
64 bytes from 172.21.0.4: icmp_seq=0 ttl=64 time=0.069 ms
--- hostC ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.069/0.069/0.069/0.000 ms
$ ping -c 1 hostA                                                                               
ping: unknown host$ docker network connect demo hostA$ ping -c 1 hostB                                                                                   
PING hostB (172.21.0.3): 56 data bytes
64 bytes from 172.21.0.3: icmp_seq=0 ttl=64 time=0.069 ms
--- hostB ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.069/0.069/0.069/0.000 ms
$ ping -c 1 hostC                                                                                   
PING hostC (172.21.0.4): 56 data bytes
64 bytes from 172.21.0.4: icmp_seq=0 ttl=64 time=0.069 ms
--- hostC ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.069/0.069/0.069/0.000 ms
$ ping -c 1 hostA
PING hostA (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: icmp_seq=0 ttl=64 time=0.069 ms
--- hostA ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.069/0.069/0.069/0.000 ms
$ docker run --rm -ti \
  --name hostA \
  debian bash$ docker run --rm -ti \
  --name hostB \
  --net demo \
  debian bash
$ docker run --rm -ti \
  --name hostC \
  --net demo \
  debian bash
app:
    build: docker/app
    volumes:
        - .:/srv
    links:
        - db
db:
    image: postgres
BEFORE
app:
    build: docker/app
    volumes:
        - .:/srv
    net: app
db:
    image: postgres
    net: appAFTER
app:
    build: docker/app
    volumes:
        - .:/srv
db:
    image: postgresOR
$ docker-compose --x-networking up$ docker network create front
$ docker network create back
$ docker network connect front app
$ docker network connect front rabbitmq
$ docker network connect back rabbitmq
$ docker network connect back workerfront
back
app
rabbitmq
worker
plugins
- bridge
 - overlay
 - weave
 - ...
 
$ docker network create --driver overlay front
$ docker-compose up -d app
$ docker-compose scale app=3docker swarm
docker run --rm swarm
$ docker run swarm create
cdd37d9dd457616dfd0c1255fa43cc5f
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-master \
        --swarm-discovery token://cdd37d9dd457616dfd0c1255fa43cc5f \
        swarm-master
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-discovery token://cdd37d9dd457616dfd0c1255fa43cc5f \
        swarm-node-01
$ docker-machine ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
demo            -        virtualbox   Running   tcp://192.168.99.100:2376   
swarm-master    *        virtualbox   Running                               swarm-master (master)
swarm-node-01   *        virtualbox   Running                               swarm-master
$ docker-machine env --swarm swarm-master
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:3376"
export DOCKER_CERT_PATH="/home/jderusse/.docker/machine/machines/swarm-master"
export DOCKER_MACHINE_NAME="swarm-master"
$ eval "$(docker-machine env --swarm swarm-master)"
$ docker run -d nginx
$ docker ps
CONTAINER ID  IMAGE  COMMAND                 PORTS            NAMES
d1ef73f4d236  nginx  "nginx -g 'daemon off"  80/tcp, 443/tcp  swarm-node-01/distracted_mccarthy
$ docker run -d nginx
$ docker ps
CONTAINER ID  IMAGE  COMMAND                 PORTS            NAMES
d1ef73f4d236  nginx  "nginx -g 'daemon off"  80/tcp, 443/tcp  swarm-node-01/distracted_mccarthy
4c13d63943b6  nginx  "nginx -g 'daemon off"  80/tcp, 443/tcp  swarm-master/desperate_engelbart
$ eval "$(docker-machine env swarm-master)"
$ docker ps
CONTAINER ID  IMAGE         COMMAND                 PORTS              NAMES
d1ef73f4d236  nginx         "nginx -g 'daemon off"  80/tcp, 443/tcp    distracted_mccarthy
d4b622c7bca7  swarm:latest  "/swarm join --advert"  2375/tcp           swarm-agent
$ eval "$(docker-machine env swarm-master)"
$ docker ps
CONTAINER ID  IMAGE         COMMAND                 PORTS              NAMES
4c13d63943b6  nginx         "nginx -g 'daemon off"  80/tcp, 443/tcp    desperate_engelbart
837fc704ec30  swarm:latest  "/swarm join --advert"  2375/tcp           swarm-agent
d3a6552596e7  swarm:latest  "/swarm manage --tlsv"  2375/tcp, 0.0.0.0  swarm-agent-master
$ docker run swarm create
cdd37d9dd457616dfd0c1255fa43cc5f
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-master \
        --swarm-discovery token://cdd37d9dd457616dfd0c1255fa43cc5f \
        swarm-master
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-discovery token://cdd37d9dd457616dfd0c1255fa43cc5f \
        swarm-node-01
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-master \
        --swarm-discovery="consul://my_consul_host:8500" \
        --engine-opt="cluster-store=consul://my_consul_host:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        swarm-master
$ docker-machine create \
        -d virtualbox \
        --swarm \
        --swarm-discovery="consul://my_consul_host:8500" \
        --engine-opt="cluster-store=consul://my_consul_host:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        swarm-node-01
$ docker network create --driver overlay demo
swarm-master
swarm-node-01
demo
side effects
- not stable (consul unreachable)
 - no links => docker network
 - no volumes_from => docker volume ?
 - no shares with host => everything in containers
 
Questions ?
Docker extended
By Jérémy DERUSSÉ
Docker extended
- 1,511