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

Ken Cochrane's Docker Boston Docker 101 Talk

Ken Cochrane
September 24, 2013

Ken Cochrane's Docker Boston Docker 101 Talk

Ken Cochrane's Docker Boston Docker 101 Talk. It goes over the basics of Docker, and what you need to get started.

Ken Cochrane

September 24, 2013
Tweet

More Decks by Ken Cochrane

Other Decks in Technology

Transcript

  1. About me • Ken Cochrane (@KenCochrane) • Engineer at dotCloud

    (Corporate sponsor of Docker) • Work on Docker and Docker related projects (index, registry, docs, etc) 2
  2. Docker Swag • I have a limited amount of Docker

    swag to give away. • T-shirts • Stickers • Send a tweet with #DockerBoston and I’ll randomly pick winners for the T-shirts 3
  3. Quick survey • How many people have heard of Docker

    before today? • How many people have tried Docker? • How many people are using Docker on a project today? 6
  4. Where did Docker come from? • Docker is a rewrite

    of similar code that currently powers the dotCloud PaaS • Original version written in Python, new version written in Go. • Still a very young project, but mature for it’s age. 7
  5. Docker Timeline • January 2013 Docker started as internal project

    inside of dotCloud • March 21, 2013 Solomon gives Docker lighting talk at PyCon US • March 27, 2013 Docker released to Public • June 2013 Docker adds OpenStack compatibility • August 2013 Docker 0.6 released 8
  6. In the first 6 months • 6000+ GitHub stars •

    125+ contributors • 50,000+ docker index pulls • 100’s of projects built on top of Docker • UI’s, mini-PaaS, remote desktop,etc • 1000’s of Dockerized applications 9
  7. What is Docker? • Docker is an open-source engine that

    automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere. 10
  8. LinuX Containers (LXC) • lets you run a Linux system

    within another Linux system • A container is a group of processes on a Linux box, put together in an isolated environment • Inside the box, looks like a VM. • Outside of the box, it looks like normal processes. • chroot on steroids 12
  9. Why Containers? • Speed: Boots in seconds. • Footprint: 100-1000

    containers on one machine. Small disk requirements 13
  10. Installations • Server or Desktop (Vagrant) • Docker APT repo

    (get.docker.io) • Source code compile • Binary download • http://docs.docker.io/en/latest/installation/ 18
  11. Docker on Digital Ocean in 5 easy steps # Create

    Ubuntu 13.04 64 Bit Droplet, Then $ sudo apt-get update $ sudo apt-get install linux-image-extra-`uname -r` $ sudo sh -c "curl http://get.docker.io/gpg | apt-key add -" $ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/ sources.list.d/docker.list" $ sudo apt-get update && sudo apt-get install lxc-docker 21
  12. Docker on Digital Ocean in 1 step When creating the

    Droplet. Select the Docker image under the application 22
  13. Docker Use Cases • Local Dev environment • Deployment •

    Unit testing • parallelize tests • one db per test • system tests 24
  14. Unit testing • Use containers to isolate tests into their

    own environment. • No more worrying about tests not cleaning up after themselves. • Parallelize the tests across multiple machines 26
  15. System Testing • Easily create all the different system configurations

    to test against • No need to worry about breaking or rebuilding a test server • Test Fabric scripts • http://agiliq.com/blog/2013/06/self-testing-fabfile-using-docker/ 27
  16. Continuous Integration • Run unit tests after each source commit

    • StriderCD.com - Open source CI server • Uses Docker Containers to run CI tests before deployment. • TravisCI is also playing with Docker 28
  17. Dokku • Open source PaaS • Docker powered mini-heroku •

    Less than 100 lines of Bash • Heroku buildpacks • Git push deployment • https://github.com/progrium/dokku 31
  18. Flynn.io • Open source PaaS written in Go • Uses

    Docker to manage containers • One of the founders is author of Dokku • Still in development 32
  19. deis.io • Open source written in Python • Git push

    deployments • Docker images, chef recipes or Heroku buildpacks • Supports scaling and application formation 33
  20. Local Dev Setup • VM’s are heavy, containers not so

    much • Run 100’s of containers on laptop vs a handful of VMs • Easier to duplicate production environment if you have a complex setup. • http://blog.scoutapp.com/articles/2013/08/28/docker-git-for-deployment 39
  21. Cool projects • npmt.abru.pt: Node.js Module (NPM) testing • ptone/jiffylab:

    Zero configuration Python/Unix web based teaching environment • kitchen-Docker: Docker driver for Ruby’s test kitchen • MemcachedAsaService.com • Try RethinkDB, openstack-docker • Many many more. 41
  22. npmt.abru.pt • Autonomously Testing All NPM modules • One container

    per module is created then destroyed when test is finished. • 39496 modules verified 42
  23. kitchen-docker • A Ruby framework for running integration tests in

    an isolated environment • Uses Docker to run tests in containers • https://github.com/portertech/kitchen-docker 43
  24. JiffyLab • Created by Preston Holmes • Provides an entirely

    web based environment for instruction. • Python and UNIX shell env running in it’s own Docker container • https://github.com/ptone/jiffylab 44
  25. Memcached SaaS • Built as a class project • Memcached

    SaaS built on top of Docker • Built with Ruby on Rails • https://github.com/jbarbier/SaaS_Memcached/ 45
  26. Try RethinkDB • SaaS that let you try out RethinkDB

    • One DB per container • Containers killed within 24 hours • 1000’s of containers on one host 46
  27. Docker terms • Container: Linux container • Image: a snapshot

    of a container that when run creates a new container. • Index: Public docker image directory • Dockerfile: An automated script used to create an Image • Push/pull : Commands used to get images to and from the index • Run: Start a Docker image to create a running Container 49
  28. Common commands • ps : lists the containers on the

    system • images : lists the images on the system • run : runs commands against an image to create a container • stop : stops a running command • build : builds a Dockerfile • inspect: shows you information about a container • pull: pulls down a new image from the docker index • logs: shows the logs for a given container 50
  29. Docker Run • Run command and exit • $ docker

    run ubuntu echo “hello world” • Start interactive shell in container • $ docker run -i -t ubuntu bash • Run command in background • $ docker run -d ubuntu /bin/sh -c “while true; do echo hello world; date; sleep 1; done” 53
  30. Dockerfiles • Simple scripting language • Automate the creation of

    docker images • Built in caching • Add them to any project repo to Dockerize the project. • Online tutorial • http://www.docker.io/learn/dockerfile/ 55
  31. Building Images by hand # start a ubuntu 12.10 container

    $ docker run -i -t ubuntu:12.10 bash # update the apt repo [a2bc13] $ apt-get update # install curl [a2bc13] $ apt-get install curl # exit out of container [a2bc13] $ exit # save changes to container as an image $ docker commit -m "comment" a2bc13 username/image 56
  32. Build image using Dockerfile # curl image # VERSION 0.1

    FROM ubuntu:12.10 MAINTAINER yourName [email protected] RUN apt-get -qq update RUN apt-get install -y curl 57
  33. Docker build • docker build . • docker build -

    < Dockerfile • docker build github.com/creak/docker-firefox • use “-t” to tag built image • docker build -t myname/myimage . 58
  34. Redis Dockerfile example # Redis # VERSION 0.1 FROM johncosta/redis

    MAINTAINER yourName [email protected] EXPOSE 6379 RUN mkdir /redis ENTRYPOINT ["/usr/bin/redis-server"] CMD ["--dir", "/redis"] 59
  35. Docker index • Similar to PyPI but for Docker images

    • Public directory to store and download reusable docker images • Docker image meta data • Account required to publish images (free) • Written in Django • https://index.docker.io 61
  36. Docker registry • Open source Python Flask app • https://github.com/dotcloud/docker-registry

    • Manages the storage of the images • Install private registry for private images 62
  37. Docker API • REST based API used to control the

    Docker daemon • live events api feed • some websocket support • The Docker CLI uses the same API • Clients available for most languages 64
  38. Docker clients • python: docker-py • ruby: docker-ruby, docker-client, docker-

    api • javascript: docker-js, dockerui • Java: docker-java 65
  39. Docker-py import docker # create client docker_client = docker.Client(base_url='unix://var/run/docker.sock', version="1.4")

    # create container container = docker_client.create_container('ubuntu', None, detach=True) container_id = container.get('Id') # start Container docker_client.start(container_id) # get Ip address meta = docker_client.inspect_container(container_id) ip = meta.get('NetworkSettings').get("IPAddress") # stop container docker_client.stop(container_id) 66
  40. Docker UI’s • Shipyard: Django • https://github.com/ehazlett/shipyard • Docker-UI: Angular.js

    • https://github.com/crosbymichael/dockerui • Dockland: Ruby • https://github.com/dynport/dockland 67
  41. Docker 0.7 • AUFS will be replaced with device- mapper

    • Red Hat Support with Fedora • Expected at the end of September 70
  42. Docker 1.0 • Pluggable architecture • LXC, Solaris Zones, FreeBSD

    Zones, etc • AUFS, BTRFS, etc • Better OS support (RedHat, etc) 71
  43. Want to Learn more? • Website: http://www.docker.io • Documentation: http://docs.docker.io

    • Github: https://github.com/dotcloud/docker • IRC: freenode #docker • Twitter: follow @docker • Google group: groups.google.com/forum/#!forum/docker- user • Meetups: Boston, New York, London, Paris, San Francisco, and more coming soon. Go to website for details. 73