SlideShare a Scribd company logo
Linux Containers and
Dockers
When, Pros and Cons
Dr. Fabio Fumarola
Contents
• The Evolution of IT
• The Solutions: Virtual Machines vs Vagrant vs Docker
• Differences
• Examples: Vagrant, Boot2Docker, Docker, Docker
Hub
• Orchestrate Docker
• Mesosphere
• CoreOS
2
From 1995 to 2015
3
Client-Server
App
Well-defined stack:
- O/S
- Runtime
- Middleware
Monolithic
Physical
Infrastructure
Thin app on mobile,
tablet
Assembled by
developers using
best available
services
Running on any
available set of
physical resources
(public/private/
virtualized)
Static website
Web frontend
User DB
Queue Analytics DB
Background workers
API endpoint
nginx 1.5 + modsecurity + openssl + bootstrap
2
postgresql + pgv8 + v8
hadoop + hive + thrift + OpenJDK
Ruby + Rails + sass + Unicorn
Redis + redis-sentinel
Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv
+ nodejs + phantomjs
Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-
client
Development VM
QA server
Public Cloud
Disaster recovery
Contributor’s laptop
Production Servers
2015 in Detail
Production Cluster
Customer Data Center
4
Challenges
• How to ensure that services interact consistently?
• How to avoid to setup N different configurations and
dependencies for each service?
• How to migrate and scale quickly ensuring
compatibility?
• How to replicate my VM and services quickly?
5
How to deal with different confs?
6
Static website
Web frontend
Background workers
User DB
Analytics DB
Queue
Development
VM
QA Server
Single Prod
Server
Onsite Cluster Public Cloud
Contributor’s
laptop
Customer
Servers
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
1. Virtual Machines
7
Virtual Machines
• Run on top of an Hypervisor
Pros
– fully virtualized OS
– Totally isolated
Cons
– Needs to take a snapshot of
the entire VM to replicate
– Uses a lot of space
– Slow to move around
8
App
A
Hypervisor
Host OS
Server
Guest
OS
Bins/
Libs
App
A’
Guest
OS
Bins/
Libs
App
B
Guest
OS
Bins/
Libs
Guest
OS
Guest
OS
VM
Hypervisors Trend
2011
– XEN: Default choice given Rackspace and Amazon use
– KVM: Bleeding edge users
2012
– KVM: Emerges as the lead
– XEN: Loses momentum
9
Hipervisors Trend
2013
– KVM: Maintains lead (around 90%+ for Mirantis)
– Vmware: Emerges as a surprising second choice
– Containers (LXC, Parallels, Docker): Web Hosting and SAS
focused
– Xen and HyperV: Infrequent requests (XenServer.org)
2014 – 2015
– ???
10
2. Vagrant
11
Vagrant
• Open source VM manager released in 2010
• It allows you to script and package VMs config and
the provisioning setup via a VagrantFile
• It is designed to run on top of almost any VM tool:
VirtualBox, VMVare, AWS, OpenStack1
• It can be used together with provisioning tools such
as shell scripts, Chef and Puppet.
12
1. https://github.com/cloudbau/vagrant-openstack-plugin
Vagrant: idea
Use a VagrantFile to install
1.an operating system
2.Required libraries and
software
and finally run programs and
processes of your final
application
13
Vagrant: Feature
• Command-Line Interface
• Vagrant Share
• VagrantFile
• Boxes
• Provisioning
• Networking
• Synced Folders
• Multi-Machine
• Providers
• Plugins
14
https://www.vagrantup.com/downloads
Vagrant: Demo
• It allows us to interact with Vagrant
• It offers the following commands: box, connect,
destroy, halt, init, login, package a vm, rdp, …
https://docs.vagrantup.com/v2/cli/index.html
15
Vagrant Example
1. Download and install VirtualBox and Vagrant
1. This will place a VagrantFile in the directory
2. Install a Box
3. Using a Box -> https://vagrantcloud.com/
16
$ mkdir vagrant_first_vm && cd vagrant_first_vm
$ vagrant init
$ vagrant box add ubuntu/trusty64
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
end
Vagran: Start
1. Start the box
2. Login into the vm
3. You can destroy the vm by
17
$ vagrant up
$ vagrant ssh
$ vagrant destroy
Vagrant: Synced Folders
• By default, it shares your project directory to the /vagrant
directory on the guest machine.
• If you create a file on your guest os the file will be on the
vagrant vm.
18
$ vagrant up
$ vagrant ssh
$ ls /vagrant
--Vagrantfile
$ touch pippo.txt
$vagrant ssh
$ls /vagrant/
Vagrant: Provisioning
• Let’s install Apache via a boostrap.sh file
• If you create a file on your gues os the file will be on the
vagrant vm. (vagrant reload --provision)
19
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
config.vm.provision :shell, path: "bootstrap.sh"
end
Vagrant: Networking
• Port Forwarding: llows you to specify ports on the guest
machine to share via a port on the host machine
• By running vagrant reload or vagrant up we can see on
http://127.0.0.1:4567 our apache
• It supports also bridge configurations and other
configurations (https://docs.vagrantup.com/v2/networking/)
20
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise32"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.network :forwarded_port, host: 4567, guest: 80
end
Vagrant: Share and Provider
• It is possible to share Vagrant box via vagrant cloud (but?)
Providers
• By default Vagrant is configured with VirtualBox but you can
change the provider
• How?
21
$ vagrant up --provider=vmware_fusion
$ vagrant up --provider=aws
$ vagrant plugin install vagrant-aws
Vagrant: AWS Vagrantfile
22
Vagrant.configure("2") do |config|
# config.vm.box = "sean"
config.vm.provider :aws do |aws, override|
aws.access_key_id = "AAAAIIIIYYYY4444AAAA”
aws.secret_access_key =
"c344441LooLLU322223526IabcdeQL12E34At3mm”
aws.keypair_name = "iheavy"
aws.ami = "ami-7747d01e"
override.ssh.username = "ubuntu"
override.ssh.private_key_path = "/var/root/iheavy_aws/pk-
XHHHHHMMMAABPEDEFGHOAOJH1QBH5324.pem"
end
end
3. Docker
23
Quick Survey
• How many people have heard of Docker before this
Seminar?
• How many people have tried Docker ?
• How many people are using Docker in production ?
24
What is Docker?
"With Docker, developers can build any app in any
language using any toolchain. “Dockerized” apps are
completely portable and can run anywhere -
colleagues’ OS X and Windows laptops, QA servers
running Ubuntu in the cloud, and production data
center VMs running Red Hat.”
Docker.io
25
Docker in simple words
• It is a technology that allow you running applications
inside containers (not VM)
• This assures that libraries and package needed by the
application you run are always the same.
• This means you can make a container for Memcache
and another for Redis and they will work the same in
any OS (also in Vagrant).
26
Why Docker?
• Fast delivery of your applications
• Deploy and scale more easily
• Get higher density and run more workload
• Faster deployment makes for easier management
27
How does docker work?
• LinuX Containers (LXC)
• Control Groups & Namespaces (CGroups)
• AUFS
• Client – Server with an HTTP API
28
LXC- Linux Containers
• It is a user-space interface for the Linux kernel containment
features
• Through a powerful API and simple tools, it lets Linux users easily
create and manage system or application containers.
• Currently LXC can apply the following kernel features to contain
processes:
– Kernel namespaces (ipc, uts, mount, pid, network and user)
– Apparmor and SELinux profiles
– Seccomp policies
– Chroots (using pivot_root)
– Kernel capabilities & Control groups (cgroups)
29
Cgroups
• Control groups is a Linux kernel feature to limit, account and
isolate resource usage (CPU, memory, disk I/O, etc) of process
groups.
• Features:
– Resource limitation: limit CPU, memory…
– Prioritization: assign more CPU etc to some groups.
– Accounting: to measure the resource usage.
– Control: freezing groups or check-pointing and restarting.
30
LCX based Containers
• It allows us to run a Linux system within another Linux system.
• A container is a group of processes on a Linux box, put together
is an isolated environment.
31
AppA’
Docker Engine
Host OS
Server
Bins/Libs
AppA
Bins/Libs
AppB
AppB’
AppB’
AppB’
AppB’
Container
• From the inside it looks like a VM
• From the outside, it looks like normal
processes
Docker Features
• VE (Virtual Environments) based on LXC
• Portable deployment across machines
• Versioning: docker include git-like capabilities for tracking
versions of a container
• Component reuse: it allows building or stacking already
created packages. You can create ‘base images’ and then
running more machine based on the image.
• Shared libraries: there is a public repository with several
images (https://registry.hub.docker.com/)
32
Why are Docker Containers lightweight?
33
Bins
/
Libs
App
A
Original App
(No OS to take
up space, resources,
or require restart)
AppΔ
Bins/
App
A
Bins/
Libs
App
A’
Gues
t
OS
Bins/
Libs
Modified App
Union file system allows
us to only save the diffs
Between container A
and container A’
VMs
App
A
Gues
t
OS
Bins/
Libs
Copy of
App
No OS. Can
Share bins/libs
App
A
Gues
t
OS
Gues
t
OS
Containers
Prerequisites
• I use Oh My Zsh1
with the Docker plugin2
for autocompletion
of docker commands
• Linux at least with kernel 3.8 but 3.10.x is recommended
– $ uname –r
• MacOS or Windows via Boot2Docker3
or via Vagrant
34
1. https://github.com/robbyrussell/oh-my-zsh
2. https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#docker
3. http://boot2docker.io/
Docker Installation Ubuntu
• AUFS support
$ sudo apt-get update
$ sudo apt-get intall linux-image-extra-`uname –r`
• Add docker repo
$ sudo sh –c “curl https://get.docker.io/gpg | apt-key add -”
$ sudo sh –c “echo deb http://get.docker.io/ubuntu docker 
main > /etc/apt/sources.list.d/docker.list”
• Install
$ sudo apt-get update
$ sudo apt-get install lxc-docker
35
Docker install Vagrant
• Create the folders
$ mkdir ~/boot2docker
$ cd ~/boot2docker
• Init the vagrant box
$ vagrant init yungsang/boot2docker
$ vagrant up; export DOCKER_HOST=tcp://localhost:2375
• Check docker
$ docker version
* NOTE: the YungSang boot2docker opens up port forwarding
to the network, so is not safe on public wifi.
36
Docker 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
• Docker client works normally
37
Docker install boot2docker
http://boot2docker.io/
38
Base Commands
39
Docker: hello world
• Get one base image from https://registry.hub.docker.com
$ sudo docker pull centos
• List images on your system
$ sudo docker images
• Check the images
–$ sudo docker images
• Run your first container
–$ sudo docker run centos:latest echo “hello world”
40
An Interactive Container
• Run bash in your container
– $ sudo docker run -t -i centos /bin/bash
• The -t flag assigns a pseudo-tty or terminal inside our new
container
• The -i flag allows us to make an interactive connection by
grabbing the standard in (STDIN) of the container
• We also specified a command for the container
41
A Daemonized Hello world
• Run a sh script
– sudo docker run -d centos:6 /bin/sh –c ‘while true; do echo hello
world; sleep 1; done’
• The -d flag tells Docker to run the container and put it in the
background, to daemonize it.
• To list the docker containers running
– $ docker ps
• To get the logs of the container
– $ sudo docker logs container_id
• To stop the container:
– $ sudo docker stop container_id
42
A web container with docker
• To run a Python Flask application
– $ sudo docker run -d -P training/webapp python app.py
• The -P flag is new and tells Docker to map any required
network ports inside our container to our host.
• To view our application with the port mapping
– $ sudo docker ps –l
• We can see that the default flask port 5000 is exposed to
49155
– $ sudo docker run -d -p 5000:5000 training/webapp python app.py
• Check the url to continue the guide
– https://docs.docker.com/userguide/usingdocker/
43
Working with docker images
• To find images go to
– https://hub.docker.com/
• To pull an image
– $ sudo docker pull training/sinatra
• Updating and committing an image
– $ sudo docker run -t -i training/sinatra /bin/bash
– # gem install json
– $ sudo docker commit -m="Added json gem" -a="Kate Smith" 
0b2616b0e5a8 ouruser/sinatra:v2
- $ sudo docker images
44
Create an image from a Dockerfile
FROM library/centos:centos6
MAINTAINER fabio fumarola fabiofumarola@gmail.com
RUN yum install -y curl which tar sudo openssh-server openssh-clients rsync
# passwordless ssh
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa
RUN cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
45
Build and run an image
• $docker build –t fabio/centos:ssh .
• $docker run –i –t fabio/centos:ssh /bin/bash
• Or
• $docker run –d fabio/centos:ssh /bin/bash
• Check the following commands:
– $ docker top
– $ docker logs
– $ docker inspect
46
Other Commands
• Docker cp: copy a file from container to host
• Docker diff: print container changes
• Docker top: display running processes in a container
• Docker rm /rmi: delete container/image
• Docker wait: wait until container stop and print exit code
More on: http://docs.docker.io/en/latest/commandline/cli
47
Docker vs Vagrant?
• Less memory for Dockers w.r.t VMs
• With a VM you get more isolation, but is much heavier.
Indeed you can run 1000 of Dockers in a machine but not
thousand of VMs with Xen.
• A VM requires minutes to start a Docker seconds
There are pros and cons for each type.
• If you want full isolation with guaranteed resources a full VM
is the way to go.
• If you want hundred of isolate processes into a reasonably
sized host then Docker might be the best solution
48
Orchestrate Docker with Machine,
Swarm and Compose
http://blog.docker.com/2015/02/orchestrating-docker-with-machine-
swarm-and-compose/
49
Motivation
• Docker Engine works well for packaging applications
making much easier to
– build,
– deploy
– and move between providers.
• But, to deploy complex application consisting of
multiple services we need to resort to shell scripts.
50
Motivation
• This isn’t ideal
• We’d like to have a more controllable method to
distribute applications in the cloud.
• We need that our distributed application is:
– Portable across environments: run seamlessly in testing,
staging and production
– Portable across providers: move the applications between
different cloud providers
– Composable: split up an application in multiple services
51
How to Orchestrate Dockers
There are three new tools that can be used to
orchestrate docker containers:
•Machine,
•Swarm,
•Compose.
52
Docker Machine
• It lets easily deploy docker engines on your
computer, on cloud providers and in a data center.
• It supports the following providers:
53
• Amazon EC2
• Microsoft Azure
• Microsoft Hyper-V
• DigitalOcean
• Google Compute Engine
• OpenStack
• Rackspace
• SoftLayer
• VirtualBox
• VMware Fusion
• VMware vCloud Air
• VMware vSphere
Docker Machine
• It is supported on Windows, OSX, and Linux.
– Windows - x86_64
– OSX - x86_64
– Linux - x86_64
– Windows - i386
– OSX - i386
– Linux - i386
• At the lab we will explore how to use it.
54
Swarm and Weave
• Swarm allows us to connect together several docker
containers deployed on different sub-networks.
• This happens when you need to deploy dockers in
several machines and you want to achieve resilience
through load balancing.
• It pools together several Docker Engines into a single
virtual host.
55
http://blog.docker.com/2015/02/scaling-docker-with-swarm/
Swarm and Weave
• css
56https://github.com/zettio/weave
Swarm and Weave
57
Compose
• It is a way of defining and running multi-container
distributed applications with Docker.
• When you need to setup an application that requires
other services (e.g. redis, postgres,…) it is possible to
use compose.
• Next, you define the components that make your
app so they can be run together in an isolate
environment.
58
Compose
• It is based on a dockerfile and on a yaml
configuration file
59
Dockerfile docker-compose.yml
FROM python:2.7
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code
CMD python app.py
web:
build: .
links:
- redis
ports:
- "5000:5000"
redis:
image: redis
Mesosphere
http://mesosphere.com/
60
Mesosphere
• It is an apache project
that allows you to
separate
– the application you
deploy
– From the datacenter
administration
61
Frameworks on Mesos
62
Additional Contributions
63
Core OS
64
CoreOS
• A minimal operating system
• Painless updating: utilizes active/passive scheme to update
the OS as single unit instead of package by package.
• Docker container
• Clustered by default
• Distributed System tools: etcd key-value store
• Service discovery: easily locate where service are running in
the cluster
• High availability and automatic fail-over
65
CoreOS
66
Clustered by default
High availability and a
utomatic fail-over
Docker with CoreOS
Features
•Automatically runs on each CoreOS
machine
•Updated with regular automatic OS
updates
•Integrates with etcd
•Networking automatically configured
Example Akka cluster + Docker + CoreOS
https://github.com/dennybritz/akka-
cluster-deploy
67
References
• http://www.iheavy.com/2014/01/16/how-to-deploy-on-amazon-ec2-
with-vagrant/
• https://docs.vagrantup.com/v2/
• Vagrant: Up and Running Paperback – June 15, 2013
• https://github.com/patrickdlee/vagrant-examples
• https://linuxcontainers.org/ LXC
• https://www.kernel.org/doc/Documentation/cgroups/
• http://lamejournal.com/2014/09/19/vagrant-vs-docker-osx-tales-front/
• https://medium.com/@_marcos_otero/docker-vs-vagrant-582135beb623
• https://coreos.com/using-coreos/docker/
68

More Related Content

What's hot (20)

PDF
Docker and Kubernetes 101 workshop
Sathish VJ
 
PDF
Docker - introduction
Michał Kurzeja
 
PDF
Docker Introduction + what is new in 0.9
Jérôme Petazzoni
 
PDF
All Things Containers - Docker, Kubernetes, Helm, Istio, GitOps and more
All Things Open
 
PPTX
Docker and kubernetes
Dongwon Kim
 
PDF
99cloud Docker Training module 2
Liang Bo
 
PDF
Ansible docker
QNIB Solutions
 
PDF
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
 
PDF
Why Go Lang?
Sathish VJ
 
PDF
Docker and the Linux Kernel
Docker, Inc.
 
PDF
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
dotCloud
 
PDF
Docker Intro
Ruben Taelman
 
PDF
Shifter: Containers in HPC Environments
inside-BigData.com
 
PDF
Docker module 1
Liang Bo
 
ODP
Why Docker? Dayton PHP, April 2017
Chris Tankersley
 
PDF
Orchestrating Docker containers at scale
Maciej Lasyk
 
PPTX
Docker
Cary Gordon
 
PDF
What's New in Docker 1.12 by Nishant Totla for Docker SF Meetup 08.03.16
Docker, Inc.
 
PDF
Visualising Basic Concepts of Docker
vishnu rao
 
PDF
Docker HK Meetup - 201707
Clarence Ho
 
Docker and Kubernetes 101 workshop
Sathish VJ
 
Docker - introduction
Michał Kurzeja
 
Docker Introduction + what is new in 0.9
Jérôme Petazzoni
 
All Things Containers - Docker, Kubernetes, Helm, Istio, GitOps and more
All Things Open
 
Docker and kubernetes
Dongwon Kim
 
99cloud Docker Training module 2
Liang Bo
 
Ansible docker
QNIB Solutions
 
A Gentle Introduction To Docker And All Things Containers
Jérôme Petazzoni
 
Why Go Lang?
Sathish VJ
 
Docker and the Linux Kernel
Docker, Inc.
 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
dotCloud
 
Docker Intro
Ruben Taelman
 
Shifter: Containers in HPC Environments
inside-BigData.com
 
Docker module 1
Liang Bo
 
Why Docker? Dayton PHP, April 2017
Chris Tankersley
 
Orchestrating Docker containers at scale
Maciej Lasyk
 
Docker
Cary Gordon
 
What's New in Docker 1.12 by Nishant Totla for Docker SF Meetup 08.03.16
Docker, Inc.
 
Visualising Basic Concepts of Docker
vishnu rao
 
Docker HK Meetup - 201707
Clarence Ho
 

Viewers also liked (20)

PDF
Container World 2017!
kgraham32
 
PDF
Container World 2017 - Characterizing and Contrasting Container Orchestrators
Lee Calcote
 
PPTX
Docker introduction
dotCloud
 
PDF
Docker introduction
Layne Peng
 
PPTX
WebSphere Application Server Liberty Profile and Docker
David Currie
 
PDF
Déploiements avec Docker
Luis Lopez
 
PDF
DOCKER AVEC RANCHER
TREEPTIK
 
PDF
Rkt Container Engine
Thuc Le Dong
 
PDF
DrGanesh-Jan-17-Resume-V1.0
Dr Ganesh Iyer
 
PDF
Docker and Azure
Alessandro Melchiori
 
PDF
Cgroup resource mgmt_v1
sprdd
 
PDF
Evoluation of Linux Container Virtualization
Imesh Gunaratne
 
PPTX
Accelerating Neutron with Intel DPDK
Alexander Shalimov
 
PPTX
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
Ido Flatow
 
PDF
LISA15: systemd, the Next-Generation Linux System Manager
Alison Chaiken
 
PPTX
Oracle Performance On Linux X86 systems
Baruch Osoveskiy
 
PDF
Tuning systemd for embedded
Alison Chaiken
 
PDF
IRQs: the Hard, the Soft, the Threaded and the Preemptible
Alison Chaiken
 
PDF
Comparing file system performance: Red Hat Enterprise Linux 6 vs. Microsoft W...
Principled Technologies
 
PPTX
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
Container World 2017!
kgraham32
 
Container World 2017 - Characterizing and Contrasting Container Orchestrators
Lee Calcote
 
Docker introduction
dotCloud
 
Docker introduction
Layne Peng
 
WebSphere Application Server Liberty Profile and Docker
David Currie
 
Déploiements avec Docker
Luis Lopez
 
DOCKER AVEC RANCHER
TREEPTIK
 
Rkt Container Engine
Thuc Le Dong
 
DrGanesh-Jan-17-Resume-V1.0
Dr Ganesh Iyer
 
Docker and Azure
Alessandro Melchiori
 
Cgroup resource mgmt_v1
sprdd
 
Evoluation of Linux Container Virtualization
Imesh Gunaratne
 
Accelerating Neutron with Intel DPDK
Alexander Shalimov
 
From VMs to Containers: Introducing Docker Containers for Linux and Windows S...
Ido Flatow
 
LISA15: systemd, the Next-Generation Linux System Manager
Alison Chaiken
 
Oracle Performance On Linux X86 systems
Baruch Osoveskiy
 
Tuning systemd for embedded
Alison Chaiken
 
IRQs: the Hard, the Soft, the Threaded and the Preemptible
Alison Chaiken
 
Comparing file system performance: Red Hat Enterprise Linux 6 vs. Microsoft W...
Principled Technologies
 
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
Ad

Similar to 2 Linux Container and Docker (20)

PPTX
Docker - Portable Deployment
javaonfly
 
PPTX
Docker intro
spiddy
 
PPTX
Docker - Demo on PHP Application deployment
Arun prasath
 
PPTX
Docker-Intro
Sujai Sivasamy
 
PPTX
OpenStack Summit
Docker, Inc.
 
PPTX
Intro to Docker November 2013
Docker, Inc.
 
PDF
Introduction to Docker
Aditya Konarde
 
PDF
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
dotCloud
 
PDF
Application Deployment on Openstack
Docker, Inc.
 
PDF
Docker-v3.pdf
Bruno Cornec
 
PPTX
State of the Container Ecosystem
Vinay Rao
 
PPTX
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Van Phuc
 
PPTX
Docker intro
NoelMc Grath
 
PPTX
Intro Docker october 2013
dotCloud
 
PPTX
Docker open stack boston
dotCloud
 
PPTX
OpenStack Boston
Docker, Inc.
 
PPTX
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
dotCloud
 
PDF
Containing the world with Docker
Giuseppe Piccolo
 
PPTX
Virtual machines and containers
Patrick Pierson
 
Docker - Portable Deployment
javaonfly
 
Docker intro
spiddy
 
Docker - Demo on PHP Application deployment
Arun prasath
 
Docker-Intro
Sujai Sivasamy
 
OpenStack Summit
Docker, Inc.
 
Intro to Docker November 2013
Docker, Inc.
 
Introduction to Docker
Aditya Konarde
 
Docker Presentation at the OpenStack Austin Meetup | 2013-09-12
dotCloud
 
Application Deployment on Openstack
Docker, Inc.
 
Docker-v3.pdf
Bruno Cornec
 
State of the Container Ecosystem
Vinay Rao
 
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Van Phuc
 
Docker intro
NoelMc Grath
 
Intro Docker october 2013
dotCloud
 
Docker open stack boston
dotCloud
 
OpenStack Boston
Docker, Inc.
 
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
dotCloud
 
Containing the world with Docker
Giuseppe Piccolo
 
Virtual machines and containers
Patrick Pierson
 
Ad

More from Fabio Fumarola (20)

PPT
11. From Hadoop to Spark 2/2
Fabio Fumarola
 
PPT
11. From Hadoop to Spark 1:2
Fabio Fumarola
 
PPT
10b. Graph Databases Lab
Fabio Fumarola
 
PPT
10. Graph Databases
Fabio Fumarola
 
PPT
9b. Document-Oriented Databases lab
Fabio Fumarola
 
PPT
9. Document Oriented Databases
Fabio Fumarola
 
PPT
8b. Column Oriented Databases Lab
Fabio Fumarola
 
PPT
8a. How To Setup HBase with Docker
Fabio Fumarola
 
PPT
8. column oriented databases
Fabio Fumarola
 
PPT
8. key value databases laboratory
Fabio Fumarola
 
PPT
7. Key-Value Databases: In Depth
Fabio Fumarola
 
PPT
6 Data Modeling for NoSQL 2/2
Fabio Fumarola
 
PPT
5 Data Modeling for NoSQL 1/2
Fabio Fumarola
 
PDF
1. Introduction to the Course "Designing Data Bases with Advanced Data Models...
Fabio Fumarola
 
PPT
Scala and spark
Fabio Fumarola
 
PPT
Hbase an introduction
Fabio Fumarola
 
PPT
An introduction to maven gradle and sbt
Fabio Fumarola
 
PPTX
08 datasets
Fabio Fumarola
 
PPTX
A Parallel Algorithm for Approximate Frequent Itemset Mining using MapReduce
Fabio Fumarola
 
PPT
NoSQL databases pros and cons
Fabio Fumarola
 
11. From Hadoop to Spark 2/2
Fabio Fumarola
 
11. From Hadoop to Spark 1:2
Fabio Fumarola
 
10b. Graph Databases Lab
Fabio Fumarola
 
10. Graph Databases
Fabio Fumarola
 
9b. Document-Oriented Databases lab
Fabio Fumarola
 
9. Document Oriented Databases
Fabio Fumarola
 
8b. Column Oriented Databases Lab
Fabio Fumarola
 
8a. How To Setup HBase with Docker
Fabio Fumarola
 
8. column oriented databases
Fabio Fumarola
 
8. key value databases laboratory
Fabio Fumarola
 
7. Key-Value Databases: In Depth
Fabio Fumarola
 
6 Data Modeling for NoSQL 2/2
Fabio Fumarola
 
5 Data Modeling for NoSQL 1/2
Fabio Fumarola
 
1. Introduction to the Course "Designing Data Bases with Advanced Data Models...
Fabio Fumarola
 
Scala and spark
Fabio Fumarola
 
Hbase an introduction
Fabio Fumarola
 
An introduction to maven gradle and sbt
Fabio Fumarola
 
08 datasets
Fabio Fumarola
 
A Parallel Algorithm for Approximate Frequent Itemset Mining using MapReduce
Fabio Fumarola
 
NoSQL databases pros and cons
Fabio Fumarola
 

Recently uploaded (20)

PPTX
apidays Singapore 2025 - Generative AI Landscape Building a Modern Data Strat...
apidays
 
PPTX
SHREYAS25 INTERN-I,II,III PPT (1).pptx pre
swapnilherage
 
PDF
apidays Singapore 2025 - Trustworthy Generative AI: The Role of Observability...
apidays
 
PDF
apidays Singapore 2025 - Surviving an interconnected world with API governanc...
apidays
 
PPTX
Listify-Intelligent-Voice-to-Catalog-Agent.pptx
nareshkottees
 
PPTX
01_Nico Vincent_Sailpeak.pptx_AI_Barometer_2025
FinTech Belgium
 
PPTX
apidays Helsinki & North 2025 - From Chaos to Clarity: Designing (AI-Ready) A...
apidays
 
PPTX
big data eco system fundamentals of data science
arivukarasi
 
PDF
Data Science Course Certificate by Sigma Software University
Stepan Kalika
 
PPTX
apidays Helsinki & North 2025 - Agentic AI: A Friend or Foe?, Merja Kajava (A...
apidays
 
PDF
InformaticsPractices-MS - Google Docs.pdf
seshuashwin0829
 
PPTX
Powerful Uses of Data Analytics You Should Know
subhashenia
 
PPTX
apidays Helsinki & North 2025 - API access control strategies beyond JWT bear...
apidays
 
PPTX
03_Ariane BERCKMOES_Ethias.pptx_AIBarometer_release_event
FinTech Belgium
 
PPTX
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
PPTX
04_Tamás Marton_Intuitech .pptx_AI_Barometer_2025
FinTech Belgium
 
PPTX
apidays Singapore 2025 - Designing for Change, Julie Schiller (Google)
apidays
 
PDF
A GraphRAG approach for Energy Efficiency Q&A
Marco Brambilla
 
PPTX
b6057ea5-8e8c-4415-90c0-ed8e9666ffcd.pptx
Anees487379
 
PPTX
Aict presentation on dpplppp sjdhfh.pptx
vabaso5932
 
apidays Singapore 2025 - Generative AI Landscape Building a Modern Data Strat...
apidays
 
SHREYAS25 INTERN-I,II,III PPT (1).pptx pre
swapnilherage
 
apidays Singapore 2025 - Trustworthy Generative AI: The Role of Observability...
apidays
 
apidays Singapore 2025 - Surviving an interconnected world with API governanc...
apidays
 
Listify-Intelligent-Voice-to-Catalog-Agent.pptx
nareshkottees
 
01_Nico Vincent_Sailpeak.pptx_AI_Barometer_2025
FinTech Belgium
 
apidays Helsinki & North 2025 - From Chaos to Clarity: Designing (AI-Ready) A...
apidays
 
big data eco system fundamentals of data science
arivukarasi
 
Data Science Course Certificate by Sigma Software University
Stepan Kalika
 
apidays Helsinki & North 2025 - Agentic AI: A Friend or Foe?, Merja Kajava (A...
apidays
 
InformaticsPractices-MS - Google Docs.pdf
seshuashwin0829
 
Powerful Uses of Data Analytics You Should Know
subhashenia
 
apidays Helsinki & North 2025 - API access control strategies beyond JWT bear...
apidays
 
03_Ariane BERCKMOES_Ethias.pptx_AIBarometer_release_event
FinTech Belgium
 
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
04_Tamás Marton_Intuitech .pptx_AI_Barometer_2025
FinTech Belgium
 
apidays Singapore 2025 - Designing for Change, Julie Schiller (Google)
apidays
 
A GraphRAG approach for Energy Efficiency Q&A
Marco Brambilla
 
b6057ea5-8e8c-4415-90c0-ed8e9666ffcd.pptx
Anees487379
 
Aict presentation on dpplppp sjdhfh.pptx
vabaso5932
 

2 Linux Container and Docker

  • 1. Linux Containers and Dockers When, Pros and Cons Dr. Fabio Fumarola
  • 2. Contents • The Evolution of IT • The Solutions: Virtual Machines vs Vagrant vs Docker • Differences • Examples: Vagrant, Boot2Docker, Docker, Docker Hub • Orchestrate Docker • Mesosphere • CoreOS 2
  • 3. From 1995 to 2015 3 Client-Server App Well-defined stack: - O/S - Runtime - Middleware Monolithic Physical Infrastructure Thin app on mobile, tablet Assembled by developers using best available services Running on any available set of physical resources (public/private/ virtualized)
  • 4. Static website Web frontend User DB Queue Analytics DB Background workers API endpoint nginx 1.5 + modsecurity + openssl + bootstrap 2 postgresql + pgv8 + v8 hadoop + hive + thrift + OpenJDK Ruby + Rails + sass + Unicorn Redis + redis-sentinel Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs + phantomjs Python 2.7 + Flask + pyredis + celery + psycopg + postgresql- client Development VM QA server Public Cloud Disaster recovery Contributor’s laptop Production Servers 2015 in Detail Production Cluster Customer Data Center 4
  • 5. Challenges • How to ensure that services interact consistently? • How to avoid to setup N different configurations and dependencies for each service? • How to migrate and scale quickly ensuring compatibility? • How to replicate my VM and services quickly? 5
  • 6. How to deal with different confs? 6 Static website Web frontend Background workers User DB Analytics DB Queue Development VM QA Server Single Prod Server Onsite Cluster Public Cloud Contributor’s laptop Customer Servers ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • 8. Virtual Machines • Run on top of an Hypervisor Pros – fully virtualized OS – Totally isolated Cons – Needs to take a snapshot of the entire VM to replicate – Uses a lot of space – Slow to move around 8 App A Hypervisor Host OS Server Guest OS Bins/ Libs App A’ Guest OS Bins/ Libs App B Guest OS Bins/ Libs Guest OS Guest OS VM
  • 9. Hypervisors Trend 2011 – XEN: Default choice given Rackspace and Amazon use – KVM: Bleeding edge users 2012 – KVM: Emerges as the lead – XEN: Loses momentum 9
  • 10. Hipervisors Trend 2013 – KVM: Maintains lead (around 90%+ for Mirantis) – Vmware: Emerges as a surprising second choice – Containers (LXC, Parallels, Docker): Web Hosting and SAS focused – Xen and HyperV: Infrequent requests (XenServer.org) 2014 – 2015 – ??? 10
  • 12. Vagrant • Open source VM manager released in 2010 • It allows you to script and package VMs config and the provisioning setup via a VagrantFile • It is designed to run on top of almost any VM tool: VirtualBox, VMVare, AWS, OpenStack1 • It can be used together with provisioning tools such as shell scripts, Chef and Puppet. 12 1. https://github.com/cloudbau/vagrant-openstack-plugin
  • 13. Vagrant: idea Use a VagrantFile to install 1.an operating system 2.Required libraries and software and finally run programs and processes of your final application 13
  • 14. Vagrant: Feature • Command-Line Interface • Vagrant Share • VagrantFile • Boxes • Provisioning • Networking • Synced Folders • Multi-Machine • Providers • Plugins 14 https://www.vagrantup.com/downloads
  • 15. Vagrant: Demo • It allows us to interact with Vagrant • It offers the following commands: box, connect, destroy, halt, init, login, package a vm, rdp, … https://docs.vagrantup.com/v2/cli/index.html 15
  • 16. Vagrant Example 1. Download and install VirtualBox and Vagrant 1. This will place a VagrantFile in the directory 2. Install a Box 3. Using a Box -> https://vagrantcloud.com/ 16 $ mkdir vagrant_first_vm && cd vagrant_first_vm $ vagrant init $ vagrant box add ubuntu/trusty64 Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" end
  • 17. Vagran: Start 1. Start the box 2. Login into the vm 3. You can destroy the vm by 17 $ vagrant up $ vagrant ssh $ vagrant destroy
  • 18. Vagrant: Synced Folders • By default, it shares your project directory to the /vagrant directory on the guest machine. • If you create a file on your guest os the file will be on the vagrant vm. 18 $ vagrant up $ vagrant ssh $ ls /vagrant --Vagrantfile $ touch pippo.txt $vagrant ssh $ls /vagrant/
  • 19. Vagrant: Provisioning • Let’s install Apache via a boostrap.sh file • If you create a file on your gues os the file will be on the vagrant vm. (vagrant reload --provision) 19 #!/usr/bin/env bash apt-get update apt-get install -y apache2 rm -rf /var/www ln -fs /vagrant /var/www Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" config.vm.provision :shell, path: "bootstrap.sh" end
  • 20. Vagrant: Networking • Port Forwarding: llows you to specify ports on the guest machine to share via a port on the host machine • By running vagrant reload or vagrant up we can see on http://127.0.0.1:4567 our apache • It supports also bridge configurations and other configurations (https://docs.vagrantup.com/v2/networking/) 20 Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" config.vm.provision :shell, path: "bootstrap.sh" config.vm.network :forwarded_port, host: 4567, guest: 80 end
  • 21. Vagrant: Share and Provider • It is possible to share Vagrant box via vagrant cloud (but?) Providers • By default Vagrant is configured with VirtualBox but you can change the provider • How? 21 $ vagrant up --provider=vmware_fusion $ vagrant up --provider=aws $ vagrant plugin install vagrant-aws
  • 22. Vagrant: AWS Vagrantfile 22 Vagrant.configure("2") do |config| # config.vm.box = "sean" config.vm.provider :aws do |aws, override| aws.access_key_id = "AAAAIIIIYYYY4444AAAA” aws.secret_access_key = "c344441LooLLU322223526IabcdeQL12E34At3mm” aws.keypair_name = "iheavy" aws.ami = "ami-7747d01e" override.ssh.username = "ubuntu" override.ssh.private_key_path = "/var/root/iheavy_aws/pk- XHHHHHMMMAABPEDEFGHOAOJH1QBH5324.pem" end end
  • 24. Quick Survey • How many people have heard of Docker before this Seminar? • How many people have tried Docker ? • How many people are using Docker in production ? 24
  • 25. What is Docker? "With Docker, developers can build any app in any language using any toolchain. “Dockerized” apps are completely portable and can run anywhere - colleagues’ OS X and Windows laptops, QA servers running Ubuntu in the cloud, and production data center VMs running Red Hat.” Docker.io 25
  • 26. Docker in simple words • It is a technology that allow you running applications inside containers (not VM) • This assures that libraries and package needed by the application you run are always the same. • This means you can make a container for Memcache and another for Redis and they will work the same in any OS (also in Vagrant). 26
  • 27. Why Docker? • Fast delivery of your applications • Deploy and scale more easily • Get higher density and run more workload • Faster deployment makes for easier management 27
  • 28. How does docker work? • LinuX Containers (LXC) • Control Groups & Namespaces (CGroups) • AUFS • Client – Server with an HTTP API 28
  • 29. LXC- Linux Containers • It is a user-space interface for the Linux kernel containment features • Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers. • Currently LXC can apply the following kernel features to contain processes: – Kernel namespaces (ipc, uts, mount, pid, network and user) – Apparmor and SELinux profiles – Seccomp policies – Chroots (using pivot_root) – Kernel capabilities & Control groups (cgroups) 29
  • 30. Cgroups • Control groups is a Linux kernel feature to limit, account and isolate resource usage (CPU, memory, disk I/O, etc) of process groups. • Features: – Resource limitation: limit CPU, memory… – Prioritization: assign more CPU etc to some groups. – Accounting: to measure the resource usage. – Control: freezing groups or check-pointing and restarting. 30
  • 31. LCX based Containers • It allows us to run a Linux system within another Linux system. • A container is a group of processes on a Linux box, put together is an isolated environment. 31 AppA’ Docker Engine Host OS Server Bins/Libs AppA Bins/Libs AppB AppB’ AppB’ AppB’ AppB’ Container • From the inside it looks like a VM • From the outside, it looks like normal processes
  • 32. Docker Features • VE (Virtual Environments) based on LXC • Portable deployment across machines • Versioning: docker include git-like capabilities for tracking versions of a container • Component reuse: it allows building or stacking already created packages. You can create ‘base images’ and then running more machine based on the image. • Shared libraries: there is a public repository with several images (https://registry.hub.docker.com/) 32
  • 33. Why are Docker Containers lightweight? 33 Bins / Libs App A Original App (No OS to take up space, resources, or require restart) AppΔ Bins/ App A Bins/ Libs App A’ Gues t OS Bins/ Libs Modified App Union file system allows us to only save the diffs Between container A and container A’ VMs App A Gues t OS Bins/ Libs Copy of App No OS. Can Share bins/libs App A Gues t OS Gues t OS Containers
  • 34. Prerequisites • I use Oh My Zsh1 with the Docker plugin2 for autocompletion of docker commands • Linux at least with kernel 3.8 but 3.10.x is recommended – $ uname –r • MacOS or Windows via Boot2Docker3 or via Vagrant 34 1. https://github.com/robbyrussell/oh-my-zsh 2. https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#docker 3. http://boot2docker.io/
  • 35. Docker Installation Ubuntu • AUFS support $ sudo apt-get update $ sudo apt-get intall linux-image-extra-`uname –r` • Add docker repo $ sudo sh –c “curl https://get.docker.io/gpg | apt-key add -” $ sudo sh –c “echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list” • Install $ sudo apt-get update $ sudo apt-get install lxc-docker 35
  • 36. Docker install Vagrant • Create the folders $ mkdir ~/boot2docker $ cd ~/boot2docker • Init the vagrant box $ vagrant init yungsang/boot2docker $ vagrant up; export DOCKER_HOST=tcp://localhost:2375 • Check docker $ docker version * NOTE: the YungSang boot2docker opens up port forwarding to the network, so is not safe on public wifi. 36
  • 37. Docker 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 • Docker client works normally 37
  • 40. Docker: hello world • Get one base image from https://registry.hub.docker.com $ sudo docker pull centos • List images on your system $ sudo docker images • Check the images –$ sudo docker images • Run your first container –$ sudo docker run centos:latest echo “hello world” 40
  • 41. An Interactive Container • Run bash in your container – $ sudo docker run -t -i centos /bin/bash • The -t flag assigns a pseudo-tty or terminal inside our new container • The -i flag allows us to make an interactive connection by grabbing the standard in (STDIN) of the container • We also specified a command for the container 41
  • 42. A Daemonized Hello world • Run a sh script – sudo docker run -d centos:6 /bin/sh –c ‘while true; do echo hello world; sleep 1; done’ • The -d flag tells Docker to run the container and put it in the background, to daemonize it. • To list the docker containers running – $ docker ps • To get the logs of the container – $ sudo docker logs container_id • To stop the container: – $ sudo docker stop container_id 42
  • 43. A web container with docker • To run a Python Flask application – $ sudo docker run -d -P training/webapp python app.py • The -P flag is new and tells Docker to map any required network ports inside our container to our host. • To view our application with the port mapping – $ sudo docker ps –l • We can see that the default flask port 5000 is exposed to 49155 – $ sudo docker run -d -p 5000:5000 training/webapp python app.py • Check the url to continue the guide – https://docs.docker.com/userguide/usingdocker/ 43
  • 44. Working with docker images • To find images go to – https://hub.docker.com/ • To pull an image – $ sudo docker pull training/sinatra • Updating and committing an image – $ sudo docker run -t -i training/sinatra /bin/bash – # gem install json – $ sudo docker commit -m="Added json gem" -a="Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2 - $ sudo docker images 44
  • 45. Create an image from a Dockerfile FROM library/centos:centos6 MAINTAINER fabio fumarola [email protected] RUN yum install -y curl which tar sudo openssh-server openssh-clients rsync # passwordless ssh RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa RUN cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] 45
  • 46. Build and run an image • $docker build –t fabio/centos:ssh . • $docker run –i –t fabio/centos:ssh /bin/bash • Or • $docker run –d fabio/centos:ssh /bin/bash • Check the following commands: – $ docker top – $ docker logs – $ docker inspect 46
  • 47. Other Commands • Docker cp: copy a file from container to host • Docker diff: print container changes • Docker top: display running processes in a container • Docker rm /rmi: delete container/image • Docker wait: wait until container stop and print exit code More on: http://docs.docker.io/en/latest/commandline/cli 47
  • 48. Docker vs Vagrant? • Less memory for Dockers w.r.t VMs • With a VM you get more isolation, but is much heavier. Indeed you can run 1000 of Dockers in a machine but not thousand of VMs with Xen. • A VM requires minutes to start a Docker seconds There are pros and cons for each type. • If you want full isolation with guaranteed resources a full VM is the way to go. • If you want hundred of isolate processes into a reasonably sized host then Docker might be the best solution 48
  • 49. Orchestrate Docker with Machine, Swarm and Compose http://blog.docker.com/2015/02/orchestrating-docker-with-machine- swarm-and-compose/ 49
  • 50. Motivation • Docker Engine works well for packaging applications making much easier to – build, – deploy – and move between providers. • But, to deploy complex application consisting of multiple services we need to resort to shell scripts. 50
  • 51. Motivation • This isn’t ideal • We’d like to have a more controllable method to distribute applications in the cloud. • We need that our distributed application is: – Portable across environments: run seamlessly in testing, staging and production – Portable across providers: move the applications between different cloud providers – Composable: split up an application in multiple services 51
  • 52. How to Orchestrate Dockers There are three new tools that can be used to orchestrate docker containers: •Machine, •Swarm, •Compose. 52
  • 53. Docker Machine • It lets easily deploy docker engines on your computer, on cloud providers and in a data center. • It supports the following providers: 53 • Amazon EC2 • Microsoft Azure • Microsoft Hyper-V • DigitalOcean • Google Compute Engine • OpenStack • Rackspace • SoftLayer • VirtualBox • VMware Fusion • VMware vCloud Air • VMware vSphere
  • 54. Docker Machine • It is supported on Windows, OSX, and Linux. – Windows - x86_64 – OSX - x86_64 – Linux - x86_64 – Windows - i386 – OSX - i386 – Linux - i386 • At the lab we will explore how to use it. 54
  • 55. Swarm and Weave • Swarm allows us to connect together several docker containers deployed on different sub-networks. • This happens when you need to deploy dockers in several machines and you want to achieve resilience through load balancing. • It pools together several Docker Engines into a single virtual host. 55 http://blog.docker.com/2015/02/scaling-docker-with-swarm/
  • 56. Swarm and Weave • css 56https://github.com/zettio/weave
  • 58. Compose • It is a way of defining and running multi-container distributed applications with Docker. • When you need to setup an application that requires other services (e.g. redis, postgres,…) it is possible to use compose. • Next, you define the components that make your app so they can be run together in an isolate environment. 58
  • 59. Compose • It is based on a dockerfile and on a yaml configuration file 59 Dockerfile docker-compose.yml FROM python:2.7 WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code CMD python app.py web: build: . links: - redis ports: - "5000:5000" redis: image: redis
  • 61. Mesosphere • It is an apache project that allows you to separate – the application you deploy – From the datacenter administration 61
  • 65. CoreOS • A minimal operating system • Painless updating: utilizes active/passive scheme to update the OS as single unit instead of package by package. • Docker container • Clustered by default • Distributed System tools: etcd key-value store • Service discovery: easily locate where service are running in the cluster • High availability and automatic fail-over 65
  • 66. CoreOS 66 Clustered by default High availability and a utomatic fail-over
  • 67. Docker with CoreOS Features •Automatically runs on each CoreOS machine •Updated with regular automatic OS updates •Integrates with etcd •Networking automatically configured Example Akka cluster + Docker + CoreOS https://github.com/dennybritz/akka- cluster-deploy 67
  • 68. References • http://www.iheavy.com/2014/01/16/how-to-deploy-on-amazon-ec2- with-vagrant/ • https://docs.vagrantup.com/v2/ • Vagrant: Up and Running Paperback – June 15, 2013 • https://github.com/patrickdlee/vagrant-examples • https://linuxcontainers.org/ LXC • https://www.kernel.org/doc/Documentation/cgroups/ • http://lamejournal.com/2014/09/19/vagrant-vs-docker-osx-tales-front/ • https://medium.com/@_marcos_otero/docker-vs-vagrant-582135beb623 • https://coreos.com/using-coreos/docker/ 68

Editor's Notes