Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From zero to Docker

From zero to Docker

This is a simple presentation I held about Docker in the Linux User Group of my town.

Giovanni Toraldo

March 14, 2016
Tweet

More Decks by Giovanni Toraldo

Other Decks in Technology

Transcript

  1. From zero to
    Docker
    Giovanni Toraldo
    @ LuccaLUG

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. View Slide

  6. 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

    View Slide

  7. 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

    View Slide

  8. View Slide

  9. 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

    View Slide

  10. 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
    ○ ...

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

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

    View Slide

  14. 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

    View Slide

  15. Dockerfile (not the best example)

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. Thanks!

    View Slide