47
Aurelijus Banelis Dockerizing PHP Apps VilniusPHP 2018-11-08

Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Aurelijus Banelis

Dockerizing PHP Apps

VilniusPHP2018-11-08

Page 3: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

AdaptingPHP applicationsto be used with

docker

Page 4: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 5: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 6: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Monolith (VirtualBox) → SplitDevelopment bottleneck

Jenkins (time based) → CircleCIConfidence/tooling bottleneck

Release coordination → AWS servicesProvisioning speed bottleneck

Page 7: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Monolith (VirtualBox) → SplitDevelopment bottleneck

Jenkins (time based) → CircleCIConfidence/tooling bottleneck

Release coordination → AWS servicesProvisioning speed bottleneck

Bottleneck to grow

Page 8: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Monolith (VirtualBox) → SplitDevelopment bottleneck

Jenkins (time based) → CircleCIConfidence/tooling bottleneck

Release coordination → AWS servicesProvisioning speed bottleneck

Need for better virtualization tools

Page 9: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Monolith (VirtualBox) → SplitDevelopment bottleneck

Jenkins (time based) → CircleCIConfidence/tooling bottleneck

Release coordination → AWS servicesProvisioning speed bottleneck

Need for better virtualization tools

docker?

Page 10: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

We migrated to dockerUsing docker extensively at

Learning curve was highWere pioniers, added tooling around

I would do the same againRight decision for current scaleFuture opportunities

Page 11: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 12: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Tool to run in isolated environmentMany ifs in kernel = cgroupsNot VirtualBox, not unikernel

Open source tool backed by Docker IncContainer hosting and premium serviceImproved by community (AWS, K8s)

Page 13: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 14: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker
Page 15: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker
Page 16: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

docker build . -t vilniusphp-exampledocker run -p 8080:80 vilniusphp-example

Page 17: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

https://gist.github.com/aurelijusb/6f6b1c86c440ce527250193ffcae62d7

docker build . -t vilniusphp-exampledocker run -p 8080:80 vilniusphp-example

Page 18: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

https://gist.github.com/aurelijusb/6f6b1c86c440ce527250193ffcae62d7

docker build . -t vilniusphp-exampledocker run -p 8080:80 vilniusphp-exampleSimple?

Page 19: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

https://gist.github.com/aurelijusb/6f6b1c86c440ce527250193ffcae62d7

docker build . -t vilniusphp-exampledocker run -p 8080:80 vilniusphp-exampleSimple?But for simple cases

Page 20: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Multiple containers

Development tools

PHP extensions

xDebug support

...https://github.com/nfqakademija/docker/blob/master/php/Dockerfile

Page 21: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Multiple containers

Development tools

PHP extensions

xDebug support

...https://github.com/nfqakademija/docker/blob/master/php/Dockerfile

More configuration

Page 22: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Multiple containers

Development tools

PHP extensions

xDebug support

...https://github.com/nfqakademija/docker/blob/master/php/Dockerfile

More configurationBut infrastructure

as a code

Page 24: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Multiple containers

Development tools

PHP extensions

xDebug support

...https://github.com/nfqakademija/docker/blob/master/php/Dockerfile

Docker wayLogging stdout/stderrConfiguration via ENV

Kill-it-not-heal-it….

Page 25: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 26: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 27: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

DockerFeaturetoggle

IDE in cloud

Run & pray

Virtual box

Not many alternativesFor isolated environments

Page 28: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 29: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Sandboxed development environmentHigh quality mocks (real MySql, wireshark)True integration/acceptance testsDockerfile→docker-compose→custom tooling

Experimenting with new software saferNo trash, no sensitive informationEasy to swap (DynamoDB local vs dynalite)Install/compile on your machine? Seriously?

Page 30: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Switching between branches/tasksLess issues with cache invalidationKill-it-not-heal-itData volumes = test data in branch

Infrastructure as a codeFixed versions, fixed php.ini+extensionsLess “works on my machine” = reproducibleMany bash scripts, configuration via ENV

Page 31: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Huge ecosystemPioniers are using and improvingAmazon, Google (K8s) is investingKnown issues and solutions in StackOverflow

Page 32: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 33: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

High learning curve = blame dockerMisuse of the tool – isn’t docker silver bullet?Docker wraps – everyone blames the wrapperMany ways to install docker incorrectlyMounting vs copy-on-write operationNo Windows, more tooling/docs around

Page 34: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Not mature tooling / edge casesDownload private dependency: github token?Password protected SSH key? (Mac+Linux)CircleCI limited “remote docker”Host IP for xDebugEven more bash scripts/docs

Page 35: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Cache everything by designFull HDD because of docker imagesMissing log rotation (no “log-opts” by default)“Latest” tag, that is not immutableNetwork unreachable, since used by dockerDocker-clean sh, docker pull, RTFM

Page 36: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 37: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 38: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

○ ECS (not yet K8s, AWS backed infrastructure/improvements, canary deployment by default)

○ ECR – uptime for downloads. Docker hub for development○ Task definition = docker-compose.yml○ PHP+Apache = PHP+Nginx (no big difference)○ Custom tooling for credentials via environment○ Spot-instances (currently for staging, targeting production)

PHP + Docker in productionMigrated Tier1 service – nobody noticed

AWS ECS PHP 7.2

Docker Apache

Page 39: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

○ ECS (not yet K8s, AWS backed infrastructure/improvements, canary deployment by default)

○ ECR – uptime for downloads. Docker hub for development○ Task definition = docker-compose.yml○ PHP+Apache = PHP+Nginx (no big difference)○ Custom tooling for credentials via environment○ Spot-instances (currently for staging, targeting production)

PHP + Docker in productionMigrated Tier1 service – nobody noticed

AWS ECS PHP 7.2

Docker Apache

Page 40: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Amazon Web ServicesElastic Container ServiceAWS integration (E.g. spot-instances)K8s on AWS then was not matureKnow-how (our Go apps in prod)

Page 41: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Amazon Web ServicesElastic Container ServiceAWS integration (E.g. spot-instances)K8s on AWS then was not matureKnow-how (our Go apps in prod)

Naming in AWSDocker-compose → Task definitionContainer → TaskDocker Hub → ECR

Page 42: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Apache mod_phpPHP 7.2 log trimming in Nginx+FPMSingle process container – easierNo visible performance impactInternal service (no slow loris attack)

Page 43: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Apache mod_phpPHP 7.2 log trimming in Nginx+FPMSingle process container – easierNo visible performance impactInternal service (no slow loris attack)

Replica Daemon External

Logging

Page 44: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Why to dockerizeWhat is dockerHow to dockerize

Introduction

Development

Production

Context/AlternativesWhat I really likedWhat I do not like

Deploying to AWS

Page 45: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

DockerFeaturetoggle

IDE in cloud

Run & pray

Virtual box

Docker:Good to understand

Use on demand

Page 46: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Aurelijus Banelis

Dockerizing PHP Apps

VilniusPHP2018-11-08

Thank youQuestions?

Page 47: Dockerizing PHP Apps - Aurelijus Banelis · Dockerizing PHP Apps VilniusPHP 2018-11-08. Aurelijus Banelis PGP 0x320205E7539B6203 ... Deploying to AWS. Why to dockerize What is docker

Further reading/references● https://www.docker.com/● https://hub.docker.com/ ● https://aws.amazon.com/ecs/● https://aws.amazon.com/ecr/ ● https://fluentbit.io/● https://www.home24.de/ ● https://home24.tech.blog/category/aws/● https://aws.amazon.com/blogs/opensource/network-load-balancer-support-in-kubernetes-1-9/