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

Docker

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for anildigital anildigital
January 18, 2014

 Docker

Avatar for anildigital

anildigital

January 18, 2014
Tweet

More Decks by anildigital

Other Decks in Technology

Transcript

  1. Docker • Docker was started by Solomon Hykes as an

    internal project by dotCloud • Docker makes Linux Containers easy to use
  2. 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
  3. 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
  4. Docker popularity • 330+ Contributors, • 50,000+ docker index pull,

    • 1000’s of Dockerized applications • Integration in Jenkins, Travis, Chef, Puppet, Vagrant & OpenStack
  5. 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
  6. 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
  7. 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.
  8. 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
  9. 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
  10. Docker operating system? • Doesn’t include operating system • Relies

    on operating system functionality provided by underlying infrastructure
  11. 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)
  12. Installation: boot2docker • On Mac
 
 $ brew install boot2docker


    $ boot2docker init
 $ boot2docker up
 $ export DOCKER_HOST=tcp://
 $ docker run -i -t busybox sh
 #/
  13. 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
  14. • 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?
  15. 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
  16. 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
  17. 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