81
Docker for PHP Developers Chris Tankersley @dragonmantank NomadPHP EU April 2016 NomadPHP EU April 2016 1

Docker for PHP Developers (NomadPHP)

Embed Size (px)

Citation preview

Page 1: Docker for PHP Developers (NomadPHP)

Docker for PHP Developers ChrisTankersley@dragonmantankNomadPHPEUApril2016

NomadPHPEUApril2016 1

Page 2: Docker for PHP Developers (NomadPHP)

Who Am I

• PHPProgrammerforover11years•  Sysadmin/DevOpsforaround9years• UsingLinuxformorethan15years• hJps://github.com/dragonmantank

• Authorof“DockerforDevelopers”• Reigning,Defending,UndisputedPHPMTGChampionoftheWorld

NomadPHPEUApril2016 2

Page 3: Docker for PHP Developers (NomadPHP)

Docker

NomadPHPEUApril2016 3

Page 4: Docker for PHP Developers (NomadPHP)

What Is Docker?

“DockerisanopenplaWormfordevelopersandsysadminstobuild,ship,andrundistributedapplicaXons.ConsisXngofDockerEngine,aportable,lightweightrunXmeandpackagingtool,andDockerHub,acloudserviceforsharingapplicaXonsandautomaXngworkflows,DockerenablesappstobequicklyassembledfromcomponentsandeliminatesthefricXonbetweendevelopment,QA,andproducXonenvironments.”

NomadPHPEUApril2016 4

hJps://www.docker.com/whaXsdocker/

Page 5: Docker for PHP Developers (NomadPHP)

What is it from a technical standpoint?

• DockerisawrapperaroundContainers• DockerEngineisthepackagingporXonthatbuildsandrunsthecontainers• DockerHuballowsyoutopublishimagesforotherstouse• DockerMachineisabare-metalprovisioningtool• DockerSwarmisanload-balancingdeploymenttool• DockerComposeisamulX-containerbuildsystem

NomadPHPEUApril2016 5

Page 6: Docker for PHP Developers (NomadPHP)

Containers

NomadPHPEUApril2016 6

Page 7: Docker for PHP Developers (NomadPHP)

Normal Bare-Metal Server

NomadPHPEUApril2016 7

CPU RAM HD Network

OperaXngSystem

nginx PHP DB

Page 8: Docker for PHP Developers (NomadPHP)

Virtual Machines

NomadPHPEUApril2016 8

CPU RAM HD Network

OperaXngSystem

nginx PHP DB

OperaXngSystem

nginx PHP DB

OperaXngSystem

Hypervisor

Page 9: Docker for PHP Developers (NomadPHP)

Containers

NomadPHPEUApril2016 9

CPU RAM HD Network

OperaXngSystem

nginxnginx PHP DB PHP DB

Page 10: Docker for PHP Developers (NomadPHP)

Docker can use many different containers

•  Since0.9.0itsupports:•  LXC(LinuxContainers)–StartedwithLXCwhenitwasreleased•  OpenVZ•  Systemd-nspawn•  libvert-sandbox•  Qemu/kvm•  BSDJails•  SolarisZones•  chroot

NomadPHPEUApril2016 10

Page 11: Docker for PHP Developers (NomadPHP)

Runs on *nix and Windows Hyper-V

• NonaXvecontainerdriversforOSX*• AmazonhasElasXcContainerService,andMicrosokAzurehasAzureContainerService

NomadPHPEUApril2016 11

Page 12: Docker for PHP Developers (NomadPHP)

Sorry OSX Users

• DockersupportisofficiallymaintainedthroughDockerToolbox

NomadPHPEUApril2016 12

Page 13: Docker for PHP Developers (NomadPHP)

Docker Toolbox also is for Windows

NomadPHPEUApril2016 13

Page 14: Docker for PHP Developers (NomadPHP)

Let’s use Docker

NomadPHPEUApril2016 14

Page 15: Docker for PHP Developers (NomadPHP)

Running a container

•  `dockerrun`willrunacontainer•  ThiswillnotrestartanexisXngcontainer,justcreateanewone• dockerrun[opXons]IMAGE[command][arguments]

