Virtual machines include the application, the necessary binaries and libraries, and an entire guest operating system -- all of which can amount to tens of GBs.
Containers include the application and all of its dependencies --but share the kernel with other containers, running as isolated processes in user space on the host operating system. Docker containers are not tied to any specific infrastructure: they run on any computer, on any infrastructure, and in any cloud.
Developer: Build Once, Run Anywhere
A clean, safe, hygienic and portable runtime environment for your app.
No worries about missing dependencies, packages and other pain points during subsequent
Run each app in its own isolated container, so you can run various versions of libraries and other
dependencies for each app without worrying
Automate testing, integration, packaging…anything you can script
Reduce/eliminate concerns about compatibility on different platforms, either your own or your
Operator: Configure Once, Run Anything
Make the entire lifecycle more efficient, consistent, and repeatable
Increase the quality of code produced by developers.
Eliminate inconsistencies between development, test, production, and customer environments
Support segregation of duties
Significantly improves the speed and reliability of continuous deployment and continuous integration
Because the containers are so lightweight, address significant performance, costs, deployment, and
portability issues normally associated with VMs
Why it works—separation of concerns
• Dan the Developer
• Worries about what’s “inside” the container
• His code
• His Libraries
• His Package Manager
• His Apps
• His Data
• All Linux servers look the same
• Oscarthe Ops Guy
• Worries about what’s “outside” the container
• Remote access
• Network config
• All containers start, stop, copy, attach, migrate,
etc. the same way
Dockerfile for MMC Server
RUN cd /opt && tar xvzf ~/mule-standalone-3.5.0.tar.gz
RUN echo "4a94356f7401ac8be30a992a414ca9b9 /mule-standalone-
3.5.0.tar.gz" | md5sum -c
RUN rm ~/mule-standalone-3.5.0.tar.gz
RUN ln -s /opt/mule-standalone-3.5.0 /opt/mule
CMD [ "/opt/mule/bin/mule" ]
What is Docker
Docker is “an open source project to pack, ship and run any application as a lightweight
The idea is to provide a comprehensive abstraction layer that allows developers to “containerize” or
“package” any application and have it run on any infrastructure
Docker containers provide a standard, consistent way of packaging just about any application.
Since it started in March 2013...
• >200,000 pulls
• >7,500 github stars
• >200 significant contributors
• >200 projects built on top of docker
• UIs, mini-PaaS, Remote Desktop...
• 1000’s of Dockerized applications
Memcached, Redis, Node.js, Hadoop...
• Integrationin Jenkins, Travis, Chef, Puppet, Vagrantand OpenStack
• Meetups arrangedaround the world…
with organizations likeEbay, Cloudflare, Yandex, and Rackspace presenting on their
use of Docker