SlideShare a Scribd company logo
containerization:
more than the
new virtualization
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/docker-container
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon San Francisco
www.qconsf.com
Jérôme Petazzoni
(@jpetazzo)
Grumpy French DevOps
- Go away or I will replace you
with a very small shell script
Runs everything in containers
- Docker-in-Docker
- VPN-in-Docker
- KVM-in-Docker
- Xorg-in-Docker
- ...
Containerization Is More than the New Virtualization
outline
Outline
Containers as lightweight VMs
Containers vs VMs
Separation of operational concerns
Benefits
Conclusions
Containerization Is More than the New Virtualization
containers as
lightweight VMs
It looks like a VM
Private process space
Can run stuff as root
Private network interface and IP address
Custom routes, iptables rules, etc.
Can mount filesystems and more
Process tree in a “machine container”
PID TTY STAT TIME COMMAND
1 ? Ss+ 0:00 /usr/bin/python3 -u /sbin/my_init --enable-insecure-key
104 ? S+ 0:00 /usr/bin/runsvdir -P /etc/service
105 ? Ss 0:00 _ runsv syslog-ng
108 ? S 0:00 | _ syslog-ng -F -p /var/run/syslog-ng.pid --no-caps
106 ? Ss 0:00 _ runsv sshd
109 ? S 0:00 | _ /usr/sbin/sshd -D
117 ? Ss 0:00 | _ sshd: root@pts/0
119 pts/0 Ss 0:00 | _ -bash
135 pts/0 R+ 0:00 | _ ps fx
107 ? Ss 0:00 _ runsv cron
110 ? S 0:00 _ /usr/sbin/cron -f
Faster to boot, less overhead than a VM
$ time docker run ubuntu echo hello world
hello world
real 0m0.258s
Disk usage: less than 100 kB
Memory usage: less than 1.5 MB
Benchmark: infiniband
Benchmark: boot OpenStack instances
Benchmark: memory speed
impossibru!
Containerization Is More than the New Virtualization
containers
vs
virtual machines
Virtual Machines
Emulate CPU instructions
(painfully slow)
Emulate hardware (storage, network...)
(painfully slow)
Run as a userland process on top of a kernel
(painfully slow)
Virtual Machines
Use native CPU
(fast!)
Paravirtualized storage, network...
(fast, but higher resource usage)
Run on top of a hypervisor
(faster, but still some overhead)
Containers
Processes isolated from each other
Very little extra code path
(in many cases, it's comparable to UID checking)
Virtual Machines vs Containers
Native CPU
Paravirtualized devices
Hypervisor
Native CPU
Native syscalls
Native kernel
Inter-VM communication
Strong isolation, enforced by hypervisor + hardware
- no fast-path data transfer between virtual machines
- yes, there are PCI pass-throughs and things like xenbus,
but that's not easy to use, very specific, not portable
Most convenient method: network protocols (L2/L3)
But: huge advantage from a security POV
Inter-container communication
Tunable isolation
- each namespace can be isolated or shared
Allows normal Unix communication mechanisms
- network protocols on loopback interface
- UNIX sockets
- shared memory
- IPC...
Reuse techniques that we know and love (?)
Containerization Is More than the New Virtualization
inter-container
communication
Shared localhost
Multiple containers can share the same “localhost”
(by reusing the same network namespace)
Communication over localhost is very very fast
Also: localhost is a well-known address
Shared filesystem
A directory can be shared by multiple containers
(by using a bind-mount)
That directory can contain:
- named pipes (FIFOs)
- UNIX sockets
- memory-mapped files
Bind-mount = zero overhead
Shared IPC
Multiple containers can share IPC resources
(using the special IPC namespace)
Semaphores, Shared Memory, Message Queues...
Is anybody still using this?
Host networking
Containers can share the host's network stack
(by reusing its network namespace)
They can use the host's interfaces without penalty
(high speed, low latency, no overhead!)
Native performance to talk with external containers
Host filesystems
Containers can share a directory with the host
Example: use fast storage (SAN, SSD...) in container
- mount it on the host
- share it with the container
- done!
Native performance to use I/O subsystem
Containerization Is More than the New Virtualization
separation of
operational
concerns
...What?
“Ops” functions (backups, logging...) can be
performed in separate containers
Application containers can run unchanged in various
environments: dev, test, QA, prod...
logs
Old style
ssh into container
cd /var/log
tail, grep, ack-grep, awk, sed, apachetop, perl, etc.
New style
Create a “data container” to hold the logs
docker run --name logs -v /var/log busybox true
Start app container sharing that volume
docker run --volumes-from logs myapp
Inspect logs
docker run -ti --volumes-from logs -w /var/log ubuntu bash
Use fancy tools without polluting app container
docker run -ti --volumes-from logs turbogrep ...
Bonus points
Ship logs to something else (logstash, syslog...)
docker run --volumes-from logs pipestash
Change logging system independently:
- without rebuilding app container
- without restarting app container
- run multiple logging systems at the same time (e.g. for migration)
backups
Old style
Prepare the tools
- install things like rsync, s3cmd, boto, mysqldump...
- get backup script
Perform one-shot manual backup
- SSH and run the backup script
Set up routine backups
- edit crontab
New style: setup
Create a “data container” to hold the files to back up
docker run --name mysqldata -v /var/lib/mysql busybox true
Start app container sharing that volume
docker run --volumes-from mysqldata mysql
Create a separate image with backup tools
- Dockerfile with “apt-get install rsync s3cmd...”
New style: one-shot manual backup
Use the special backup image
docker run --rm --volumes-from mysqldata mysqlbackup 
tar -cJf- /var/lib/mysql | stream-it-to-the-cloud.py
Of course, you can use something fancier than tar
(e.g. rsync, tarsnap...)
New style: routine backups
Option 1
- run “crond” in backup image
- start backup image and keep it running
Option 2
- start backup script from a crontab entry on the Docker host
Option 3
- have a special “cron” container
- give it access to the Docker API
- let it start the backup container at regular intervals
network
debugging
Old style
ssh into container
Install tcpdump, ngrep, …
Run them
New style
Make a container image with tcpdump, ngrep...
(let's call it “netdebug”)
Run it in the namespace of the application container
docker run -ti --net container:<app_cid> netdebug bash
Now run tcpdump, ngrep, etc.
Want to copy a dump to see it with wireshark?
docker run -ti --net container:... -v /tmp:/tmp netdebug 
tcpdump -s0 -peni eth0 -w/tmp/myapp.pcap
configuration
tweaking
Old style
ssh into container
vi /etc/tomcat/something.xml
(maybe) /etc/init.d/tomcat restart
New style
Option 1
- set up /etc/tomcat to be a “data container”
- start another container sharing this volume; install vi/emacs here
Option 2
- set up /etc/tomcat to be on the host:
docker run -v /etc/containers/myapp:/etc/tomcat …
If needed: restart the container
- docker stop; docker start
- docker kill -s HUP
Containerization Is More than the New Virtualization
epiphany
Containerization Is More than the New Virtualization
composition
Virtual Machine deployment
Linux base system
Libraries
Application
Logging
Backups
Metrics
...
With configuration management
node www {
include common
include web
include logstash
include backup
include graphite
}
Problems
Conflicts between two components
- example: logging and metrics systems use different Java versions
Software certified for different distro
- example: one component requires RHEL 6.4 but you run Ubuntu
Migration from one component to another
- example: from syslog to splunk
Container deployment
Linux base system
Docker
Application container
Logging container
Backups container
Metrics container
...
Containerization Is More than the New Virtualization
benefits
Immutable infrastructure
What's an immutable infrastructure?
- re-create images each time you change a line of code
- prevent (or track) modifications of running images
Why is it useful?
- no more rebellious servers after manual upgrades
- no more “oops, how do we roll back?” after catastrophic upgrade
- easier security audit (inspect images at rest)
How can containers help?
- container images are easier to create and manage than VM images
Micro-service architecture
What's a micro-service architecture?
- break your big application down into many small services
Why is it useful?
- it's easier to upgrade/refactor/replace a small service
- encourages to have many small teams*, each owning a service
(*small teams are supposedly better; see Jeff Bezos' “two-pizza rule”)
How can containers help?
- problem: 10 micro-services instead of 1 big application
= 10x more work to deploy everything
- solution: need extremely easy deployment; hello containers!
Containerization Is More than the New Virtualization
thank you!
questions?
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/docker-
container

More Related Content

What's hot (20)

PDF
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Jérôme Petazzoni
 
PPTX
Lxc – next gen virtualization for cloud intro (cloudexpo)
Boden Russell
 
PPTX
Linux containers – next gen virtualization for cloud (atl summit) ar4 3 - copy
Boden Russell
 
PDF
Linux cgroups and namespaces
Locaweb
 
PDF
Virtualization which isn't: LXC (Linux Containers)
Dobrica Pavlinušić
 
PDF
CoreOS, or How I Learned to Stop Worrying and Love Systemd
Richard Lister
 
PDF
Lxc- Introduction
Luís Eduardo
 
PPTX
Linux Container Brief for IEEE WG P2302
Boden Russell
 
PPTX
KVM and docker LXC Benchmarking with OpenStack
Boden Russell
 
PPTX
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
PDF
LXC, Docker, security: is it safe to run applications in Linux Containers?
Jérôme Petazzoni
 
PPTX
Introduction to linux containers
Google
 
PPTX
Docker: Aspects of Container Isolation
allingeek
 
PPTX
Containers are the future of the Cloud
Pavel Odintsov
 
PDF
Namespaces in Linux
Lubomir Rintel
 
PDF
Evoluation of Linux Container Virtualization
Imesh Gunaratne
 
PDF
Cassandra and docker
Ben Bromhead
 
PPTX
Performance characteristics of traditional v ms vs docker containers (dockerc...
Boden Russell
 
PDF
Docker internals
Rohit Jnagal
 
PPTX
Realizing Linux Containers (LXC)
Boden Russell
 
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Jérôme Petazzoni
 
Lxc – next gen virtualization for cloud intro (cloudexpo)
Boden Russell
 
Linux containers – next gen virtualization for cloud (atl summit) ar4 3 - copy
Boden Russell
 
Linux cgroups and namespaces
Locaweb
 
Virtualization which isn't: LXC (Linux Containers)
Dobrica Pavlinušić
 
CoreOS, or How I Learned to Stop Worrying and Love Systemd
Richard Lister
 
Lxc- Introduction
Luís Eduardo
 
Linux Container Brief for IEEE WG P2302
Boden Russell
 
KVM and docker LXC Benchmarking with OpenStack
Boden Russell
 
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
LXC, Docker, security: is it safe to run applications in Linux Containers?
Jérôme Petazzoni
 
Introduction to linux containers
Google
 
Docker: Aspects of Container Isolation
allingeek
 
Containers are the future of the Cloud
Pavel Odintsov
 
Namespaces in Linux
Lubomir Rintel
 
Evoluation of Linux Container Virtualization
Imesh Gunaratne
 
Cassandra and docker
Ben Bromhead
 
Performance characteristics of traditional v ms vs docker containers (dockerc...
Boden Russell
 
Docker internals
Rohit Jnagal
 
Realizing Linux Containers (LXC)
Boden Russell
 

Viewers also liked (12)

PDF
Manú SPA
Juan Nopitsch
 
PDF
Dino2 - the Amazing Evolution of the VA Smalltalk Virtual Machine
ESUG
 
PPTX
Class seven sura akhlas
Cambriannews
 
PPTX
Top 8 youth program director resume samples
tonychoper1905
 
PPTX
Don't doesn't ed
Gabriela Reyes
 
PPTX
Don't or Doesn't
Bestpresentoksana
 
PPTX
Class seven i like folk songs
Cambriannews
 
PPTX
Bakso somay 2
Ayu Agustina
 
PDF
PRESSURE DROP STUDIES IN WAVY CORRUGATED PLATE HEAT EXCHANGERS
IAEME Publication
 
PDF
La dieta mediterránea
aulasaludable
 
PPT
Medio ambiente
elviracarmen
 
Manú SPA
Juan Nopitsch
 
Dino2 - the Amazing Evolution of the VA Smalltalk Virtual Machine
ESUG
 
Class seven sura akhlas
Cambriannews
 
Top 8 youth program director resume samples
tonychoper1905
 
Don't doesn't ed
Gabriela Reyes
 
Don't or Doesn't
Bestpresentoksana
 
Class seven i like folk songs
Cambriannews
 
Bakso somay 2
Ayu Agustina
 
PRESSURE DROP STUDIES IN WAVY CORRUGATED PLATE HEAT EXCHANGERS
IAEME Publication
 
La dieta mediterránea
aulasaludable
 
Medio ambiente
elviracarmen
 
Ad

Similar to Containerization Is More than the New Virtualization (20)

PDF
Docking postgres
rycamor
 
PDF
Docker Intro at the Google Developer Group and Google Cloud Platform Meet Up
Jérôme Petazzoni
 
PDF
Docker 0.11 at MaxCDN meetup in Los Angeles
Jérôme Petazzoni
 
PDF
"Lightweight Virtualization with Linux Containers and Docker". Jerome Petazzo...
Yandex
 
PDF
Build High-Performance, Scalable, Distributed Applications with Stacks of Co...
Yandex
 
PDF
Docker Introduction + what is new in 0.9
Jérôme Petazzoni
 
PDF
Docker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQ
Jérôme Petazzoni
 
PDF
Containers: from development to production at DevNation 2015
Jérôme Petazzoni
 
PDF
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
dotCloud
 
PDF
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Docker, Inc.
 
PDF
Docker Tips And Tricks at the Docker Beijing Meetup
Jérôme Petazzoni
 
PDF
Docker and Containers for Development and Deployment — SCALE12X
Jérôme Petazzoni
 
PDF
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud
 
PPTX
Introduction to automated environment management with Docker Containers - for...
Lucas Jellema
 
PPTX
The challenge of application distribution - Introduction to Docker (2014 dec ...
Sébastien Portebois
 
PPT
2 Linux Container and Docker
Fabio Fumarola
 
PDF
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
dotCloud
 
PDF
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
 
PDF
Real-World Docker: 10 Things We've Learned
RightScale
 
Docking postgres
rycamor
 
Docker Intro at the Google Developer Group and Google Cloud Platform Meet Up
Jérôme Petazzoni
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Jérôme Petazzoni
 
"Lightweight Virtualization with Linux Containers and Docker". Jerome Petazzo...
Yandex
 
Build High-Performance, Scalable, Distributed Applications with Stacks of Co...
Yandex
 
Docker Introduction + what is new in 0.9
Jérôme Petazzoni
 
Docker Introduction, and what's new in 0.9 — Docker Palo Alto at RelateIQ
Jérôme Petazzoni
 
Containers: from development to production at DevNation 2015
Jérôme Petazzoni
 
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
dotCloud
 
Lightweight Virtualization with Linux Containers and Docker I YaC 2013
Docker, Inc.
 
Docker Tips And Tricks at the Docker Beijing Meetup
Jérôme Petazzoni
 
Docker and Containers for Development and Deployment — SCALE12X
Jérôme Petazzoni
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud
 
Introduction to automated environment management with Docker Containers - for...
Lucas Jellema
 
The challenge of application distribution - Introduction to Docker (2014 dec ...
Sébastien Portebois
 
2 Linux Container and Docker
Fabio Fumarola
 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
dotCloud
 
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
 
Real-World Docker: 10 Things We've Learned
RightScale
 
Ad

More from C4Media (20)

PDF
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
C4Media
 
PDF
Next Generation Client APIs in Envoy Mobile
C4Media
 
PDF
Software Teams and Teamwork Trends Report Q1 2020
C4Media
 
PDF
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
PDF
Kafka Needs No Keeper
C4Media
 
PDF
High Performing Teams Act Like Owners
C4Media
 
PDF
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
 
PDF
Service Meshes- The Ultimate Guide
C4Media
 
PDF
Shifting Left with Cloud Native CI/CD
C4Media
 
PDF
CI/CD for Machine Learning
C4Media
 
PDF
Fault Tolerance at Speed
C4Media
 
PDF
Architectures That Scale Deep - Regaining Control in Deep Systems
C4Media
 
PDF
ML in the Browser: Interactive Experiences with Tensorflow.js
C4Media
 
PDF
Build Your Own WebAssembly Compiler
C4Media
 
PDF
User & Device Identity for Microservices @ Netflix Scale
C4Media
 
PDF
Scaling Patterns for Netflix's Edge
C4Media
 
PDF
Make Your Electron App Feel at Home Everywhere
C4Media
 
PDF
The Talk You've Been Await-ing For
C4Media
 
PDF
Future of Data Engineering
C4Media
 
PDF
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
C4Media
 
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
C4Media
 
Next Generation Client APIs in Envoy Mobile
C4Media
 
Software Teams and Teamwork Trends Report Q1 2020
C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
Kafka Needs No Keeper
C4Media
 
High Performing Teams Act Like Owners
C4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
 
Service Meshes- The Ultimate Guide
C4Media
 
Shifting Left with Cloud Native CI/CD
C4Media
 
CI/CD for Machine Learning
C4Media
 
Fault Tolerance at Speed
C4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
C4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
C4Media
 
Build Your Own WebAssembly Compiler
C4Media
 
User & Device Identity for Microservices @ Netflix Scale
C4Media
 
Scaling Patterns for Netflix's Edge
C4Media
 
Make Your Electron App Feel at Home Everywhere
C4Media
 
The Talk You've Been Await-ing For
C4Media
 
Future of Data Engineering
C4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
C4Media
 

Recently uploaded (20)

PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
Digital Circuits, important subject in CS
contactparinay1
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 

Containerization Is More than the New Virtualization

  • 2. InfoQ.com: News & Community Site • 750,000 unique visitors/month • Published in 4 languages (English, Chinese, Japanese and Brazilian Portuguese) • Post content from our QCon conferences • News 15-20 / week • Articles 3-4 / week • Presentations (videos) 12-15 / week • Interviews 2-3 / week • Books 1 / month Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations /docker-container
  • 3. Purpose of QCon - to empower software development by facilitating the spread of knowledge and innovation Strategy - practitioner-driven conference designed for YOU: influencers of change and innovation in your teams - speakers and topics driving the evolution and innovation - connecting and catalyzing the influencers and innovators Highlights - attended by more than 12,000 delegates since 2007 - held in 9 cities worldwide Presented at QCon San Francisco www.qconsf.com
  • 4. Jérôme Petazzoni (@jpetazzo) Grumpy French DevOps - Go away or I will replace you with a very small shell script Runs everything in containers - Docker-in-Docker - VPN-in-Docker - KVM-in-Docker - Xorg-in-Docker - ...
  • 7. Outline Containers as lightweight VMs Containers vs VMs Separation of operational concerns Benefits Conclusions
  • 10. It looks like a VM Private process space Can run stuff as root Private network interface and IP address Custom routes, iptables rules, etc. Can mount filesystems and more
  • 11. Process tree in a “machine container” PID TTY STAT TIME COMMAND 1 ? Ss+ 0:00 /usr/bin/python3 -u /sbin/my_init --enable-insecure-key 104 ? S+ 0:00 /usr/bin/runsvdir -P /etc/service 105 ? Ss 0:00 _ runsv syslog-ng 108 ? S 0:00 | _ syslog-ng -F -p /var/run/syslog-ng.pid --no-caps 106 ? Ss 0:00 _ runsv sshd 109 ? S 0:00 | _ /usr/sbin/sshd -D 117 ? Ss 0:00 | _ sshd: root@pts/0 119 pts/0 Ss 0:00 | _ -bash 135 pts/0 R+ 0:00 | _ ps fx 107 ? Ss 0:00 _ runsv cron 110 ? S 0:00 _ /usr/sbin/cron -f
  • 12. Faster to boot, less overhead than a VM $ time docker run ubuntu echo hello world hello world real 0m0.258s Disk usage: less than 100 kB Memory usage: less than 1.5 MB
  • 19. Virtual Machines Emulate CPU instructions (painfully slow) Emulate hardware (storage, network...) (painfully slow) Run as a userland process on top of a kernel (painfully slow)
  • 20. Virtual Machines Use native CPU (fast!) Paravirtualized storage, network... (fast, but higher resource usage) Run on top of a hypervisor (faster, but still some overhead)
  • 21. Containers Processes isolated from each other Very little extra code path (in many cases, it's comparable to UID checking)
  • 22. Virtual Machines vs Containers Native CPU Paravirtualized devices Hypervisor Native CPU Native syscalls Native kernel
  • 23. Inter-VM communication Strong isolation, enforced by hypervisor + hardware - no fast-path data transfer between virtual machines - yes, there are PCI pass-throughs and things like xenbus, but that's not easy to use, very specific, not portable Most convenient method: network protocols (L2/L3) But: huge advantage from a security POV
  • 24. Inter-container communication Tunable isolation - each namespace can be isolated or shared Allows normal Unix communication mechanisms - network protocols on loopback interface - UNIX sockets - shared memory - IPC... Reuse techniques that we know and love (?)
  • 27. Shared localhost Multiple containers can share the same “localhost” (by reusing the same network namespace) Communication over localhost is very very fast Also: localhost is a well-known address
  • 28. Shared filesystem A directory can be shared by multiple containers (by using a bind-mount) That directory can contain: - named pipes (FIFOs) - UNIX sockets - memory-mapped files Bind-mount = zero overhead
  • 29. Shared IPC Multiple containers can share IPC resources (using the special IPC namespace) Semaphores, Shared Memory, Message Queues... Is anybody still using this?
  • 30. Host networking Containers can share the host's network stack (by reusing its network namespace) They can use the host's interfaces without penalty (high speed, low latency, no overhead!) Native performance to talk with external containers
  • 31. Host filesystems Containers can share a directory with the host Example: use fast storage (SAN, SSD...) in container - mount it on the host - share it with the container - done! Native performance to use I/O subsystem
  • 34. ...What? “Ops” functions (backups, logging...) can be performed in separate containers Application containers can run unchanged in various environments: dev, test, QA, prod...
  • 35. logs
  • 36. Old style ssh into container cd /var/log tail, grep, ack-grep, awk, sed, apachetop, perl, etc.
  • 37. New style Create a “data container” to hold the logs docker run --name logs -v /var/log busybox true Start app container sharing that volume docker run --volumes-from logs myapp Inspect logs docker run -ti --volumes-from logs -w /var/log ubuntu bash Use fancy tools without polluting app container docker run -ti --volumes-from logs turbogrep ...
  • 38. Bonus points Ship logs to something else (logstash, syslog...) docker run --volumes-from logs pipestash Change logging system independently: - without rebuilding app container - without restarting app container - run multiple logging systems at the same time (e.g. for migration)
  • 40. Old style Prepare the tools - install things like rsync, s3cmd, boto, mysqldump... - get backup script Perform one-shot manual backup - SSH and run the backup script Set up routine backups - edit crontab
  • 41. New style: setup Create a “data container” to hold the files to back up docker run --name mysqldata -v /var/lib/mysql busybox true Start app container sharing that volume docker run --volumes-from mysqldata mysql Create a separate image with backup tools - Dockerfile with “apt-get install rsync s3cmd...”
  • 42. New style: one-shot manual backup Use the special backup image docker run --rm --volumes-from mysqldata mysqlbackup tar -cJf- /var/lib/mysql | stream-it-to-the-cloud.py Of course, you can use something fancier than tar (e.g. rsync, tarsnap...)
  • 43. New style: routine backups Option 1 - run “crond” in backup image - start backup image and keep it running Option 2 - start backup script from a crontab entry on the Docker host Option 3 - have a special “cron” container - give it access to the Docker API - let it start the backup container at regular intervals
  • 45. Old style ssh into container Install tcpdump, ngrep, … Run them
  • 46. New style Make a container image with tcpdump, ngrep... (let's call it “netdebug”) Run it in the namespace of the application container docker run -ti --net container:<app_cid> netdebug bash Now run tcpdump, ngrep, etc. Want to copy a dump to see it with wireshark? docker run -ti --net container:... -v /tmp:/tmp netdebug tcpdump -s0 -peni eth0 -w/tmp/myapp.pcap
  • 48. Old style ssh into container vi /etc/tomcat/something.xml (maybe) /etc/init.d/tomcat restart
  • 49. New style Option 1 - set up /etc/tomcat to be a “data container” - start another container sharing this volume; install vi/emacs here Option 2 - set up /etc/tomcat to be on the host: docker run -v /etc/containers/myapp:/etc/tomcat … If needed: restart the container - docker stop; docker start - docker kill -s HUP
  • 54. Virtual Machine deployment Linux base system Libraries Application Logging Backups Metrics ...
  • 55. With configuration management node www { include common include web include logstash include backup include graphite }
  • 56. Problems Conflicts between two components - example: logging and metrics systems use different Java versions Software certified for different distro - example: one component requires RHEL 6.4 but you run Ubuntu Migration from one component to another - example: from syslog to splunk
  • 57. Container deployment Linux base system Docker Application container Logging container Backups container Metrics container ...
  • 60. Immutable infrastructure What's an immutable infrastructure? - re-create images each time you change a line of code - prevent (or track) modifications of running images Why is it useful? - no more rebellious servers after manual upgrades - no more “oops, how do we roll back?” after catastrophic upgrade - easier security audit (inspect images at rest) How can containers help? - container images are easier to create and manage than VM images
  • 61. Micro-service architecture What's a micro-service architecture? - break your big application down into many small services Why is it useful? - it's easier to upgrade/refactor/replace a small service - encourages to have many small teams*, each owning a service (*small teams are supposedly better; see Jeff Bezos' “two-pizza rule”) How can containers help? - problem: 10 micro-services instead of 1 big application = 10x more work to deploy everything - solution: need extremely easy deployment; hello containers!
  • 64. Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations/docker- container