Slide 1

Slide 1 text

DOCKER & PHP development and deployment Szymon Skórczyński Schibsted Tech Polska PHP UK Conference February 18, 2016

Slide 2

Slide 2 text

Szymon Skórczyński PHP Developer @sskorc

Slide 3

Slide 3 text

Gdańsk, Poland

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

WHAT MAKES DOCKER SO GOOD?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

cgroups namespaces

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Host OS Hypervisor Guest OS Guest OS Guest OS bins/libs bins/libs bins/libs App A App A` App B Host OS Docker bins/libs bins/libs App A App A’ App B App B’ App B’ App B’ VM Docker container Docker Standard VM

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

IMAGE VS CONTAINER

Slide 17

Slide 17 text

HOW TO DEVELOP?

Slide 18

Slide 18 text

LINUX

Slide 19

Slide 19 text

Host (Mac or Windows) Docker Client Docker Machine Docker Engine Container nginx Container Mongo

Slide 20

Slide 20 text

DEMO #1 RUNNING DOCKER MACHINE

Slide 21

Slide 21 text

USE CASE #1 TESTING PHP7

Slide 22

Slide 22 text

DEMO #2 TESTING PHP7

Slide 23

Slide 23 text

USE CASE #2 PHP APPLICATION

Slide 24

Slide 24 text

application sources DB files

Slide 25

Slide 25 text

php: build: . links: [db] volumes: - .:/var/www/docker-symfony nginx: image: nginx:1.9.10 links: [php] volumes_from: [php] volumes: - ./docker/vhost.conf:/etc/nginx/conf.d/default.conf ports: ["80:80"] db: image: mongo:3.2.1 volumes: - /mnt/sda1/var/lib/mongo-data:/data/db ports: ["27017:27017"] docker-compose.yml

Slide 26

Slide 26 text

FROM php:5.6.18-fpm RUN apt-get update \ && curl -sL https://deb.nodesource.com/setup | bash - \ && apt-get install -y git libssl-dev zlib1g-dev libicu-dev g++ \ && pecl install mongo \ && echo extension=mongo.so > /usr/local/etc/php/conf.d/mongo.ini \ && pecl install apcu-beta \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && docker-php-ext-install zip mbstring intl RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/bin/composer ADD docker/php.ini /usr/local/etc/php/php.ini WORKDIR /var/www/docker-symfony Dockerfile

Slide 27

Slide 27 text

FROM php:5.6.18-fpm RUN apt-get update \ && curl -sL https://deb.nodesource.com/setup | bash - \ && apt-get install -y git libssl-dev zlib1g-dev libicu-dev g++ \ && pecl install mongo \ && echo extension=mongo.so > /usr/local/etc/php/conf.d/mongo.ini \ && pecl install apcu-beta \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && docker-php-ext-install zip mbstring intl RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/bin/composer ADD docker/php.ini /usr/local/etc/php/php.ini WORKDIR /var/www/docker-symfony Dockerfile

Slide 28

Slide 28 text

FROM sskorc/symfony2-mongo:latest ADD docker/php.ini /usr/local/etc/php/php.ini WORKDIR /var/www/docker-symfony Dockerfile

Slide 29

Slide 29 text

RUN IT! docker-compose up -d

Slide 30

Slide 30 text

DEMO #3 RUNNING PHP APPLICATION

Slide 31

Slide 31 text

HOW TO DEPLOY?

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

IaaS

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

php: image: sskorc/docker-symfony-dist:latest links: [db] volumes: - /var/www/docker-symfony nginx: image: nginx:1.9.10 links: [php] volumes_from: [php] volumes: - /var/app/vhost.conf:/etc/nginx/conf.d/default.conf ports: ["80:80"] db: image: mongo:3.2.1 volumes: - /var/app/db:/data/db ports: ["27017:27017"] Stackfile

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

FROM sskorc/symfony2-mongo:latest ADD docker/php.ini /usr/local/etc/php/php.ini ADD . /var/www/docker-symfony RUN cd /var/www/docker-symfony && composer install -n WORKDIR /var/www/docker-symfony Dockerfile

Slide 45

Slide 45 text

checkout sources GitHub AWS EC2 node #1 Docker Hub build sf2 image AWS EC2 node #2 AWS EC2 node #n Tutum trigger deploy

Slide 46

Slide 46 text

checkout sources GitHub AWS EC2 node #1 Docker Hub build sf2 image AWS EC2 node #2 AWS EC2 node #n Tutum trigger deploy Travis CI run tests pull other images push sf2 image pull images

Slide 47

Slide 47 text

language: ruby services: [docker] before_install: - docker login -e="$D_EMAIL" -u="$D_USERNAME" -p="$D_PASSWORD" before_script: - rm web/app_dev.php web/config.php web/info.php script: - docker build -f Dockerfile.remote -t sskorc/docker-symfony-dist . - docker-compose --file=docker-compose-remote.yml up -d - docker exec -it dockersymfony_php_1 bash -c "bin/phing test" - docker exec -it dockersymfony_php_1 bash -c "bin/phing quality" deploy: provider: script script: ./deploy.sh skip_cleanup: true on: branch: master .travis.yml

Slide 48

Slide 48 text

#! /bin/bash docker tag sskorc/docker-symfony-dist:latest sskorc/docker-symfony- dist:$TRAVIS_BUILD_NUMBER docker push sskorc/docker-symfony-dist curl -u sskorc:$TUTUM_API_KEY -H "Content-Type: application/json" -X POST -d '{"reuse_volumes":false}' https://dashboard.tutum.co/api/ v1/service/$PHP_SERVICE_UUID/redeploy/ deploy.sh

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

ARE THERE ANY THREATS?

Slide 51

Slide 51 text

SOME THREATS Garbage collection Persistence Stability Maturity

Slide 52

Slide 52 text

WRAP UP

Slide 53

Slide 53 text

SHOULD YOU TRY DOCKER?

Slide 54

Slide 54 text

WHY? Portability Isolation Performance Modularity Community

Slide 55

Slide 55 text

https://github.com/sskorc/docker-symfony http://www.schibsted.pl/category/devops/ @sskorc https://joind.in/talk/ea2ce