Introduction to Docker and Linux Containers @ Cloud Computing Rhein Main
-
Upload
puja-abbassi -
Category
Documents
-
view
199 -
download
0
Transcript of Introduction to Docker and Linux Containers @ Cloud Computing Rhein Main
Docker IntroPuja Abbassi@puja108http://giantswarm.io
Simple microservice infrastructure, built for developers.
Currently in free AlphaLooking for feedbackhttp://giantswarm.io/
We’re hiring
Agenda
1) Docker Intro● Why are we so excited?● What is Docker?● Getting started
2) Docker Microservices
Docker is an open-source project to easily create lightweight, portable, self-sufficient containers from any application.”
“Linux
Why are we so excited?
Installation
My Mac Timo’s Linux
Test Staging Cloud VM Bare Metal
Rails Web Frontend ? ? ? ? ? ?
Node.jsAPI ? ? ? ? ? ?
Background jobs ? ? ? ? ? ?
MySQL ? ? ? ? ? ?
Distributed DB ? ? ? ? ? ?
Message Queue ? ? ? ? ? ?
Reusable Containers
My Mac Timo’s Linux
Test Staging Cloud VM Bare Metal
Rails Web Frontend
Node.jsAPI
Background jobs
MySQL
Distributed DB
Message Queue
Speed
Ships within ...
Manual deployment
takes ...
Automated deployment
takes ...Boots in ...
Bare metal Days Hours Minutes Minutes
Virtual machine Minutes Minutes Seconds < Minute
Container Seconds Minutes Seconds Seconds
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
Who’s Using Containers?
What is Docker?
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)
Layered FS
Base Image
Image
bootfs
Image
Writable Container Application Code
NodeJS
Nginx
Ubuntu
Cgroups, Namespaces, Device Mapper, Kernel
But {insert some great UNIX here} has had this for years.”“
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
Docker is awesomeand here to stay.
Getting started
Installation
● Mac, Windows: Boot2Docker
● Ubuntu:$ sudo apt-get install docker.io
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
A Node Script
// server.jsvar http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8080);
console.log('Server running');
Simple Dockerfile
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y nodejs
ADD server.js .
EXPOSE 8080
CMD ["/usr/bin/nodejs", "/server.js"]
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
dockerbook.com
Docker in Development
● Vagrant● rbenv● nodeenv● virtualenv● Laptop full of build tools and servers
Your current setup?
● 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
Docker Build Chain
Jenkins - Docker Hub Integration
Jenkins - Docker Hub Integration
Docker Enables new Architecture Patterns
Patterns for the Cloud
Microservices
Responsive Manifesto
● 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
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
Should I start with Docker?
Yes!
Containers are only 1% of your problem.”“
Kelsey Hightower,
CoreOS
Thanks for listening!Reach out:Puja Abbassi@puja108@giantswarm
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).
CGroups
Control group of processes.Share available hardware resources.Set up limits and constraints. E.g. limiting the memory available to a specific container.