Docker - introduction

81
DOCKER INTRODUCTION TO CONTAINERS FOR PHP DEVELOPERS

Transcript of Docker - introduction

DOCKERINTRODUCTION TO CONTAINERS FOR PHP DEVELOPERS

DOCKER - INTRODUCTION FOR PHP DEVELOPERS

MICHAŁ KURZEJA

▸ CTO at accesto.com

[email protected]

▸ @michalKurzeja

▸ Homebrewer

▸ Swimmer/runner

WHY DOCKER?

DOCKER

SYSTEM DEPENDENCIES

DOCKER

SYSTEM DEPENDENCIES

PROJECT 1

PROJECT 2

PROJECT 3* M

DOCKER

SYSTEM DEPENDENCIES

Developer 1

Tester

Developer 2

CIStaging

* N

DOCKER - INTRODUCTION FOR PHP DEVELOPERS

PROJECT DEPENDENCY MATRIX FROM HELL

Dev Stage Prod CI

PHP ? ? ? ?

MySQL ? ? ? ?

Redis ? ? ? ?RabbitMQ ? ? ? ?Neo4j ? ? ? ?

Hadoop/Spark ? ? ? ?

DOCKER - INTRODUCTION FOR PHP DEVELOPERS

PROJECT DEPENDENCY MATRIX FROM HELL

Dev Stage Prod CI

PHP ? ?

MySQL ? ? ?

Redis ? ? ? ?RabbitMQ ? ? ? ?Neo4j ? ? ? ?

Hadoop/Spark ? ? ? ?

PROFITS?

BUILD ONCE, EXECUTE EVERYWHERE*

NO DEPENDENCY & NO INCOMPATIBILITY ISSUES

VM WITHOUT OVERHEAD

FULLY AUTOMATED

EASY TO DEPLOY

SEPARATION OF DUTIES

SCALABILITY

TECHNICAL BACKGROUND

TEKST

VIRTUAL MACHINES VS CONTAINERS

TEKST

WHY IS DOCKER FAST?

IMAGE

IMAGE LAYER

imagelayers.io

CONTAINER

REPOSITORY

DOCKER HUB

DEMO TIME!

docker run docker/whalesay cowsay PHP!

docker run docker/whalesay cowsay PHP!

docker run docker/whalesay cowsay PHP!

docker run docker/whalesay cowsay PHP!

docker run -v $PWD:/var/www/html -p 8081:80 php:5.6-apache

docker run -v $PWD:/var/www/html -p 8081:80 php:5.6-apache

docker run -v $PWD:/var/www/html -p 8081:80 php:5.6-apache 7.0-apache

READY TO DIVE DEEPER?

OWN DOCKER IMAGE

FROM docker/whalesay:latest

Dockerfile

FROM docker/whalesay:latestRUN apt-get -y update && apt-get install -y fortunes

Dockerfile

FROM docker/whalesay:latestRUN apt-get -y update && apt-get install -y fortunesCMD /usr/games/fortune -a | cowsay

Dockerfile

FROM docker/whalesay:latestRUN apt-get -y update && apt-get install -y fortunesCMD /usr/games/fortune -a | cowsay

docker build -t docker-whale .

Dockerfile

FROM docker/whalesay:latestRUN apt-get -y update && apt-get install -y fortunesCMD /usr/games/fortune -a | cowsay

docker build -t docker-whale .

Dockerfile

FROM docker/whalesay:latestRUN apt-get -y update && apt-get install -y fortunesCMD /usr/games/fortune -a | cowsay

docker build -t docker-whale .docker run docker-whale

Dockerfile

EVERYTHING IN ONE CONTAINER ?

MULTIPLE CONTAINERS!

DOCKER COMPOSE

docker run -v $PWD/www:/var/www/html -p 8081:80 php:7.0-apache

docker run -v $PWD/www:/var/www/html -p 8081:80 php:7.0-apacheX

#docker-compose.yml

www: image: php:7.0-apache

docker run -v $PWD/www:/var/www/html -p 8081:80 php:7.0-apache

#docker-compose.yml

www: image: php:7.0-apache volumes: - ./www:/var/www/html

docker run -v $PWD/www:/var/www/html -p 8081:80 php:7.0-apache

#docker-compose.yml

www: image: php:7.0-apache volumes: - ./www:/var/www/html ports: - 8081:80

docker run -v $PWD/www:/var/www/html -p 8081:80 php:7.0-apache

#docker-compose.yml

www: image: php:7.0-apache volumes: - ./www:/var/www/html ports: - 8081:80

docker-compose up

LINKING CONTAINERS

WWW REDIS

www: image: php:7.0-apache volumes: - ./www:/var/www/html ports: - 8081:80 redis: image: redis

www: image: php:7.0-apache volumes: - ./www:/var/www/html ports: - 8081:80 links: - redis redis: image: redis

<?php

/* www/index.php */

require_once __DIR__.'/vendor/autoload.php';

$client = new Predis\Client(['host' => 'redis']);

$counter = $client->incr('counter');

echo "Hostname: ".gethostname().PHP_EOL;

echo " Counter: ".$counter.PHP_EOL;

docker-compose ps

SCALING APPLICATIONS

WWW REDIS

WWW

WWW

HAPROXY

version: '2'services: www: image: php:7.0-apache volumes: - ./www:/var/www/html ports: - 8081:80 links: - redis redis: image: redis

version: '2'services: www: … haproxy: image: 'dockercloud/haproxy:latest' redis: …

version: '2'services: www: … haproxy: image: 'dockercloud/haproxy:latest' links: - www redis: …

version: '2'services: www: … haproxy: image: 'dockercloud/haproxy:latest' links: - www ports: - '80:80' redis: …

version: '2'services: www: … haproxy: image: 'dockercloud/haproxy:latest' links: - www ports: - '80:80' environment: - DOCKER_TLS_VERIFY - DOCKER_HOST - DOCKER_CERT_PATH volumes: - $DOCKER_CERT_PATH:$DOCKER_CERT_PATH redis: …

docker-compose up -d

docker-compose scale www=3

docker-compose ps

DEEPER?

DOCKER SWARM

MESOSPHERE

KUBERNETES

DOCKER

PACKAGING OWN APPLICATIONS

▸ Use Dockerfile

▸ COPY project code

▸ Orchestrate [with compose]

▸ Split into multiple containers

DOCKER

DEPLOYMENT TIPS&TRICKS

▸ Own in-house docker repository

▸ No direct disk usage

▸ Gaufrette - filesystem abstraction

▸ Logstash - logs

▸ Session in redis/memcached

CHALLENGE ACCEPTED?

QUESTIONS?