55
Introduction to Docker Workshop Pini Reznik continuousdelivery.uglydu ckling.nl

Docker workshop DevOpsDays Amsterdam 2014

Embed Size (px)

DESCRIPTION

Title: Introduction to Docker Abstract: During the year since it’s inception, Docker have changed our perception of the OS-level Virtualization also called Containers. At this workshop we will introduce the concept of Linux containers in general and Docker specifically. We will guide the participants through a practical exercise that will include use of various Docker commands and a setting up a functional Wordpress/MySQL system running in two containers and communication with each other using Serf Topics: Docker Installation (in case is missing) Boot2Docker Docker commands - basic commands - different types of containers - Dockerfiles Serf Wordpress Exercise - setting up Serf cluster - deploying MySQL - deploying Wordpress and connecting to MySQL Prerequisites: Working installation of Docker On Mac - https://docs.docker.com/installation/mac/ On Windows - https://docs.docker.com/installation/windows/ Other Platforms - https://docs.docker.com/installation/#installation

Citation preview

Page 1: Docker workshop DevOpsDays Amsterdam 2014

Introduction to Docker Workshop

Pini Reznikcontinuousdelivery.uglyduckling.nl

Page 2: Docker workshop DevOpsDays Amsterdam 2014

Agenda

• Install Docker• Introduction to Containers and Docker• Workshop• Future of Infrastructure• Antitude

Page 3: Docker workshop DevOpsDays Amsterdam 2014

DOCKER INSTALLATION

Page 5: Docker workshop DevOpsDays Amsterdam 2014

INTRODUCTION TO DOCKER

Page 6: Docker workshop DevOpsDays Amsterdam 2014

Evolution of IT

Image courtesy of Docker Inc./ docker.io

Page 7: Docker workshop DevOpsDays Amsterdam 2014

Challenge of Multiple Environments

Image courtesy of Docker Inc./ docker.io

Page 8: Docker workshop DevOpsDays Amsterdam 2014

Cargo Analogy

Image courtesy of Docker Inc./ docker.io

Page 9: Docker workshop DevOpsDays Amsterdam 2014

Cargo Delivery Pipeline

Image courtesy of Docker Inc./ docker.io

Page 10: Docker workshop DevOpsDays Amsterdam 2014

Shipping Goods

Page 11: Docker workshop DevOpsDays Amsterdam 2014

Shipping with Containers

Image courtesy of Docker Inc./ docker.io

Page 12: Docker workshop DevOpsDays Amsterdam 2014

Software in Containers

Image courtesy of Docker Inc./ docker.io

Page 13: Docker workshop DevOpsDays Amsterdam 2014

Delivery Pipeline with Containers

Development

Environment Setup

Test

CleanEnvironments

Acceptance

Similarity toProduction

Production

Deployments andRoll-back/forwards

Page 14: Docker workshop DevOpsDays Amsterdam 2014

Scalability with Containers

Page 15: Docker workshop DevOpsDays Amsterdam 2014

Docker Functions

Image courtesy of Docker Inc./ docker.io

Page 16: Docker workshop DevOpsDays Amsterdam 2014

Docker and VMs

Image courtesy of Docker Inc./ docker.io

Page 17: Docker workshop DevOpsDays Amsterdam 2014

Supported Platforms

Image courtesy of Docker Inc./ docker.io

• Host– Any Linux with kernel >3.8.x

• Container– Same architecture as the host

Page 18: Docker workshop DevOpsDays Amsterdam 2014

Docker Integrations and Hosting

NL

Page 19: Docker workshop DevOpsDays Amsterdam 2014

OS Level Virtualization

ZONESJAILS

Workload Partitions

Page 20: Docker workshop DevOpsDays Amsterdam 2014

Docker and Puppet/Chef/Ansible

Image courtesy of Puppet Labs puppetlabs.com

Page 21: Docker workshop DevOpsDays Amsterdam 2014

Communication - Serf

Image courtesy of CoreOS coreos.com

Page 22: Docker workshop DevOpsDays Amsterdam 2014

Infrastructure - CoreOS

Image courtesy of CoreOS coreos.com

Page 23: Docker workshop DevOpsDays Amsterdam 2014

Cluster Management - Mesos

Image courtesy of typesafe.com

Page 24: Docker workshop DevOpsDays Amsterdam 2014

PaaS, Heroku style - Flynn

Image courtesy of mesosphere.io

Page 25: Docker workshop DevOpsDays Amsterdam 2014

Software Configuration Management Done Right.

Everything (almost) we need to build our Software is now finally in the Version Control

Page 26: Docker workshop DevOpsDays Amsterdam 2014

WORKSHOP

Page 27: Docker workshop DevOpsDays Amsterdam 2014

boot2docker

$ boot2docker init$ boot2docker start$ boot2docker ssh OR $ boot2docker init $ boot2docker start $ export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375

Page 28: Docker workshop DevOpsDays Amsterdam 2014

Docker run

$ docker run ubuntu ls$ docker run -i -t –name file -v `pwd`:/tmp/on_host -w `pwd`

ubuntu bash touch /tmp/file_a.txt touch /tmp/on_host/file_b.txt exit$ docker diff file

Page 29: Docker workshop DevOpsDays Amsterdam 2014

Docker attach/stop/start

$ docker run -d -name while ubuntu /bin/sh -c "while true; do

echo hi; sleep 1; done"$ docker attach while

$ docker stop while$ docker start while

