ZEND SERVER IN DOCKER SWARM: DEPLOYMENT AND MORE€¦ · 2017-10-26  · ZEND SERVER IN DOCKER...

53
ZEND SERVER IN DOCKER SWARM: DEPLOYMENT AND MORE Jan Burkl Solution Consulting Manager , Las Vegas, October 26th 2017 Rogue Wave Software ZendCon 2017

Transcript of ZEND SERVER IN DOCKER SWARM: DEPLOYMENT AND MORE€¦ · 2017-10-26  · ZEND SERVER IN DOCKER...

ZENDSERVERINDOCKERSWARM:DEPLOYMENTANDMORE

JanBurklSolutionConsultingManager

,LasVegas,October26th2017

RogueWaveSoftware

ZendCon2017

DOCKER

DOCKERFILE(PROD)FROMphp:7.0-fpm

RUNapt-getupdate&&apt-getinstall-ygitlibcurl4-gnutls-devzlib1g-devlibicu-devg++libxml2-devlibpq-dev\&&gitclone-bphp7https://github.com/phpredis/phpredis.git/usr&&docker-php-ext-installredis\&&apt-getautoremove&&apt-getautoclean\&&rm-rf/var/lib/apt/lists/*

#-------------------------------------------------------------------------------#Appsources#-------------------------------------------------------------------------------COPY./app/

DOCKERFILE(DEV)FROMjanatzend/particulum-mobile-backend

WORKDIR/ADDhttp://www.zend.com/en/download/4843?start=true/zend-debuggerRUN\echozend_extension=/zend-debugger/ZendDebugger-linux-x86_64/php-7.0.x/ZendDebugger.so>>/usr/echozend_debugger.allow_from_all=1>>/usr/local/etc/php/php.ini

REDISCONTAINER$dockerrun-d--nameredisredis:3.2.7-alpine

PHPCONTAINER$dockerrun-d--namephp\-v"$PWD:/app"\--linkredis:redis\particulummobile-dev/backend

NGINXCONTAINER$dockerrun-d--namenginx\-v"$PWD:/app"\-v"$PWD/etc/nginx.site.conf:/etc/nginx/conf.d/default.conf"\--linkphp:php\-p8888:80\particulummobile-dev/backend-nginx

DOCKERCOMPOSE

version:"3"

services:

#-------------------------------------------------------------------------------#Nginx#-------------------------------------------------------------------------------nginx:build:context:"${PROJECTS_PATH}/${BACKEND_APP_DIR}"dockerfile:Dockerfile.nginximage:particulummobile-dev/backend-nginxvolumes:-"${PROJECTS_PATH}/${BACKEND_APP_DIR}/etc/nginx.site.conf:/etc/nginx/conf.d/default.conf"-"${PROJECTS_PATH}/${BACKEND_APP_DIR}:/app"networks:backend-net:

RUN$docker-composeup

