Upload
giovanni-toraldo
View
265
Download
0
Embed Size (px)
Citation preview
Docker: what is it?
Enables software developers to:
● package an application● with all dependencies● runs it everywhere unchanged
Docker: what is it?
Enables system administrators to
● simplify application deployment● ease scale-up & scale-down● processes separation
Underlying technologies
● Linux namespaces● Control Groups (cgroups)● Layered filesystems● LXC (now libcontainer)
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
How to install docker engine
● GNU/Linuxdeb https://apt.dockerproject.org/repo ubuntu-trusty maindeb https://apt.dockerproject.org/repo debian-jessie mainpacman -S docker
● Windows / OSXhttps://www.docker.com/products/docker-toolbox
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
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○ ...
Docker-machine bootstrap examples
$ docker-machine create --driver generic --generic-ip-address=<ip-address>
<nodename>
$ docker-machine create --driver virtualbox <nodename>
$ docker-machine create --driver digitalocean --digitalocean-access-token <token>
<nodename>
$ docker-machine create --driver amazonec2 --amazonec2-access-key <key> --
amazonec2-secret-key <secret> <nodename>
$ docker-machine create --driver kvm --kvm-cpu-count 2 --kvm-disk-size 20 --kvm-
memory 4096 <nodename>
Interaction with a Docker-machine node
$ docker-machine env defaultexport 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 infoKernel Version: 4.1.17-boot2dockerOperating System: Boot2Docker 1.10.0 (TCL 6.4.1); master : b09ed60 - Thu Feb 4 20:16:08 UTC 2016
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
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
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