Page 30: Docker workshop DevOpsDays Amsterdam 2014

Docker log/inspect/ps/top

$ docker ps$ docker ps –a

$ docker top while

$ docker logs

$ docker inspect

Page 31: Docker workshop DevOpsDays Amsterdam 2014

Docker kill/rm/rmi

$ docker kill

$ docker rm

$ docker rmi

Page 32: Docker workshop DevOpsDays Amsterdam 2014

Dockerfile

FROM ubuntuMAINTAINER UglyDuckling "[email protected]"

RUN echo deb http://archive.ubuntu.com/ubuntu precise universe

>> /etc/apt/sources.listRUN apt-get updateRUN apt-get install -q -y vimENV ENV_VAR some_stuffADD file.txt /file.txt

EXPOSE 8080CMD ["bash", "-c", "ls", "/"]

Page 33: Docker workshop DevOpsDays Amsterdam 2014

Docker build/tag

$ docker build -t you_name/sample .

$ docker run you_name/sample

$ docker run -i -t you_name/sample bashls /file.txtexit

Page 34: Docker workshop DevOpsDays Amsterdam 2014

Docker commit/pull/push (skipping)

• https://registry.hub.docker.com/

Page 35: Docker workshop DevOpsDays Amsterdam 2014

Serf

• Gossip-based membership• Failure detection• Custom events

Page 36: Docker workshop DevOpsDays Amsterdam 2014

Wordpress/MySQL Exercise

HOST

DOCKERContainers

ConnectedSerf agents

Based on www.centurylinklabs.com/decentralizing-docker-how-to-use-serf-with-docker/

Page 37: Docker workshop DevOpsDays Amsterdam 2014

Checkout and build all containers

$ git clone https://github.com/pinireznik/DockerWorkshop.git

$ cat ./build.sh$ ./build.sh

Page 38: Docker workshop DevOpsDays Amsterdam 2014

Start Serf container

$ SERF_ID=$(docker run -d --name serf_1 -p 7946 -p 7373

ud/serf /run.sh)

Page 39: Docker workshop DevOpsDays Amsterdam 2014

Install and start Serf on Host

# Install Serf$ wget dl.bintray.com/mitchellh/serf/0.5.0_linux_amd64.zip$ unzip 0.5.0_linux_amd64.zip $ sudo mv serf /usr/bin/

# Start local agent and connect to the first Serf agent$ serf agent &$ serf join $(docker port $SERF_ID 7946)

Page 40: Docker workshop DevOpsDays Amsterdam 2014

Start MySQL container

$ MYSQL_ID=$(docker run -d --name mysql --link serf_1:serf_1 -p 3306 ud/mysql-

serf /run.sh)

$ docker logs $MYSQL_ID# locate the password in docker logs and set env. variable.$ DB_PASSWORD=v6Dax72kQzQR

Page 41: Docker workshop DevOpsDays Amsterdam 2014

Create database

# create temporary container with MySQL client to create DB$ docker run -t -i --name mysql_client --link mysql:mysql -p 3306

ud/mysql-serf bash

# create DB from inside containermysql -uadmin -p$DB_PASSWORD -h

$MYSQL_PORT_3306_TCP_ADDR -P 3306 -e "create database wordpress;"

Page 42: Docker workshop DevOpsDays Amsterdam 2014

Start Wordpress

$ WORDPRESS_ID=$(docker run -d --name wordpress --link

serf_1:serf_1 -e="DB_PASSWORD=$DB_PASSWORD" -p 80 ud/wordpress-serf /run.sh)

Page 43: Docker workshop DevOpsDays Amsterdam 2014

Test

# connect to the Workdpress site$ curl --location http://$(docker port $WORDPRESS_ID 80)/$ curl --location http://$(docker port $WORDPRESS_ID 80)/

readme.html

# kill DB and see what happens$ docker kill mysql $ curl --location http://$(docker port $WORDPRESS_ID 80)/

Page 44: Docker workshop DevOpsDays Amsterdam 2014

Demo

• Android Development Env. in Docker container• Jenkins in a container• Parallel testing using multiple containers• Django in a container• Java development in a container

Page 45: Docker workshop DevOpsDays Amsterdam 2014

FUTURE OF INFRASTRUCTURE

Page 46: Docker workshop DevOpsDays Amsterdam 2014

Evolution of IT the Next Step

Page 47: Docker workshop DevOpsDays Amsterdam 2014

App/Infra Performance Parity

Page 48: Docker workshop DevOpsDays Amsterdam 2014

Microservices

Image courtesy of martinfowler.com

Page 49: Docker workshop DevOpsDays Amsterdam 2014

Conway’s Law

organizations which design systems ... are constrained to produce designs which are copies

of the communication structures of these organizations

Page 50: Docker workshop DevOpsDays Amsterdam 2014

Network-centric organization

Image courtesy of n-e-r-v-o-u-s.com

Page 51: Docker workshop DevOpsDays Amsterdam 2014

ANTITUDE

Page 52: Docker workshop DevOpsDays Amsterdam 2014

Antitude

www.antitude.io

Page 53: Docker workshop DevOpsDays Amsterdam 2014

Antitude

• Self Healing• Automatic Scaling• Efficient Hardware Utilisation

Page 54: Docker workshop DevOpsDays Amsterdam 2014

DockerCon Amsterdam in November

Docker Meetups

Page 55: Docker workshop DevOpsDays Amsterdam 2014

DockerCon Amsterdam Conference in November

Docker Meetup every month