$docker-compose-d-p$(PROJECT)-f$(DOCKER_COMPOSE_DEV_FILE

SCALING

LoadBalancer?

$docker-composeup-d--scalephp=5

$docker-composescalephp=5

DOCKERSWARM(MODE)“CurrentversionsofDockerinclude

swarmmodefornativelymanagingaclusterofDockerEnginescalleda

swarm.UsetheDockerCLItocreateaswarm,deployapplicationservicesto

aswarm,andmanageswarmbehavior.”

CLOUD.DOCKER.COMBetaServiceProviderAWSAzureOnPremise

PLAY-WITH-DOCKER.COM

MYLOCALSETUPVirtualBoxVagrant3NodesUbuntu16.04

INIT/MANAGER$dockerswarminit--advertise-addr192.168.99.121

Swarminitialized:currentnode(ww4nime7fbh9twrzzl7o2t31f)isnow

Toaddaworkertothisswarm,runthefollowingcommand:

dockerswarmjoin\--tokenSWMTKN-1-2aps743f7wzjz6xp3vnlicpkim9ge2ykwvxkmkg7mep9ou0ie7-0vm4vc0e1q6ggj5auorm4vixd\192.168.33.101:2377

Toaddamanagertothisswarm,run'dockerswarmjoin-tokenmanager'

NETWORKING

ROUTINGMESH“Theroutingmeshenableseachnode

intheswarmtoacceptconnectionsonpublishedportsforanyservice

runningintheswarm,evenifthere’snotaskrunningonthenode.”

INGRESSNETWORK

https://docs.docker.com/engine/swarm/ingress/

SERVICES

EXAMPLE:DOCKERSWARMVISUALIZER

https://github.com/dockersamples/docker-swarm-visualizer

CREATESERVICE

$dockerservicecreate\--name=viz\--publish=8080:8080/tcp\--constraint=node.role==manager\--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/dockerdockersamples/visualizer

BUILDINGIMAGES

MAKEFILE

CIAASCodehipWerckerCodefreshetc...

APPSERVICESDOCKERCOMPOSEV3

INSTALLANDUPDATE

$dockerstackdeploy--compose-filestack.ymlpm

ZENDSERVERhttps://github.com/5square/docker-zendserver

HELPERS/run.sh

source/shell_functions.rc

trap"remove_from_cluster;exit"SIGINTSIGTERMSIGHUP

WEBAPI./etc/shell_functions.rc

WEB_API_KEY=dockerWEB_API_SECRET=$(cat/webapi/secret)

ZS_MANAGE=/usr/local/zend/bin/zs-manage

CONFIGIMPORT(BUILDTIME)$ZS_CLIENT_AconfigurationImport\--configFile="/zs_config.zip"\--output-format="kv"

JOININGCLUSTER$ZS_MANAGEserver-add-to-cluster\-n$HOSTNAME\-i$IP\-o$DB_HOST:3306-u$DB_USER-p$DB_PASS-d$DB_NAME\-N$WEB_API_KEY-K$WEB_API_SECRET-s

LEAVINGCLUSTER$ZS_MANAGEcluster-disable-server\$SERVER_ID-N$WEB_API_KEY-K$WEB_API_SECRET-s

$ZS_MANAGEcluster-remove-server\$SERVER_ID-N$WEB_API_KEY-K$WEB_API_SECRET-f

SESSIONCLUSTERING

SESSIONCLUSTERING$ZS_MANAGEstore-directive\-d'session.save_handler'-v'cluster'\-N$WEB_API_KEY-K$WEB_API_SECRET

HEALTHCHECK$ZS_CLIENTclusterGetServerStatus\--servers=$(cat/usr/local/zend/etc/conf.d/ZendGlobalDirectives.ini|grepzend.node_id|awk-F--zsurl="http://localhost:10081"\--zskey=$WEB_API_KEY--zssecret=$WEB_API_SECRET\--output-format=kv\|grepstatus|grepOK||exit1

INGRESSNETWORK-UIISSUES

https://docs.docker.com/engine/swarm/ingress/

UPDATES

ZENDSERVERDEPLOYMENT?

UPDATE$dockerserviceupdatepm-zs_php--help

Usage: dockerserviceupdate[OPTIONS]SERVICE

Updateaservice

Options:--argscommandServicecommandargs--config-addconfigAddorupdateaconfigfileonaservice--config-rmlistRemoveaconfigurationfile--constraint-addlistAddorupdateaplacementconstraint--constraint-rmlistRemoveaconstraint--container-label-addlistAddorupdateacontainerlabel--container-label-rmlistRemoveacontainerlabelbyitskey--credential-speccredential-specCredentialspecformanagedserviceaccount(Windowsonly)-d,--detachExitimmediatelyinsteadofwaiting

UPDATE$dockerserviceupdatepm-zs_php\--imagejanatzend/particulum-mobile-backend-zendserver:update

OR...UI(PORTAINER)

BENEFITS

CONTAINERSSELF-CONTAINEDEverythinginVCSRunningineveryDockerenv

DOCKERCOMPOSEStackDeploymentviaYAMLfile

DANKESCHÖN

Slides:

Contactme:jan.burkl[at]roguewave.com

Followme:

bitbucket.org/account/user/5square-rw/projects/PM

5square.de/talks

@janatzend