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

Containerizing PHP Applications (Lone Star PHP 2017)

Containerizing PHP Applications (Lone Star PHP 2017)

44a352b02a91a9e841da7533bc5d9b8e?s=128

Josh Butts

April 21, 2017
Tweet

Transcript

  1. Containerizing PHP Applications Josh Butts Lone Star PHP 2017

  2. About Me • VP of Engineering
 at Offers.com • Austin

    PHP Organizer • github.com/jimbojsb • @jimbojsb 2
  3. About Offers.com • We help people save money • Launched

    in 2009 • 200k lines of PHP across several apps • Billions of requests / month • Runs entirely in Docker 3
  4. Agenda In No Particular Order • What is Docker •

    Docker Terminology • Running Docker in Dev vs Prod • Docker CLI tools • Anatomy of a Dockerfile • Building a Dockerfile for PHP apps • Wordpress Example • Laravel Example • Docker orchestration • Docker Compose • Registries & Sharing Containers
  5. SURVEY Quick 5

  6. CAVEATS A Few 6

  7. DOCKER? What is 7

  8. BUILDING, RUNNING AND DISTRIBUTING APPLICATION CONTAINERS Docker is a tool

    for 8
  9. What is Docker? • Docker allows you to package applications

    with infrastructure • Docker uses Linux kernel container technology • Docker is well suited for distributed and highly available applications 9
  10. High Level Overview 10

  11. Who Cares? • Docker allows engineers to choose exactly the

    stack for any app • Containers run anywhere that runs Docker • Ops focuses on infrastructure instead of stacks 11
  12. Docker Dictionary - Container • Container • A running instance

    of your app and it’s complete software stack • You might have many identical containers running • Often runs just one process 12
  13. Docker Dictionary - Image • An image is the compiled

    distributable version of your app and it’s stack • Images are built from Dockerfiles • You can start many containers from the same image 13
  14. Docker Dictionary - Layer • Docker uses a layering system

    to optimize storage • Each line in your Dockerfile is a layer • Many layers make up an image • Images share common layers where possible 14
  15. Docker Dictionary - Dockerfile • The Dockerfile is a text

    file that lives in your project root • Describes how to build your image • Installs software packages, configures runtimes, etc • Tells Docker what command to run and what ports to open 15
  16. Docker Dictionary - Registry • A server that stores images

    • Provides organization and authentication as needed • Facilitates sharing of pre-built images • Example: DockerHub, Amazon ECR 16
  17. The Docker Binary • Both the CLI client and the

    server • Written in Go • Speaks REST-ish over Unix socket or TCP/SSL • CLI and server can be on different hosts 17
  18. Building Images 18 Dockerfile Image Container Registry Image Image Build

    Push/Pull Run
  19. How Containers Run • Docker daemon runs as root and

    starts containers • Containers are basically stateless • Can expose local storage if you need to • Can’t see each other’s files • State is gone on exit 19
  20. Outsource your Persistence • Cloud (AWS) example: • RDS for

    database storage • Sessions in Memcached or Redis • File storage in S3 • This may require changes to your app! 20
  21. Docker vs Virtualization • Docker is lightweight • No overhead

    of a guest OS • Docker can be controlled / contained by systemd and cgroups 21
  22. DOCKER What does it mean to run 22

  23. Running the Docker Daemon • Unless you’re running Linux, you

    need a VM (i.e. dev environment) • For MacOS / Windows, Docker provides a VM tool • docker -d 23
  24. A Word on the Control OS • Any modern Linux

    should be able to run Docker • I personally don’t recommend Ubuntu • CoreOS is a small Linux distro that is designed to run Docker in production 24
  25. Typical Non-Linux Setup 25 MacOS Projects / Source Code VM

    Linux Docker Daemon Containers Containers Containers Containers Docker CLI
  26. HELLO WORLD EXAMPLE Lets try a 26

  27. Naming Images • hello-world • hello-world:latest • _/hello-world • dockerhub.com/_/hello-world

    27
  28. Naming Containers • Containers get a name • It’s different

    from the name of the image • It’s dumb by default • use --name 28
  29. Dockerfiles • FROM - specify your base image • RUN

    - run commands in the context • ADD - put your files in • EXPOSE - listen on ports • ENV - set environment vars • VOLUME - persistent storage 29
  30. DOCKERFILE Lets actually write a 30

  31. Building Images from Dockerfiles • docker build . • use

    -t to give it a repo / tag • docker images to see what’s available on your system • docker rmi to delete images 31
  32. Running Containers • docker run --name [image] • At runtime

    you can • add volumes • specify port mappings • change the CMD 32
  33. PHP APPLICATIONS Building Dockerfiles for 33

  34. My Container Philosophy • ONE Dockerfile for your app •

    Use that docker file for dev and prod • Default to prod, configure for dev 34
  35. Docker Compose • Docker Compose lets you orchestrate containers •

    Doesn’t do anything that Docker itself can’t do • YAML config file • Speaks the Docker Remote API 35
  36. WORDPRESS Lets build a Dockerfile for 36

  37. LARAVEL Lets build a Dockerfile for 37

  38. Github Links • http://github.com/jimbojsb/wp-docker- demo • http://github.com/jimbojsb/phpcli- docker-demo • http://github.com/jimbojsb/phpweb-

    docker-demo • http://github.com/jimbojsb/laravel- docker-demo 38
  39. JOIND.IN/TALK/EF56A I’d love your feedback: 39