•  [opXons]modifythedockerprocessforthiscontainer•  IMAGEistheimagetouse•  [command]isthecommandtoruninsidethecontainer•  [arguments]areargumentsforthecommand

NomadPHPEUApril2016 15

Page 16: Docker for PHP Developers (NomadPHP)

Running a simple shell

NomadPHPEUApril2016 16

Page 17: Docker for PHP Developers (NomadPHP)

Running a simple shell

NomadPHPEUApril2016 17

Page 18: Docker for PHP Developers (NomadPHP)

Running a simple shell

NomadPHPEUApril2016 18

Page 19: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 19

Page 20: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 20

Page 21: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 21

Page 22: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 22

Page 23: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 23

Page 24: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 24

Page 25: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 25

Page 26: Docker for PHP Developers (NomadPHP)

Running Two Webservers

NomadPHPEUApril2016 26

Page 27: Docker for PHP Developers (NomadPHP)

Some Notes

• Allthreecontainersare100%selfcontained• Dockercontainerssharecommonancestors,butkeeptheirownfiles•  `dockerrun`parameters:

•  --rm–Destroyacontaineronceitexits•  -d–Runinthebackground(daemonmode)•  -i–RunininteracXvemode•  --name–Givethecontaineraname•  -p[localport]:[containerport]–Forwardthelocalporttothecontainerport

NomadPHPEUApril2016 27

Page 28: Docker for PHP Developers (NomadPHP)

Volumes

NomadPHPEUApril2016 28

Page 29: Docker for PHP Developers (NomadPHP)

Modifying a running container

•  `dockerexec`canrunacommandinsideofanexisXngcontainer• UseVolumestosharedata

NomadPHPEUApril2016 29

Page 30: Docker for PHP Developers (NomadPHP)

Persistent Data with Volumes

•  Youcandesignateavolumewith-v• Volumescanbesharedamongstcontainers• Volumescanmountdatafromthehostsystem

NomadPHPEUApril2016 30

Page 31: Docker for PHP Developers (NomadPHP)

Mounting from the host machine

NomadPHPEUApril2016 31

Page 32: Docker for PHP Developers (NomadPHP)

Mounting from the host machine

NomadPHPEUApril2016 32

Page 33: Docker for PHP Developers (NomadPHP)

Mounting from the host machine

NomadPHPEUApril2016 33

Page 34: Docker for PHP Developers (NomadPHP)

Mounting from the host machine

NomadPHPEUApril2016 34

Page 35: Docker for PHP Developers (NomadPHP)

Mounting from the host machine

NomadPHPEUApril2016 35

Page 36: Docker for PHP Developers (NomadPHP)

Mounting from the host isn’t perfect

•  Thecontainernowhasawindowintoyourhostmachine• Permissionscangetscrewyifyouaremodifyinginthecontainer

•  Mostthingsitcreateswillberootbydefault,andyouprobablyaren’trootonthehostmachine

• Host-mountedvolumesarenotportableatall• DockerToolbox’sVMonlyallowsmounXngfromwithinyourhomedirectory

NomadPHPEUApril2016 36

Page 37: Docker for PHP Developers (NomadPHP)

Container Data Volumes

• Usesasmallcontainerthatdoesnothingbutstoresdata• Haveourappcontainersusethedatavolumetostoredata• Use‘editorcontainers’togoinandmodifydatawhenneeded

NomadPHPEUApril2016 37

Page 38: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 38

Page 39: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 39

Page 40: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 40

Page 41: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 41

Page 42: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 42

Page 43: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 43

Page 44: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 44

Page 45: Docker for PHP Developers (NomadPHP)

Mounting Data Volumes

NomadPHPEUApril2016 45

Page 46: Docker for PHP Developers (NomadPHP)

Why not run SSH inside of the container?

• Well,youcan…• Dockerisdesignedforonecommandpercontainer•  Ifyouneedtomodifydata,thenyouneedtochangeyoursetup•  IfyouhavetorunSSH,thenyouneedawaytorunSSHandyourcommand

NomadPHPEUApril2016 46

