Slide 1

Slide 1 text

Docker: Multi-stage multi-environment Abdala Cerqueira

Slide 2

Slide 2 text

Dockerfile

Slide 3

Slide 3 text

FROM COPY --from= docker build --target

Slide 4

Slide 4 text

Problems

Slide 5

Slide 5 text

Problem 1 ● Keep different Dockerfiles per environment ● ! dev tools and dependencies on production

Slide 6

Slide 6 text

Problem 2 ● Big, huge, immense images ● One or two commands may leave images out of control

Slide 7

Slide 7 text

Dependencies

Slide 8

Slide 8 text

Checklist ● Have only one Dockerfile ● Use the same Dockerfile for all environments (dev, test, prod) ● Create small images ● Manage less dependencies

Slide 9

Slide 9 text

Official PHP image ● One Dockerfile ● All environments ● Small images ● Less dependencies Time: ~39s Size: 430MB Security problems

Slide 10

Slide 10 text

Multi-stage

Slide 11

Slide 11 text

Official PHP image multi-stage ● One Dockerfile ● All environments ● Small images ● Less dependencies Time: ~40s Size: 393MB Not that small, hidden dependencies

Slide 12

Slide 12 text

Alpine image ● One Dockerfile ● All environments ● Small images ● Less dependencies Time: ~11s Size: 59.4MB Still have unwanted dependencies

Slide 13

Slide 13 text

Alpine image multi-stage ● One Dockerfile ● All environments ● Small images ● Less dependencies Time: ~16s Size: 35.8MB This is ART <3

Slide 14

Slide 14 text

Comparison table Image Time Size alpine:3.8 - 4.41 MB php:7.2-apache - 377 MB laravel-apache 39s 430 MB laravel-apache-multi 40s 393 MB laravel-alpine 11s 59.4 MB laravel-alpine-multi 16s 35.8 MB

Slide 15

Slide 15 text

Conclusion ● Care about dependencies ● Try different techniques

Slide 16

Slide 16 text

Thanks!