Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker & PHP

Docker & PHP

Szymon Skórczyński

February 18, 2016
Tweet

More Decks by Szymon Skórczyński

Other Decks in Programming

Transcript

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

    View Slide

  2. Szymon Skórczyński
    PHP Developer
    @sskorc

    View Slide

  3. Gdańsk, Poland

    View Slide

  4. View Slide

  5. View Slide

  6. WHAT MAKES DOCKER
    SO GOOD?

    View Slide

  7. View Slide

  8. View Slide

  9. cgroups
    namespaces

    View Slide

  10. View Slide

  11. View Slide

  12. 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

    View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. IMAGE
    VS
    CONTAINER

    View Slide

  17. HOW TO DEVELOP?

    View Slide

  18. LINUX

    View Slide

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

    View Slide

  20. DEMO #1
    RUNNING DOCKER MACHINE

    View Slide

  21. USE CASE #1
    TESTING PHP7

    View Slide

  22. DEMO #2
    TESTING PHP7

    View Slide

  23. USE CASE #2
    PHP APPLICATION

    View Slide

  24. application
    sources
    DB
    files

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 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

    View Slide

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

    View Slide

  29. RUN IT!
    docker-compose up -d

    View Slide

  30. DEMO #3
    RUNNING PHP APPLICATION

    View Slide

  31. HOW TO DEPLOY?

    View Slide

  32. View Slide

  33. View Slide

  34. IaaS

    View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. 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

    View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. 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

    View Slide

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

    View Slide

  46. 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

    View Slide

  47. 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

    View Slide

  48. #! /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

    View Slide

  49. View Slide

  50. ARE THERE ANY
    THREATS?

    View Slide

  51. SOME THREATS
    Garbage collection
    Persistence
    Stability
    Maturity

    View Slide

  52. WRAP UP

    View Slide

  53. SHOULD YOU TRY DOCKER?

    View Slide

  54. WHY?
    Portability
    Isolation
    Performance
    Modularity
    Community

    View Slide

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

    View Slide