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

More Decks by Giovanni Toraldo

Other Decks in Technology


  1. Docker: what is it? Enables software developers to: • package

    an application • with all dependencies • runs it everywhere unchanged
  2. Docker: what is it? Enables system administrators to • simplify

    application deployment • ease scale-up & scale-down • processes separation
  3. 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
  4. 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
  5. 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
  6. 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 ◦ ...
  7. 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>
  8. Interaction with a Docker-machine node $ docker-machine env default export

    DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://" 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
  9. 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
  10. 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
  11. 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