Slide 1

Slide 1 text

Docker Machine / Swarm

Slide 2

Slide 2 text

> whoami Evgeny Zislis www.devops.co.il il.linkedin.com/in/evgenyzislis

Slide 3

Slide 3 text

Docker Machine github.com/docker/machine

Slide 4

Slide 4 text

docker machine

Slide 5

Slide 5 text

static website user data web frontend queue analytics development environments qa servers customer data center public cloud production cluster

Slide 6

Slide 6 text

list machines docker-machine ls docker machine

Slide 7

Slide 7 text

create machines docker-machine create \ --driver virtualbox \ machine_name Amazon EC2, Azure, DigitalOcean, Google Cloud Engine, OpenStack, RackSpace, Softlayer, VirtualBox, VMware Fusion, VMware vCloud Air, VMware vSphere docker machine

Slide 8

Slide 8 text

create machines $ docker-machine create -d virtualbox dev INFO[0000] Creating SSH key... INFO[0000] Image cache does not exist, creating it at /Users/evgeny/.docker/machine/cache... INFO[0000] No default boot2docker iso found locally, downloading the latest release... INFO[0000] Downloading latest boot2docker release to ~/.docker/machine/cache/boot2docker.iso INFO[0062] Creating VirtualBox VM... INFO[0068] Starting VirtualBox VM... INFO[0069] Waiting for VM to start… INFO[0123] "dev" has been created and is now the active machine. INFO[0123] To point your Docker client at it, run this in your shell: eval "$(docker-machine env dev)" docker machine

Slide 9

Slide 9 text

configure the docker client docker-machine env machine_name $ eval "$(docker-machine env foobar)" $ env | grep DOCKER docker-machine config machine_name $ docker `docker-machine config machine_name` ps docker machine

Slide 10

Slide 10 text

docker-machine ssh machine_name $ docker-machine ssh foobar some_command docker-machine ip machine_name docker-machine url machine_name connect to machines docker machine

Slide 11

Slide 11 text

docker-machine inspect machine_name docker-machine stop machine_name docker-machine start machine_name docker-machine kill machine_name docker-machine rm machine_name manage machines docker machine

Slide 12

Slide 12 text

docker-machine upgrade machine_name docker-machine regenerate-certs \ machine_name manage docker (on a machine) docker machine

Slide 13

Slide 13 text

Docker Swarm github.com/docker/swarm registry.hub.docker.com/_/swarm

Slide 14

Slide 14 text

docker swarm

Slide 15

Slide 15 text

create a swarm docker-machine create -d virtualbox \ --swarm \ --swarm-discovery token://26504993705d190ddddda6db575934f8 \ --swarm-master \ beequeen docker-machine create -d virtualbox \ --swarm \ --swarm-discovery token://26504993705d190ddddda6db575934f8 \ beeworker0 ... docker swarm

Slide 16

Slide 16 text

$ eval "$(docker-machine env --swarm beequeen)" $ env|grep DOCKER DOCKER_HOST=tcp://192.168.99.101:3376 DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=~/.docker/machine/machines/beequeen connect to a swarm manager docker swarm

Slide 17

Slide 17 text

$ docker info inspect a swarm docker swarm Containers: 5 Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 4 beequeen: 192.168.99.100:2376 └ Containers: 2 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.025 GiB beeworker0: 192.168.99.101:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.025 GiB beeworker1: 192.168.99.102:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.025 GiB beeworker2: 192.168.99.103:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 1.025 GiB

Slide 18

Slide 18 text

$ docker ps swarm containers docker swarm CONTAINER ID … PORTS NAMES a6d11e0760f7 … 2375/tcp beeworker2/swarm-agent e4a05f4f1291 … 2375/tcp beeworker1/swarm-agent eb2f5fbb295c … 2375/tcp beeworker0/swarm-agent b6f144eea15c … 2375/tcp beequeen/swarm-agent 5c6d7bf83ff4 … 192.168.99.100:3376->3376/tcp, 2375/tcp beequeen/swarm-agent-master

Slide 19

Slide 19 text

$ docker-swarm create# use hub.docker.com tokens 09d27ee662e9b31a371e1886377faeb8 $ docker-machine … \ --swarm-discovery token://09d27ee662e9b31a371e1886377faeb8 swarm discovery - hosted docker swarm

Slide 20