Page 47: Docker for PHP Developers (NomadPHP)

Why go through the hassle?

• Datavolumesareportable• Datavolumesaresafer•  Separatestheappcontainersfromdata

•  ProducXoncanuseadatavolume,devcanuseahostvolume

• Ourappcontainersstaysmall

NomadPHPEUApril2016 47

Page 48: Docker for PHP Developers (NomadPHP)

Network Linking

NomadPHPEUApril2016 48

Page 49: Docker for PHP Developers (NomadPHP)

Docker Links

• Allowscontainersto‘see’eachotheroverthenetwork•  Eachcontainerthinkstheotheroneisjustanothermachine• Containersallhaveaninternalnetworkaddress,sowedon’tneedtoexposeeverythingthroughthehost• Currentlyonlyworksifallthecontainersareononemachine,Docker1.10shouldfixthat

NomadPHPEUApril2016 49

Page 50: Docker for PHP Developers (NomadPHP)

More Traditional Setup

NomadPHPEUApril2016 50

INTARWEBS Nginx PHP-FPM

DataVolume

Port9000

Editor

Page 51: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 51

Page 52: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 52

Page 53: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 53

Page 54: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 54

Page 55: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 55

Page 56: Docker for PHP Developers (NomadPHP)

Let’s Build It

NomadPHPEUApril2016 56

Page 57: Docker for PHP Developers (NomadPHP)

More Notes!

• WecannowrebuildsecXonsoftheappasneeded• WecanrestartnginxwithoutimpacXngPHP• Wecanextendmucheasier

•  Linkedcontainerswillnotupdateiftheyarestopped/started•  IfweupgradePHP,wehavetodestroy/createtheweb_servercontaineragain

NomadPHPEUApril2016 57

Page 58: Docker for PHP Developers (NomadPHP)

Creating your own Images

NomadPHPEUApril2016 58

Page 59: Docker for PHP Developers (NomadPHP)

Dockerfile

• DockerfileistheconfiguraXonstepsforanimage• Canbecreatedfromscratch,orbasedonanotherimage• Allowsyoutoaddfiles,createdefaultvolumes,ports,etc• CanbeusedprivatelyorpushedtoDockerHub

NomadPHPEUApril2016 59

Page 60: Docker for PHP Developers (NomadPHP)

FROMphusion/baseimage:0.9.10#…CMD["/sbin/my_init"]#Nginx-PHPInstallationRUNapt-getupdateRUNapt-getinstall-yvimgitcurlwgetbuild-essentialpython-software-properties\

php5-cliphp5-fpmphp5-mysqlphp5-pgsqlphp5-sqlitephp5-curl\ php5-gdphp5-mcryptphp5-intlphp5-imapphp5-tidymysql-client

#…RUNmkdir/var/wwwADDbuild/default/etc/nginx/sites-available/default#…EXPOSE8022VOLUME/var/wwwVOLUME/etc/nginxVOLUME/etc/php/VOLUME/var/logRUNapt-getclean&&rm-rf/var/lib/apt/lists/*/tmp/*/var/tmp/*

NomadPHPEUApril2016 60

Page 61: Docker for PHP Developers (NomadPHP)

Build it

dockerbuild-ttag_name./

•  ThisrunsthroughtheDockerfileandgeneratestheimage• Wecannowusethetagnametoruntheimage

NomadPHPEUApril2016 61

Page 62: Docker for PHP Developers (NomadPHP)

Other Helpful Commands

NomadPHPEUApril2016 62

Page 63: Docker for PHP Developers (NomadPHP)

Inspect a container

dockerinspect[opXons]CONTAINER_NAME

• ReturnsaJSONstringwithdataaboutthecontainer• Canalsoquery

