Transcript
Page 1: Why Docker? Dayton PHP, April 2017

Why Docker?

Chris Tankersley

@dragonmantank

Dayton PHP, April 2017

Sunshine PHP 2017 1

Page 2: Why Docker? Dayton PHP, April 2017

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/

Page 3: Why Docker? Dayton PHP, April 2017

Containers

Sunshine PHP 2017 3

Page 4: Why Docker? Dayton PHP, April 2017

Normal Bare-Metal Server

Sunshine PHP 2017 4

CPU RAM HD Network

Operating System

nginx PHP DB

Page 5: Why Docker? Dayton PHP, April 2017

Virtual Machines

Sunshine PHP 2017 5

CPU RAM HD Network

Operating System

nginx PHP DB

Operating System

nginx PHP DB

Operating System

Hypervisor

Page 6: Why Docker? Dayton PHP, April 2017

Containers

Sunshine PHP 2017 6

CPU RAM HD Network

Operating System

nginxnginx PHP DB PHP DB

Page 7: Why Docker? Dayton PHP, April 2017

Containers Are Not New

ā€¢ LXC (Linux Containers)ā€¢ OpenVZā€¢ Systemd-nspawnā€¢ Qemu/kvmā€¢ BSD Jailsā€¢ Solaris Zonesā€¢ chroot

Sunshine PHP 2017 7

Page 8: Why Docker? Dayton PHP, April 2017

Docker is an Ecosystem

Sunshine PHP 2017 8

Docker Engine

Page 9: Why Docker? Dayton PHP, April 2017

Docker is an Ecosystem

Sunshine PHP 2017 9

Docker ComposeDocker Machine Docker Swarm

Page 10: Why Docker? Dayton PHP, April 2017

How does it work?

Sunshine PHP 2017 10

Uses a variety of existingContainer technologies

Server ContainersHyper-V Containers xhyve Virtualization

Page 11: Why Docker? Dayton PHP, April 2017

Sorry OSX < 10.10 and Windows < 10 Users

Docker Toolbox

Sunshine PHP 2017 11

Page 12: Why Docker? Dayton PHP, April 2017

Using Docker ā€“ The Basics

Sunshine PHP 2017 12

Page 13: Why Docker? Dayton PHP, April 2017

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

Page 14: Why Docker? Dayton PHP, April 2017

Running a simple shell

Sunshine PHP 2017 14

Page 15: Why Docker? Dayton PHP, April 2017

Running a simple shell

Sunshine PHP 2017 15

Page 16: Why Docker? Dayton PHP, April 2017

Running a simple shell

Sunshine PHP 2017 16

Page 17: Why Docker? Dayton PHP, April 2017

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

Page 18: Why Docker? Dayton PHP, April 2017

Running Multiple Copies of Software

Sunshine PHP 2017 18

Page 19: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 19

Page 20: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 20

Page 21: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 21

Page 22: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 22

Page 23: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 23

Page 24: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 24

Page 25: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 25

Page 26: Why Docker? Dayton PHP, April 2017

Running Two Webservers

Sunshine PHP 2017 26

Page 27: Why Docker? Dayton PHP, April 2017

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

Page 28: Why Docker? Dayton PHP, April 2017

As a Dev Environment

Sunshine PHP 2017 28

Page 29: Why Docker? Dayton PHP, April 2017

Volumes

Sunshine PHP 2017 29

Page 30: Why Docker? Dayton PHP, April 2017

Mounting from the host machine

Sunshine PHP 2017 30

Page 31: Why Docker? Dayton PHP, April 2017

Mounting from the host machine

Sunshine PHP 2017 31

Page 32: Why Docker? Dayton PHP, April 2017

Mounting from the host machine

Sunshine PHP 2017 32

Page 33: Why Docker? Dayton PHP, April 2017

Mounting from the host machine

Sunshine PHP 2017 33

Page 34: Why Docker? Dayton PHP, April 2017

Mounting from the host machine

Sunshine PHP 2017 34

Page 35: Why Docker? Dayton PHP, April 2017

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

Page 36: Why Docker? Dayton PHP, April 2017

Simulating Networks

Sunshine PHP 2017 36

Page 37: Why Docker? Dayton PHP, April 2017

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

Page 38: Why Docker? Dayton PHP, April 2017

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

Page 39: Why Docker? Dayton PHP, April 2017

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

Page 40: Why Docker? Dayton PHP, April 2017

Create a network

Sunshine PHP 2017 40

Page 41: Why Docker? Dayton PHP, April 2017

Attach to a network

Sunshine PHP 2017 41

Page 42: Why Docker? Dayton PHP, April 2017

Ping the web container

Sunshine PHP 2017 42

Page 43: Why Docker? Dayton PHP, April 2017

Add another web and kill web1

Sunshine PHP 2017 43

Page 44: Why Docker? Dayton PHP, April 2017

Building Custom Environments

Sunshine PHP 2017 44

Page 45: Why Docker? Dayton PHP, April 2017

Custom Images

ā€¢ PHP images are pretty bareā€¢ Lots of times need to install extensions

Sunshine PHP 2017 45

Page 46: Why Docker? Dayton PHP, April 2017

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

Page 47: Why Docker? Dayton PHP, April 2017

docker/Dockerfile

FROM php:apache

RUN a2enmod rewrite

Sunshine PHP 2017 47

Page 48: Why Docker? Dayton PHP, April 2017

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

Page 49: Why Docker? Dayton PHP, April 2017

Build it

docker build -t d4dapp docker/

Sunshine PHP 2017 49

Page 50: Why Docker? Dayton PHP, April 2017

Sunshine PHP 2017 50

Page 51: Why Docker? Dayton PHP, April 2017

Use the new image

docker run -d --name d4dapp \

-v C:\drago\Projects\dockerfordevs-app:/var/www/ \

-p 8080:80

d4dapp

Sunshine PHP 2017 51

Page 52: Why Docker? Dayton PHP, April 2017

Use the new image

Sunshine PHP 2017 52

Page 53: Why Docker? Dayton PHP, April 2017

Containerizing Build Components

Sunshine PHP 2017 53

Page 54: Why Docker? Dayton PHP, April 2017

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

Page 55: Why Docker? Dayton PHP, April 2017

Run Multi-Tier Applications

Sunshine PHP 2017 55

Page 56: Why Docker? Dayton PHP, April 2017

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

Page 57: Why Docker? Dayton PHP, April 2017

Sample docker-compose.ymlversion: '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

Page 58: Why Docker? Dayton PHP, April 2017

No longer use docker run

$ docker rm ā€“f d4dapp

$ docker-compose up -d

Sunshine PHP 2017 58

Page 59: Why Docker? Dayton PHP, April 2017

Now we have 2 containers

Sunshine PHP 2017 59

Page 60: Why Docker? Dayton PHP, April 2017

Other Tools

Sunshine PHP 2017 60

Page 61: Why Docker? Dayton PHP, April 2017

Docker Ecosystem

ā€¢ Docker Machineā€¢ Docker Swarm

Sunshine PHP 2017 61

Page 62: Why Docker? Dayton PHP, April 2017

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ā€¢ [email protected]ā€¢ @dragonmantank

Sunshine PHP 2017 62


Recommended