8. Docker vs. VM
Hardware
Linux/Kernel
Container Container
Container Container
Container Container
Hardware
Linux/Kernel
VM
Linux/Kernel
VM
Linux/Kernel
VM
Linux/Kernel
VM
Linux/Kernel
Shared Resource, Lightweight,
Portable, Fast to boot
Dedicated Resource, Heavy, Not
portable, Comparatively slower boot
9. Under the Hood
LXC
Dream inside dream
inside dream….
(The Inception in Linux)
Namespaces
& cgroups
Isolated pid, net, uid….
Copy-on-
write
Filesystem
AUFS, btrfs, ZFS….
13. Docker Vocabulary
• Index $ docker login
Username: mehdi
Password:
Email: mehdi@team.okdo.it
Login Succeeded
14. Docker Vocabulary
• Container
$ docker run ubuntu:12.04 echo Hello World
Hello World
$ docker run -i -t ubuntu:12.04 /bin/bash
root@a09d485c9a9f:/# uname -a
Linux a09d485c9a9f 3.13.3-tinycore64 #1 SMP Wed
Mar 26 03:16:13 UTC 2014 x86_64 x86_64 x86_64
GNU/Linux
!
root@a09d485c9a9f:/#
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS !
f0638f0a1c7a ubuntu:12.04 /bin/bash 46 minutes ago Up 4 seconds
Tip: Press Ctrl+P
and Ctrl+Q to
detach running
containers
15. Docker Vocabulary
• Dockerfile $ cat Dockerfile
FROM ubuntu:12.04!
!
MAINTAINER Mehdi Hasan "mehdi@team.okdo.it"!
!
RUN apt-get -y install python-software-properties!
RUN add-apt-repository ppa:chris-lea/node.js!
RUN apt-get update!
RUN apt-get -y install python g++ make nodejs!
$ docker build -t mehdi/nodejs .
There is a
trailing dot
$ docker push mehdi/nodejs
Image c0fe63f9a4c1 already pushed, skipping
Image 5ff6986cd174 already pushed, skipping
Image 3867fae91348 already pushed, skipping
Image 4574f80c91e4 already pushed, skipping
Image 37c2cc34fa4e already pushed, skipping
757db77867dd: Image successfully pushed
Pushing tag for rev [757db77867dd] on {https://
registry-1.docker.io/v1/repositories/mehdi/nodejs/tags/
latest}
Any idea
why these
images are
skipped?
16. Container vs. Image!
Still Puzzled?
Running container from an image:
Creating image from a container:
$ docker ps -a!
$ docker commit -m “Image description"
<CONTAINER_ID> <USERNAME>/<REPO>
$ docker run -i -t ubuntu:12.04 /bin/bash
Lets see a Demo
19. Your Next Weekend Fun Project:
Deploy something with Dokku
Dokku
Docker powered mini-Heroku in around 100 lines of Bash
See the demo here: http://vimeo.com/68631325
https://github.com/progrium/dokku
20. The rabbit hole goes deeper
than that…
• How to deal with data, logs, file uploads? Where to store?
Inside container? Inside host? Inside another container?
Hint: Read http://docs.docker.io/en/latest/use/
working_with_volumes/
• How to deal with distributed systems?
Hint: Follow http://www.centurylinklabs.com/category/
docker-posts/