32
Docker: dev, test & production Wouter Lagerweij & Michiel Rook @wouterla @michieltcs

Docker dev, test & production (afas)

Embed Size (px)

Citation preview

Page 1: Docker  dev, test & production (afas)

Docker: dev, test & production

Wouter Lagerweij & Michiel Rook@wouterla @michieltcs

Page 2: Docker  dev, test & production (afas)

Agile / Lean coach@wouterla

Developer, trainer & coach@michieltcs

Page 3: Docker  dev, test & production (afas)

TODAY

▸ Introduction

▸ Dev

▸ Test

▸ Production

▸ Closing

Page 4: Docker  dev, test & production (afas)

CONTINUOUS EVERYTHING

Page 5: Docker  dev, test & production (afas)

DEV BUILD / TEST

CONTINUOUS INTEGRATION

Page 6: Docker  dev, test & production (afas)

DEV BUILD / TEST ACCEPTANCE PRODUCTION

CONTINUOUS DELIVERY

Page 7: Docker  dev, test & production (afas)

DEV BUILD / TEST STAGING PRODUCTION

CONTINUOUS DEPLOYMENT

Page 8: Docker  dev, test & production (afas)

WHY CONTINUOUS DEPLOYMENT

▸ Small steps

▸ Early feedback

▸ Reduce cycle time

▸ Reduce risk

▸ Experiments!

Page 9: Docker  dev, test & production (afas)

SUCCESSFUL TEAMS HAVE

Page 10: Docker  dev, test & production (afas)

DEVOPS

Page 11: Docker  dev, test & production (afas)

AGILE

Page 12: Docker  dev, test & production (afas)
Page 13: Docker  dev, test & production (afas)
Page 14: Docker  dev, test & production (afas)
Page 15: Docker  dev, test & production (afas)

DockerfileFROM java:openjdk-8MAINTAINER [email protected]

ADD target/universal/stage /opt/landingpageADD deploy/logback.xml /opt/landingpage/conf/logback.xml

EXPOSE 9000

WORKDIR /opt/landingpage

CMD bin/landingpage

Page 16: Docker  dev, test & production (afas)

Building the imagedocker build -t landingpage-demo .

docker images

Page 17: Docker  dev, test & production (afas)

Running a containerdocker run landingpage-demo

docker ps

docker stop landingpage-demo

docker stop <id>

docker run -p 9000:9000 landingpage-demo

Page 18: Docker  dev, test & production (afas)

Networkingdocker run -p 9999:9000 --name demo landingpage-demo

docker rm -f demo

docker run -p 9000:9000 --name demo -d landingpage-demo

Page 19: Docker  dev, test & production (afas)

TESTING

Page 20: Docker  dev, test & production (afas)

ConfigurationEnvironment variables

docker run -d -p 27017:27017 -p 28017:28017 -e AUTH=no --name mongo tutum/mongodb

docker psdocker logs mongo

Inject configuration file

docker run -v ${PWD}/conf/application.conf.local:/opt/landingpage/conf/application.conf --name demo landingpage-demo

Page 21: Docker  dev, test & production (afas)

Linking containers (compose)version: '2'services: demo: build: . ports: - "9000:9000" depends_on: - mongodb mongodb: image: tutum/mongodb ports: - "27017:27017" - "28017:28017" environment: - AUTH=”no”

Page 22: Docker  dev, test & production (afas)

docker exec -it landingpagedemo_demo_1 bash

vim /opt/landingpage/conf/application.conf

apt-get update && apt-get install vim

rm /opt/landingpage/RUNNING_PIDexit

docker stop demodocker start demodocker exec -it demo bashvim /opt/landingpage/conf/application.confexit

Debugging

docker-compose stopdocker-compose rmdocker-compose updocker exec -it demo bashcat /opt/landingpage/conf/application.confexit

Page 23: Docker  dev, test & production (afas)

PRODUCTION

Page 24: Docker  dev, test & production (afas)

First Steps● Ansible for deployment (pets, not cattle)● All of our own services on all production hosts● Supporting services (elastic, rabbit) on separate, dedicated machines● Load-balanced by port

Page 25: Docker  dev, test & production (afas)

Orchestration● Clustering● Scheduling● Self-healing● Autoscaling● Networking● Immutable

Page 26: Docker  dev, test & production (afas)

Kubernetes

Page 27: Docker  dev, test & production (afas)

Kubernetesminikube

eval $(minikube docker-env)docker build -t landingpage-demo:step-3 .

kubectl create -f kube-deploy.yaml

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: demo-podspec: replicas: 1 template: metadata: labels: app: demo spec: containers: - name: demo image: landingpage-demo:step-3 ports: - containerPort: 9000 # hostPort: 9000 - name: mongodb image: tutum/mongodb:latest ports: - containerPort: 27017 env: - name: AUTH value: 'no'

Page 28: Docker  dev, test & production (afas)

KubernetesapiVersion: v1kind: Servicemetadata: name: demo labels: app: demospec: type: NodePort ports: - targetPort: 9000 nodePort: 32000 port: 9000 name: http selector: app: demo

Page 29: Docker  dev, test & production (afas)

Rolling update

PULL IMAGE

START NEW CONTAINER

WAIT FOR PORT

SMOKE TESTS / HEALTH CHECKS

ADD NEW CONTAINER TO LB

REMOVE OLD CONTAINER FROM LB

STOP OLD CONTAINER

Page 30: Docker  dev, test & production (afas)

Storage● Dynamic provisioning● Cloud: AWS, GCE, Azure, ...● Volume claims● Region & zone matching

Page 31: Docker  dev, test & production (afas)

Networking● Weave, Flannel, …● Assign IPs to containers, services● Virtual networks● Ingress● Routing

Page 32: Docker  dev, test & production (afas)

Turn-key Continuous Deployment

Zero downtime deployments

Modern, autoscaling infrastructure with built-in monitoring

Pipeline in five minutes