Slide 20 text

Static Files, etcd, Consul, ZooKeeper, IP List file:///tmp/my_cluster # echo >> my_cluster etcd:/// consul:/// zk://,/ nodes://, # create a manager for a swarm docker-swarm manage -H tcp:// swarm discovery docker swarm

Slide 21

Slide 21 text

# put swarm-agent IP:port in a file $ echo "10.0.0.[11:100]:2375" >> /tmp/my_cluster $ echo "10.0.1.[15:20]:2375" >> /tmp/my_cluster $ echo "192.168.1.2:[2:20]375" >> /tmp/my_cluster # run a manager swarm manage -H tcp:// file:///tmp/my_cluster swarm discovery - patterns docker swarm

Slide 22

Slide 22 text

swarm constraint filter # docker daemon on a host docker -d --label storage=ssd \ --label region=us-east-1 # filter containers in a swarm docker run -d -P --name db \ -e "constraint:storage==ssd" \ mysql docker swarm

Slide 23

Slide 23 text

swarm built-in constraints ● storagedriver ● executiondriver ● kernelversion ● operatingsystem docker run -e "constraint:storagedriver=aufs" docker run -e "constraint:operatingsystem=fedora" docker swarm

Slide 24

Slide 24 text

swarm affinity filter docker run -d -p 80:80 --name front nginx docker run -d --name logger \ -e affinity:container==front \ logger docker run -d --name redis1 \ -e affinity:image==redis \ redis docker swarm

Slide 25

Slide 25 text

$ docker run -d -p 80:80 nginx $ docker run -d -p 80:80 nginx # when no hosts available with free ports - 2014/10/29 00:33:20 Error response from daemon: no resources available to schedule container swarm port filter docker swarm

Slide 26

Slide 26 text

Shared volumes: --volumes-from=dependency Links: --link=dependency:alias Shared network stack: --net=container:dependency swarm dependency filter docker swarm

Slide 27

Slide 27 text

-m="": Memory limit format: , where unit = b, k, m or g -memory-swap="": Total memory limit (memory+swap) -c, --cpu-shares=0: CPU shares (relative weight) docker cgroup constraints docker 1.6

Slide 28

Slide 28 text

> swarm manage --strategy ● spread (default) ● binpack ● random swarm scheduler strategies docker swarm

Slide 29

Slide 29 text

Docker 1.6

Slide 30

Slide 30 text

windows client docs.docker.com/installation/windows/

Slide 31

Slide 31 text

builder resource constraints > docker build -h Usage: docker build [OPTIONS] PATH | URL | - Build a new image from the source code at PATH -c, --cpu-shares=0 CPU shares (relative weight) --cpuset-cpus= CPUs in which to allow execution (0-3, 0,1) ... -m, --memory= Memory limit --memory-swap= Total memory (memory + swap), '-1' to disable swap ... docker 1.6

Slide 32

Slide 32 text

interrupt long builds KEEP CALM AND CTRL-C docker 1.6

Slide 33

Slide 33 text

> docker commit --change > docker import --change modify images docker 1.6

Slide 34

Slide 34 text

Example: Change state interactively, then add ports after the fact. > docker commit \ --change 'EXPOSE 80' \ --change 'CMD ["nginx"]' \ container_name \ new_image_name modify images docker 1.6

Slide 35

Slide 35 text

Example: docker import to squash an image into a single layer > docker export myimage | \ docker import - --change 'EXPOSE 80' new_name modify images docker 1.6

Slide 36

Slide 36 text

Example: docker import to squash an image into a single layer > docker run --log-driver=syslog … > docker run --log-driver=none … > docker run --log-driver=json-file … logging driver docker 1.6

Slide 37

Slide 37 text

> docker -d --default-ulimit nproc=1024:2048 > docker run -d --ulimit nproc=2048:4096 httpd container ulimits docker 1.6

Slide 38

Slide 38 text

> cgcreate -a user -g memory,cpu:groupname > docker run -d \ --cgroup-parent /sys/fs/cgroup/memory/groupname \ httpd container cgroup parent docker 1.6

Slide 39

Slide 39 text

We invite you to join Operations Israel Facebook group on on.fb.me/Ops-IL link to slides dvps.me/docker-machine-swarm link to video (hebrew) youtu.be/eCFReLak7Ps Thank you! www.devops.co.il