6. Installation
My Mac Timo’s
Linux
Test Staging Cloud VM Bare Metal
Rails Web
Frontend
? ? ? ? ? ?
Node.js
API
? ? ? ? ? ?
Background
jobs
? ? ? ? ? ?
MySQL ? ? ? ? ? ?
Distributed
DB
? ? ? ? ? ?
Message
Queue
? ? ? ? ? ?
7. Reusable Containers
My Mac Timo’s
Linux
Test Staging Cloud VM Bare Metal
Rails Web
Frontend
Node.js
API
Background
jobs
MySQL
Distributed
DB
Message
Queue
9. Dev ⇔ DevOps - Separation of
Concerns
Dev: Inside the
container
● my code
● my libraries
● my package
manager
● my app
● my data
Ops: Outside the
container
● Logging
● Remote Access
● Network
Configuration
● Monitoring
12. Based on existing technologies
● Namespaces
> Varying views on the system
> to provide isolated environments
> PID, NET, IPC, MNT, UTS, User
● CGroups
> control resources for a group of processes
> like CPU time, Memory, Network bandwidth, etc.
● Layered FS
● (LXC)
15. Docker History
● Jan 2013: Initial commit
● September 2013: Redhat announces
collaboration
● June 2014: Google announces engagement
● August 2014: VMWare announces Docker support
● February 2015: Microsoft announces Docker
support
● April 2015: Docker raises $95 Million
● June 2015: Open Container Project announced
21. Run Containers
# run a command
$ docker run busybox echo hello
# run an interactive shell
$ docker run -i -t busybox /bin/sh
# run a Redis cache
$ docker run -d redis
24. Build, Push, and Run
# build the image
$ docker build -t puja108/node .
# push it to the registry
$ docker push puja108/node
# run it (on any host)
$ docker run -d puja108/node
27. ● Vagrant
● rbenv
● nodeenv
● virtualenv
● Laptop full of build tools and servers
Your current setup?
28. ● Contains Build Tools
○ Can also be a separate container
● One (or more) container(s) for each stack
○ Use Docker Compose
● Runs the same regardless on which host or
in which environment
● Lightweight
○ Developer can actually have several environments
open directly on her laptop
Dev Containers
33. ● Microservice Architectures
> Simple focussed services
> Highly decoupled
> Communicate over lightweight mechanisms
> HTTP APIs & Message Queues
> Polyglot (Language, Framework, Data Store)
> Built to fail
● Immutable Infrastructures
> Disposable components
> Make your state explicit
> Configure at run-time
The Next Steps in Cloud Architecture
34. Containers vs. VMs
Container
● Lightweight layers
above a shared
kernel
● Single service or
process
● New but promising
technology
● Enable #GIFEE
VM
● Complete (heavy)
Virtual System
● Application(s) with
several components
● Tried and trusted
Technology
39. Namespaces
The pid namespace: Used for process isolation (PID:
Process ID).
The net namespace: Used for managing network
interfaces (NET: Networking).
The ipc namespace: Used for managing access to IPC
resources (IPC: InterProcess Communication).
The mnt namespace: Used for managing mount-points
(MNT: Mount).
The uts namespace: Used for isolating kernel and version
identifiers. (UTS: Unix Timesharing System).
40. CGroups
Control group of processes.
Share available hardware resources.
Set up limits and constraints.
E.g. limiting the memory available to a
specific container.