introduction to docker and linux containers @ cloud computing rhein main

Post on 13-Aug-2015

208 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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.

top related