Slide 1

Slide 1 text

From zero to Docker Giovanni Toraldo @ LuccaLUG

Slide 2

Slide 2 text

Docker: what is it? Enables software developers to: ● package an application ● with all dependencies ● runs it everywhere unchanged

Slide 3

Slide 3 text

Docker: what is it? Enables system administrators to ● simplify application deployment ● ease scale-up & scale-down ● processes separation

Slide 4

Slide 4 text

Underlying technologies ● Linux namespaces ● Control Groups (cgroups) ● Layered filesystems ● LXC (now libcontainer)

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Glossary ● Image: immutable snapshot of a container, push/pull repository ● Container: an instance launched from an image ● Volume: persistent writable area of a container ● Registry: repository of images (versioned via tags) ● Dockerfile: the descriptor from which an image is built

Slide 7

Slide 7 text

How to install docker engine ● GNU/Linux deb https://apt.dockerproject.org/repo ubuntu-trusty main deb https://apt.dockerproject.org/repo debian-jessie main pacman -S docker ● Windows / OSX https://www.docker.com/products/docker-toolbox

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Docker-machine Machine manager (like Vagrant) https://github.com/docker/machine (Win/Mac: distributed in Docker toolkit) ● Launch VM somewhere ● Install Docker ● Generates and copy certificates ○ (password-less auth) ● Enable remote access via TCP

Slide 10

Slide 10 text

Docker-machine backends Where nodes can run? ● Generic backend ○ existing hosts with ssh access ● Local machine (virtualization) ○ Virtualbox ○ VMware Fusion ● Cloud providers ○ Amazon ○ GCE ○ Rackspace ○ DigitalOcean ○ ...

Slide 11

Slide 11 text

Docker-machine bootstrap examples $ docker-machine create --driver generic --generic-ip-address= $ docker-machine create --driver virtualbox $ docker-machine create --driver digitalocean --digitalocean-access-token $ docker-machine create --driver amazonec2 --amazonec2-access-key -- amazonec2-secret-key $ docker-machine create --driver kvm --kvm-cpu-count 2 --kvm-disk-size 20 --kvm- memory 4096

Slide 12

Slide 12 text

Interaction with a Docker-machine node $ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/home/gionn/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(docker-machine env default)" $ docker info Kernel Version: 4.1.17-boot2docker Operating System: Boot2Docker 1.10.0 (TCL 6.4.1); master : b09ed60 - Thu Feb 4 20:16:08 UTC 2016

Slide 13

Slide 13 text

Hello world $ docker run -ti ubuntu:14.04 /bin/bash ● Live demo time

Slide 14

Slide 14 text

What happens under the hood? ● Pulls the ubuntu image from registry ● Creates a new container ○ Allocates a rw filesystem ○ Allocates a network interface (on a bridge) ○ Sets up network (IP address, dns..) ● Launch a process in the container ● Captures and provides application output Container terminates when the process exit

Slide 15

Slide 15 text

Dockerfile (not the best example)

Slide 16

Slide 16 text

Standard workflow Build & push: ● docker build -t gionn/nodejs-app:1.0.0 . ○ a tagged image is generated ● docker push gionn/nodejs-app:1.0.0 ○ publish to repository Pull & run: ● docker pull gionn/nodejs-app:1.0.0 ○ fetch from repository ● docker run gionn/nodejs-app:1.0.0 ○ run container from this image

Slide 17

Slide 17 text

Docker compose Compose is a tool for defining and running multi-container Docker applications using a file in YML format. $ docker-compose up Examples: https://github.com/ClouDesire/docker-compose-library

Slide 18

Slide 18 text

Thanks!