2. Docker
•
Docker was started by Solomon Hykes as an internal project by
dotCloud
•
Docker makes Linux Containers easy to use
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
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
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
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
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.
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
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
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)
19. Installation: boot2docker
On Mac
•
$ brew install boot2docker
$ boot2docker init
$ boot2docker up
$ export DOCKER_HOST=tcp://
$ docker run -i -t busybox sh
#/
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
22. What Docker has done?
•
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
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
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
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