Docker & PHP

Docker & PHP

Efa1d75eaaafa76ef74a9310bc58fcf8?s=128

Szymon Skórczyński

November 13, 2015
Tweet

Transcript

  1. DOCKER & PHP development and deployment Szymon Skórczyński Schibsted Tech

    Polska PHPCon Poland November 13, 2015
  2. Szymon Skórczyński PHP Developer @sskorc

  3. None
  4. None
  5. WHAT MAKES DOCKER SO GOOD?

  6. None
  7. None
  8. None
  9. None
  10. None
  11. 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
  12. None
  13. None
  14. IMAGE VS CONTAINER

  15. HOW TO DEVELOP?

  16. LINUX

  17. Host (Mac or Windows) Docker Client Docker Machine Docker Engine

    Container Apache Container Mongo
  18. applicaction sources DB files

  19. php: build: . links: [db] volumes: - .:/var/www/docker-symfony nginx: image:

    nginx:1.9.6 links: [php] volumes_from: [php] volumes: - ./docker/vhost.conf:/etc/nginx/conf.d/default.conf ports: ["80:80"] db: image: mongo:3.0.7 volumes: - /mnt/sda1/var/lib/mongo-data:/data/db ports: ["27017:27017"] docker-compose.yml
  20. FROM php:5.6.15-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
  21. FROM php:5.6.15-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
  22. FROM sskorc/symfony2-mongo:latest ADD docker/php.ini /usr/local/etc/php/php.ini WORKDIR /var/www/docker-symfony Dockerfile

  23. RUN IT! docker-compose up -d

  24. DEMO

  25. HOW TO DEPLOY?

  26. None
  27. THE STEPS 1. Create a specific IAM policy and assing

    it to the role 2. Create a new environment with “Multi-container Docker” predifined configuration 3. Assign a proper role to the environment 4. Prepare the Dockerrun.aws.json file 5. Deploy!
  28. { "AWSEBDockerrunVersion": 2, "authentication": { "bucket": "docker-symfony", "key": "docker/dockercfg" },

    "volumes": [ { "name": "data", "host": { "sourcePath": "/var/data" } }, { "name": "symfony-app", "host": { "sourcePath": "/var/app/current" } }, { "name": "vhost-config", "host": { "sourcePath": "/var/app/current/docker/vhost.conf" } } ],
  29. "containerDefinitions": [{ "name": "db", "image": "mongo:3.0.7", "essential": true, "memory": 256,

    "mountPoints": [{ "sourceVolume": "data", "containerPath": "/data/db" }] }, { "name": "php", "image": "sskorc/docker-symfony:latest", "essential": true, "memory": 256, "links": ["db"], "mountPoints": [{ "sourceVolume": "symfony-app", "containerPath": "/var/www/docker-symfony" }] },
  30. { "name": "nginx", "image": "nginx:1.9.6", "essential": true, "memory": 256, "portMappings":

    [{ "hostPort": 80, "containerPort": 80 }], "links": ["php"], "mountPoints": [{ "sourceVolume": "symfony-app", "containerPath": "/var/www/docker-symfony" }, { "sourceVolume": "vhost-config", "containerPath": "/etc/nginx/conf.d/default.conf" }] } ] } Dockerrun.aws.json
  31. option_settings: - namespace: aws:elasticbeanstalk:command option_name: Timeout value: 1200 commands: 01_docker_clean_containers:

    command: docker rm -v $(docker ps -a -q) ignoreErrors: true 02_docker_clean_images: command: docker rmi $(docker images -q) ignoreErrors: true .ebextensions/01docker.config
  32. checkout sources push sf2 image pull sf2 image, mongo image,

    nginx image GitHub CircleCI AWS Docker Hub build sf2 image run tests on sf2 image send sources and fire! pull mongo image run sf2 image, mongo image, nginx image
  33. checkout sources push sf2 image pull sf2 image, mongo image,

    nginx image GitHub CircleCI AWS Docker Hub build sf2 image run tests on sf2 image send sources and fire! pull mongo image run sf2 image, mongo image, nginx image
  34. checkout sources push sf2 image pull sf2 image, mongo image,

    nginx image GitHub CircleCI AWS Docker Hub build sf2 image run tests on sf2 image send sources and fire! pull mongo image run sf2 image, mongo image, nginx image APPLICATION_VERSION=$ENVIRONMENT-$BUILD_NUM-docker-symfony.zip zip $APPLICATION_VERSION -r . aws s3 cp $APPLICATION_VERSION s3://$EB_BUCKET/$APPLICATION_VERSION aws elasticbeanstalk create-application-version --application-name "docker-symfony" \ --version-label $BUILD_NUM --source-bundle S3Bucket= $EB_BUCKET,S3Key=$APPLICATION_VERSION aws elasticbeanstalk update-environment --environment-name $ENVIRONMENT \ --version-label $BUILD_NUM
  35. checkout sources push sf2 image pull sf2 image, mongo image,

    nginx image GitHub CircleCI AWS Docker Hub build sf2 image run tests on sf2 image send sources and fire! pull mongo image run sf2 image, mongo image, nginx image
  36. None
  37. EC2 Container Service

  38. WRAP UP

  39. SHOULD YOU TRY DOCKER?

  40. WHY? Portability Isolation Performance Modularity Community

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