•  dockerinspect-f“{{.NetworkSe{ngs.IPAddres}}”web_server

• ReallyhandyforscripXngoutthingslikereverseproxies

NomadPHPEUApril2016 63

Page 64: Docker for PHP Developers (NomadPHP)

Work with images

• dockerpullIMAGE–Pullsdownanimagebeforeusing• dockerimages–Listsalltheimagesthataredownloaded• dockerrmiIMAGE–Deletesanimageifit’snotbeingused

NomadPHPEUApril2016 64

Page 65: Docker for PHP Developers (NomadPHP)

Docker Machine

NomadPHPEUApril2016 65

Page 66: Docker for PHP Developers (NomadPHP)

What is Docker Machine?

• AprovisioningtoolthatisusedtosetupaboxwithDocker• UsedinDockerToolboxtocreatetheVM•  Supports:

•  EC2•  Azure•  DigitalOcean•  Hyper-V•  OpenStack•  Virtualbox•  VMWare

NomadPHPEUApril2016 66

Page 67: Docker for PHP Developers (NomadPHP)

Why use it?

• Makesitveryeasytospinupnewboxes• DockerMachinehandlesallofthedirtystuffforyou• DockerToolboxusersarealreadyusingit•  IntegrateswithDockerSwarm

•  Itisnotnecessarilyportable

NomadPHPEUApril2016 67

Page 68: Docker for PHP Developers (NomadPHP)

Docker Swarm

NomadPHPEUApril2016 68

Page 69: Docker for PHP Developers (NomadPHP)

What is Docker Swarm?

• ClustermanagementtooldevelopedbyDocker•  Lookslikeamachinerunningdocker,butisactuallymanymachines

NomadPHPEUApril2016 69

Page 70: Docker for PHP Developers (NomadPHP)

Docker Compose

NomadPHPEUApril2016 70

Page 71: Docker for PHP Developers (NomadPHP)

What is Docker Compose?

• MulX-containerorchestraXon• Asingleconfigfileholdsallofyourcontainerinfo• WorkswithDockerSwarmandafewothertools,likeRancher

NomadPHPEUApril2016 71

Page 72: Docker for PHP Developers (NomadPHP)

Sample docker-compose.yml phpserver:build:./docker/phpvolumes:-/home/ctankersley/Projects/dockerfordevs:/var/www/links:-mysqlservermysqlserver:image:mysqlenvironment:MYSQL_DATABASE:dockerfordevsMYSQL_ROOT_PASSWORD:dockervolumes:-/var/lib/mysqlnginx:build:./docker/nginxports:-"80:80"-"443:443"links:-phpserver

NomadPHPEUApril2016 72

Page 73: Docker for PHP Developers (NomadPHP)

Deploying

NomadPHPEUApril2016 73

Page 74: Docker for PHP Developers (NomadPHP)

I can’t answer this for you

NomadPHPEUApril2016 74

¯\_(ツ)_/¯

Page 75: Docker for PHP Developers (NomadPHP)

Questions?

NomadPHPEUApril2016 75

Page 76: Docker for PHP Developers (NomadPHP)

Each situation is different

•  Youwillprobablybuildsomethingcustom,usingexisXngtools• Doyouusedatavolumes?• DoyoujustpackagetheenXrecompiledapp?• Doesitneedtobedistributed?•  IsitgoingonSwarm,orAmazonECS?

NomadPHPEUApril2016 76

Page 77: Docker for PHP Developers (NomadPHP)

Things to consider

• DockerComposewillonlydeployanapptooneserver• DockerSwarmispreJylow-levelandbare-bones• VolumesonSwarmcannotbesharedacrosshosts• HostmounXngis99.99999%oftheXmenotwhatyouwanttodo

NomadPHPEUApril2016 77

Page 78: Docker for PHP Developers (NomadPHP)

Rancher is a good start

• ProvidesaniceGUItomanageeverything• Allowsvolumesharingandnetworkingacrosshosts• Workswithdocker-compose.ymlfiles

•  Thesefilescanbesupplementedwithenvironmentvariables

NomadPHPEUApril2016 78

Page 79: Docker for PHP Developers (NomadPHP)

Rancher in action

NomadPHPEUApril2016 79

Page 80: Docker for PHP Developers (NomadPHP)

Questions?

NomadPHPEUApril2016 80

Page 81: Docker for PHP Developers (NomadPHP)

http://ctankersley.com [email protected]

@dragonmantank

https://joind.in/talk/42cba

NomadPHPEUApril2016 81