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

Docker

anildigital
January 18, 2014

 Docker

anildigital

January 18, 2014
Tweet

More Decks by anildigital

Other Decks in Technology

Transcript

  1. Anil Wadghule
    [email protected]
    February 2014 — Docker 0.8.0

    View Slide

  2. Docker
    • Docker was started by Solomon Hykes as an internal project by
    dotCloud
    • Docker makes Linux Containers easy to use

    View Slide

  3. What is Docker?
    “Docker is an open source engine to easily create lightweight,
    portable, self-sufficient containers from any application. The same
    container that a developer builds and tests on a laptop can run at
    scale, in production, on VMs, bare metal, OpenStack clusters, public
    clouds and more” - http://docker.io

    View Slide

  4. Why Docker?
    • Deploy everything (webapps, backends, sql, big data, message
    queues)
    • Deploy almost everywhere (Linux servers, VMs or bare metal, any
    distro, Kernel 3.8)
    • Deploy reliably & consistently (local and on server same)
    • Deploy easily
    • Deploy at scale

    View Slide

  5. Docker popularity
    • 330+ Contributors,
    • 50,000+ docker index pull,
    • 1000’s of Dockerized applications
    • Integration in Jenkins, Travis, Chef, Puppet, Vagrant & OpenStack

    View Slide

  6. The challenge
    • Static website, User DB, Queue, Background workers, Analytics DB,
    API endpoint, Web Frontend
    • Development VM, QA Server, Public cloud, Production Servers,
    Customer data center, Production cluster
    • Running apps in multiple environments results in N x N nightmare

    View Slide

  7. N x N compatibility nightmare
    Problem: shipping code

    View Slide

  8. Solution
    • The Linux Container

    View Slide

  9. This eliminated the N x N problem

    View Slide

  10. What is LXC?
    • Lightweight Linux Container (LXC)
    • Operating system level virtualisation method for running multiple
    isolated Linux systems
    • Provides way to run mini Linux systems within another Linux systems
    • http://en.wikipedia.org/wiki/LXC

    View Slide

  11. LXC
    • I can SSH into it
    • I have root access
    • I can apt-get/yum install packages
    • Speed: boots in seconds
    • Footprint: 100-1000 containers on one machine. Small disk
    requirements.

    View Slide

  12. Control groups & namespaces
    • LXCs makes use of control groups & namespaces
    • Linux kernel feature to limit, account and isolate resource usage,
    such as 

    — CPU 

    — Memory 

    — Disk I/O

    View Slide

  13. Docker
    • Docker is API on top of LXC
    • Docker runs as daemon
    • Docker makes Linux Containers easy to use (LXC)
    • Docker service exposes REST api that is used by Docker client

    View Slide

  14. Docker architecture
    DOCKER
    LAYER FS
    LXC
    CGROUPS
    LINUX KERNEL
    NAMESPACES

    View Slide

  15. Container vs. VMs

    View Slide

  16. Docker operating system?
    • Doesn’t include operating system
    • Relies on operating system functionality provided by underlying
    infrastructure

    View Slide

  17. Requirements
    • Linux kernel 3.8 & above
    • AUFS
    • LXC
    • 64-bit

    View Slide

  18. Installation
    • Can be directly installed on supported Linux distros.
    • Supported Ubuntu versions


    Ubuntu Precise 12.04 (LTS) (64-bit) 

    Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

    View Slide

  19. Installation: boot2docker
    • On Mac


    $ brew install boot2docker

    $ boot2docker init

    $ boot2docker up

    $ export DOCKER_HOST=tcp://

    $ docker run -i -t busybox sh

    #/

    View Slide

  20. Installation: Vagrant
    • Clone the docker repository 

    $ git clone https://github.com/dotcloud/docker.git
    • Startup the vagrant image 

    $ vagrant up
    • SSH into the image 

    $ vagrant ssh
    • Use docker in VM

    $ docker
    • Vagrant client works on Mac

    View Slide

  21. Demo

    View Slide

  22. • Downloaded the image from docker repo
    • Generated a new LXC container
    • Created a new file system
    • Mounted a read/write layer
    • Allocated network interface
    • Setup IP Setup NATing
    • Executed the bash shell in the container
    • ** All under a very few minutes
    What Docker has done?

    View Slide

  23. Advantages
    • Elegant application delivery
    • Throwable sandboxes
    • Create uniform development & production environments
    • Automated testing and continuous integration/deployments
    • Deploying and scaling web apps, databases and backend services

    View Slide

  24. Why developers care?
    • Build once, write everywhere
    • Clean, safe, hygienic and portable runtime environment for app
    • No worries about missing dependencies during subsequent
    deployments
    • Reduce / eliminate compatibility concerns on different platforms

    View Slide

  25. Recommended workflow
    • Each service will be in its own container(s)
    • Build an image for each service
    • Pin dependencies (packages etc.) accurately.
    • Link services together

    View Slide

  26. Questions

    View Slide

  27. Thank you !!!
    Follow me on Twitter
    @anildigital

    View Slide