Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Why Docker? Dayton PHP, April 2017

265 views

Published on

As developers, we are blessed with a huge variety of tools to help us in our daily jobs. One of the most popular ones that has shown up over the last few years is Docker. How does one go about getting started with Docker? Why should you invest your time in this new technology? What can you do with Docker? Let's find out!

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Why Docker? Dayton PHP, April 2017

  1. 1. Why Docker? Chris Tankersley @dragonmantank Dayton PHP, April 2017 Sunshine PHP 2017 1
  2. 2. What Is Docker? “Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments.” Sunshine PHP 2017 2 https://www.docker.com/whatisdocker/
  3. 3. Containers Sunshine PHP 2017 3
  4. 4. Normal Bare-Metal Server Sunshine PHP 2017 4 CPU RAM HD Network Operating System nginx PHP DB
  5. 5. Virtual Machines Sunshine PHP 2017 5 CPU RAM HD Network Operating System nginx PHP DB Operating System nginx PHP DB Operating System Hypervisor
  6. 6. Containers Sunshine PHP 2017 6 CPU RAM HD Network Operating System nginxnginx PHP DB PHP DB
  7. 7. Containers Are Not New • LXC (Linux Containers) • OpenVZ • Systemd-nspawn • Qemu/kvm • BSD Jails • Solaris Zones • chroot Sunshine PHP 2017 7
  8. 8. Docker is an Ecosystem Sunshine PHP 2017 8 Docker Engine
  9. 9. Docker is an Ecosystem Sunshine PHP 2017 9 Docker ComposeDocker Machine Docker Swarm
  10. 10. How does it work? Sunshine PHP 2017 10 Uses a variety of existing Container technologies Server Containers Hyper-V Containers xhyve Virtualization
  11. 11. Sorry OSX < 10.10 and Windows < 10 Users Docker Toolbox Sunshine PHP 2017 11
  12. 12. Using Docker – The Basics Sunshine PHP 2017 12
  13. 13. Running a container • `docker run` will run a container • This will not restart an existing container, just create a new one • docker run [options] IMAGE [command] [arguments] • [options ]modify the docker process for this container • IMAGE is the image to use • [command] is the command to run inside the container • [arguments] are arguments for the command Sunshine PHP 2017 13
  14. 14. Running a simple shell Sunshine PHP 2017 14
  15. 15. Running a simple shell Sunshine PHP 2017 15
  16. 16. Running a simple shell Sunshine PHP 2017 16
  17. 17. What’s Going On? Sunshine PHP 2017 17 Ubuntu Kernel / + bin/ + etc/ + dev/ + home/ + usr/ + var/ + lib/ + … / + bin/ + etc/ + dev/ + home/ + usr/ + var/ + lib/ + … php nginx bash
  18. 18. Running Multiple Copies of Software Sunshine PHP 2017 18
  19. 19. Running Two Webservers Sunshine PHP 2017 19
  20. 20. Running Two Webservers Sunshine PHP 2017 20
  21. 21. Running Two Webservers Sunshine PHP 2017 21
  22. 22. Running Two Webservers Sunshine PHP 2017 22
  23. 23. Running Two Webservers Sunshine PHP 2017 23
  24. 24. Running Two Webservers Sunshine PHP 2017 24
  25. 25. Running Two Webservers Sunshine PHP 2017 25
  26. 26. Running Two Webservers Sunshine PHP 2017 26
  27. 27. Some Notes • All three containers are 100% self contained • Docker containers share common ancestors, but keep their own files • `docker run` parameters: • --rm – Destroy a container once it exits • -d – Run in the background (daemon mode) • -i – Run in interactive mode • --name – Give the container a name • -p [local port]:[container port] – Forward the local port to the container port Sunshine PHP 2017 27
  28. 28. As a Dev Environment Sunshine PHP 2017 28
  29. 29. Volumes Sunshine PHP 2017 29
  30. 30. Mounting from the host machine Sunshine PHP 2017 30
  31. 31. Mounting from the host machine Sunshine PHP 2017 31
  32. 32. Mounting from the host machine Sunshine PHP 2017 32
  33. 33. Mounting from the host machine Sunshine PHP 2017 33
  34. 34. Mounting from the host machine Sunshine PHP 2017 34
  35. 35. Mounting from the host isn’t perfect • The container now has a window into your host machine • Permissions can get screwy if you are modifying in the container • Most things it creates will be root by default, and you probably aren’t root on the host machine • Host-mounted volumes are not portable at all • OSX and Hyper-V VMs have limited pathings to mount • OSX has poor I/O performance Sunshine PHP 2017 35
  36. 36. Simulating Networks Sunshine PHP 2017 36
  37. 37. Networking • Docker can create multiple network “pools” • Each container gets an IP address • Containers can be attached to multiple networks • Docker network allow service discovery inside networks Sunshine PHP 2017 37
  38. 38. Legacy - Docker Links • Legacy Links work with `--link` • Only works on the legacy “bridge” network • Doesn’t support service discovery • Not worth it to use anymore Sunshine PHP 2017 38
  39. 39. Docker Networks • Discreet IP pool for containers • Containers can be added and removed to the network at whim • Service discovery though ‘--network-alias’ • Can be set up to work across hosts Sunshine PHP 2017 39
  40. 40. Create a network Sunshine PHP 2017 40
  41. 41. Attach to a network Sunshine PHP 2017 41
  42. 42. Ping the web container Sunshine PHP 2017 42
  43. 43. Add another web and kill web1 Sunshine PHP 2017 43
  44. 44. Building Custom Environments Sunshine PHP 2017 44
  45. 45. Custom Images • PHP images are pretty bare • Lots of times need to install extensions Sunshine PHP 2017 45
  46. 46. Dockerfile • Dockerfile is the configuration steps for an image • Can be created from scratch, or based on another image • Allows you to add files, create default volumes, ports, etc • Can be used privately or pushed to Docker Hub Sunshine PHP 2017 46
  47. 47. docker/Dockerfile FROM php:apache RUN a2enmod rewrite Sunshine PHP 2017 47
  48. 48. Build it docker build -t tag_name ./ • This runs through the Dockerfile and generates the image • We can now use the tag name to run the image Sunshine PHP 2017 48
  49. 49. Build it docker build -t d4dapp docker/ Sunshine PHP 2017 49
  50. 50. Sunshine PHP 2017 50
  51. 51. Use the new image docker run -d --name d4dapp -v C:dragoProjectsdockerfordevs-app:/var/www/ -p 8080:80 d4dapp Sunshine PHP 2017 51
  52. 52. Use the new image Sunshine PHP 2017 52
  53. 53. Containerizing Build Components Sunshine PHP 2017 53
  54. 54. Running Composer docker run --rm -v c:/Users/drago/.composer:/root/.composer -v c:/Users/drago/Projects/workshop:/app -v c:/Users/drago/.ssh:/root/.ssh composer/composer install Sunshine PHP 2017 54
  55. 55. Run Multi-Tier Applications Sunshine PHP 2017 55
  56. 56. What is Docker Compose? • Multi-container orchestration • A single config file holds all of your container info • Works with Docker Swarm and a few other tools, like Rancher Sunshine PHP 2017 56
  57. 57. Sample docker-compose.yml version: '2' volumes: mysqldata: driver: local services: d4dapp: build: ./docker/ volumes: - ./:/var/www/ ports: - 8080:80 mysqlserver: image: mysql environment: MYSQL_DATABASE: dockerfordevs MYSQL_ROOT_PASSWORD: 's3curep@assword' volumes: - mysqldata:/var/lib/mysql Sunshine PHP 2017 57
  58. 58. No longer use docker run $ docker rm –f d4dapp $ docker-compose up -d Sunshine PHP 2017 58
  59. 59. Now we have 2 containers Sunshine PHP 2017 59
  60. 60. Other Tools Sunshine PHP 2017 60
  61. 61. Docker Ecosystem • Docker Machine • Docker Swarm Sunshine PHP 2017 61
  62. 62. Thank You! • Software Engineer for InQuest • Author of “Docker for Developers” • https://leanpub.com/dockerfordevs • Co-Host of “Jerks Talk Games” • http://jerkstalkgames • http://ctankersley.com • chris@ctankersley.com • @dragonmantank Sunshine PHP 2017 62

×