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

Docker & PHP

Docker & PHP

Szymon Skórczyński

November 13, 2015
Tweet

More Decks by Szymon Skórczyński

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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!
  6. { "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" } } ],
  7. "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" }] },
  8. { "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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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