20
12-Factor App with Docker Ophélie Mauger Consultante DevOps - Alter Way

12 FACTOR APP WITH DOCKER

Embed Size (px)

Citation preview

Page 1: 12 FACTOR APP WITH DOCKER

12-Factor App with Docker

Ophélie Mauger Consultante DevOps - Alter Way

Page 2: 12 FACTOR APP WITH DOCKER

Why twelve-factor app ?● Maximum portability between environments

● Suitable for deployment on modern cloud platforms

● Scale up

● Minimize time and costs with automation

● Continuous deployment

Page 3: 12 FACTOR APP WITH DOCKER

Why docker can help ?● Maximum portability between environments

● Suitable for deployment on modern cloud platforms

● Scale up

● Minimize time and costs with automation

● Continuous deployment

Page 4: 12 FACTOR APP WITH DOCKER

12 factor App with docker step by step

codebase dependencies config backing services

build, release, runprocesses

port binding concurrency

disposability dev/prod parity Logs

Admin processes

Page 5: 12 FACTOR APP WITH DOCKER

I. CodeBase

One codebase tracked in revision control

Page 6: 12 FACTOR APP WITH DOCKER

II. Dependencies

Explicitly declare & isolate dependencies

Page 7: 12 FACTOR APP WITH DOCKER

|||. Config

Store config in the environment

● Linux environment variables

● docker-compose can define env variables via env files

Page 8: 12 FACTOR APP WITH DOCKER

IV. Backing services

Treat backing services as attached

ressources

● Linux environment variables

● docker-compose can define env variables via env files

● docker allows you to link services together

Page 9: 12 FACTOR APP WITH DOCKER

V. Build, Release, Run

Strictly separate build and run stages

● docker build --pull -t sampleapi:1.0 .

● docker push sampleapi:1.0

● docker run sampleapi:1.0

Page 10: 12 FACTOR APP WITH DOCKER

VI. Processes

Execute the app as one or more stateless

processes

● docker enforces stateless processes

● Use volumes to persist data

Page 11: 12 FACTOR APP WITH DOCKER

Export services via port binding

VII. Port Binding

Docker Host

service network

container http

container php-fpm

container mysql

port binding

Page 12: 12 FACTOR APP WITH DOCKER

VIII. Concurrency

Scale out via the process model

Docker Cluster

docker host docker host docker host

http php

worker worker

worker worker

http php

worker worker

worker worker

http php

worker worker

worker worker

Workload divercity

scale

Page 13: 12 FACTOR APP WITH DOCKER

IX. Disposability

Maximize robustness with fast startup and

graceful shutdown

● Container restart policies

● Orchestration with docker swarm

● Reverse proxy and load balancing with

services containers

Page 14: 12 FACTOR APP WITH DOCKER

X. Dev/Prod parity

Keep development, staging, and

production as similar as possible

● “build once, run anywhere”

● Same app images across DevOps stages

Page 15: 12 FACTOR APP WITH DOCKER

XI. Logs

Treat logs as event streams

Dev environment

Logs in container stdout

>docker logs -f …>docker-compose logs -f

Ops environment

Log driver : fluentd

container fluentd

Page 16: 12 FACTOR APP WITH DOCKER

XII. Admin processes

Run Admin/management tasks as one of

processes

docker exec ….

Page 17: 12 FACTOR APP WITH DOCKER

And what about continuous deployment ?

Page 18: 12 FACTOR APP WITH DOCKER

Continuous Delivery with DockerBuild stage :

● docker build --pull -t myregistry/myimage:$version

● docker push myregistry/myimage:$version

Page 19: 12 FACTOR APP WITH DOCKER

Continuous Deployment with dockerDeploy stage :

● Connect to the swarm (export DOCKER_HOST, ...)

● docker-compose pull

● docker-compose up -d

Page 20: 12 FACTOR APP WITH DOCKER

ConclusionIf you plan to do a twelve-factor app

use docker to make it