run magento 2 on docker swarm · 2019. 10. 23. · application=../magento development=1. first:...

59
Run Magento 2 on Docker Swarm Photo by Vidar Nordli-Mathisen on Unsplash Ike Devolder / @BlackIkeEagle / @studioemma

Upload: others

Post on 27-Sep-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Run Magento 2on Docker Swarm

Photo by Vidar Nordli-Mathisen on Unsplash

Ike Devolder / @BlackIkeEagle / @studioemma

Page 2: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Who uses docker for development?

Photo by Olaf on Pixabay

Page 3: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

AnyoneRunning

Magento 2on

Kubernetes?

Photo by Monika Neumann on Pixabay

Page 4: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

AnyoneRunning

Magento 2on

Kubernetes?

Photo by Monika Neumann on Pixabay

Nothing tosee here

Page 5: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Only Docker and Docker Swarm

Photo by Helmut Jungclaus on Pixabay

Page 6: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Hi,

I’m Ike,@BlackIkeEagle on Twitter

Developer / Operationsat Studio Emma

Page 7: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Silver solution partner Gold solution partner

Page 8: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

Page 9: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

version: '3'services: redis: image: redis:alpine environment: - DOMAIN_NAME=redis.${BASEHOST:-magento.docker}

mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-toor} - DOMAIN_NAME=mysql.${BASEHOST:-magento.docker} command: --innodb-doublewrite=0

mailcatcher: image: schickling/mailcatcher environment: - DOMAIN_NAME=mailcatcher.${BASEHOST:-magento.docker}

application: image: dockerwest/php-magento${MAGENTOVERSION}:${PHPVERSION:-7.0} environment: - C_UID=${C_UID:-1000} - C_GID=${G_UID:-1000} - DEVELOPMENT=${DEVELOPMENT:-1} volumes: - ${APPLICATION:-../magento}:/phpapp

nginx: image: dockerwest/nginx-magento${MAGENTOVERSION}:${NGINXVERSION:-stable} environment: - VIRTUAL_HOST=${BASEHOST:-magento.docker},${EXTRAHOSTS} volumes: - ${APPLICATION:-../magento}:/phpapp

Page 10: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

version: '3'services: redis: image: redis:alpine environment: - DOMAIN_NAME=redis.${BASEHOST:-magento.docker}

mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-toor} - DOMAIN_NAME=mysql.${BASEHOST:-magento.docker} command: --innodb-doublewrite=0

mailcatcher: image: schickling/mailcatcher environment: - DOMAIN_NAME=mailcatcher.${BASEHOST:-magento.docker}

application: image: dockerwest/php-magento${MAGENTOVERSION}:${PHPVERSION:-7.0} environment: - C_UID=${C_UID:-1000} - C_GID=${G_UID:-1000} - DEVELOPMENT=${DEVELOPMENT:-1} volumes: - ${APPLICATION:-../magento}:/phpapp

nginx: image: dockerwest/nginx-magento${MAGENTOVERSION}:${NGINXVERSION:-stable} environment: - VIRTUAL_HOST=${BASEHOST:-magento.docker},${EXTRAHOSTS} volumes: - ${APPLICATION:-../magento}:/phpapp

Page 11: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

version: '3'services: redis: image: redis:alpine environment: - DOMAIN_NAME=redis.${BASEHOST:-magento.docker}

mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-toor} - DOMAIN_NAME=mysql.${BASEHOST:-magento.docker} command: --innodb-doublewrite=0

mailcatcher: image: schickling/mailcatcher environment: - DOMAIN_NAME=mailcatcher.${BASEHOST:-magento.docker}

application: image: dockerwest/php-magento${MAGENTOVERSION}:${PHPVERSION:-7.0} environment: - C_UID=${C_UID:-1000} - C_GID=${G_UID:-1000} - DEVELOPMENT=${DEVELOPMENT:-1} volumes: - ${APPLICATION:-../magento}:/phpapp

nginx: image: dockerwest/nginx-magento${MAGENTOVERSION}:${NGINXVERSION:-stable} environment: - VIRTUAL_HOST=${BASEHOST:-magento.docker},${EXTRAHOSTS} volumes: - ${APPLICATION:-../magento}:/phpapp

C_UID=1000C_GID=1000

PHPVERSION=7.0

NGINXVERSION=stable

MAGENTOVERSION=2

BASEHOST=magento.dockerEXTRAHOSTS=www.magento.docker

MYSQL_ROOT_PASSWORD=toor

APPLICATION=../magento

DEVELOPMENT=1

Page 12: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

Page 13: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

First: Magento 2 development on docker

Photo by Tobias A. Müller on Unsplash

Page 14: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Second: Docker Swarm

Photo by 12019 on Pixabay

Page 15: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Second: Docker Swarm

Photo by 12019 on Pixabay

Node Node Node Node

Page 16: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Second: Docker Swarm

Photo by 12019 on Pixabay

Node Node Node Node

Stack

Page 17: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Second: Docker Swarm

Photo by 12019 on Pixabay

Node Node Node Node

Stack

Service Service

Page 18: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Second: Docker Swarm

Photo by 12019 on Pixabay

Node Node Node Node

Stack

Service Service

Task Task Task

Page 19: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

Page 20: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

$ sudo apk add docker$ sudo rc-update add docker default

Docker

Page 21: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

$ sudo apk add docker$ sudo rc-update add docker default

$ sudo apt-get install docker-ce$ sudo systemctl enable docker.service

Docker

Page 22: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

$ sudo apk add docker$ sudo rc-update add docker default

$ sudo apt-get install docker-ce$ sudo systemctl enable docker.service

$ sudo yum install docker-ce$ sudo systemctl enable docker.service

Docker

Page 23: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

[ -d client-cert ] && rm -r client-cert[ -d server-cert ] && rm -r server-cert

mkdir -p client-certdocker run --user=$(id -u) --rm -v $(pwd)/client-cert:/certs paulczar/omgwtfssl

mkdir -p server-certcp client-cert/ca.pem server-cert/docker run --user=$(id -u) --rm -v $(pwd)/server-cert:/server \ -v $(pwd)/client-cert:/certs \ -e SSL_IP=127.0.0.1,192.168.250.31,192.168.250.32 \ -e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \ -e SSL_CERT=/server/cert.pem paulczar/omgwtfssl

docker_server_args= \ "-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375” \ “--tlsverify --tlscacert=/etc/docker/ssl/ca.pem “ \ “--tlscert=/etc/docker/ssl/cert.pem” \ “--tlskey=/etc/docker/ssl/key.pem"

Secure communication

Page 24: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

[ -d client-cert ] && rm -r client-cert[ -d server-cert ] && rm -r server-cert

mkdir -p client-certdocker run --user=$(id -u) --rm -v $(pwd)/client-cert:/certs paulczar/omgwtfssl

mkdir -p server-certcp client-cert/ca.pem server-cert/docker run --user=$(id -u) --rm -v $(pwd)/server-cert:/server \ -v $(pwd)/client-cert:/certs \ -e SSL_IP=127.0.0.1,192.168.250.31,192.168.250.32 \ -e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \ -e SSL_CERT=/server/cert.pem paulczar/omgwtfssl

docker_server_args= \ "-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375” \ “--tlsverify --tlscacert=/etc/docker/ssl/ca.pem “ \ “--tlscert=/etc/docker/ssl/cert.pem” \ “--tlskey=/etc/docker/ssl/key.pem"

Secure communication

export DOCKER_HOST=tcp://192.168.250.31:2375export DOCKER_CERT_PATH=$(pwd)/client-certexport DOCKER_TLS_VERIFY=1

Page 25: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup

Photo by Kyle Ryan on Unsplash

Initialize Swarm

$ sudo docker swarm init --advertise-addr=192.168.250.31$ managertoken=$(docker swarm join-token -q manager)$ sudo docker swarm join --token $managertoken 192.168.250.31$ workertoken=$(docker swarm join-token -q worker)$ sudo docker swarm join --token $workertoken 192.168.250.31

Page 26: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Demo

Photo by Wolfgang Appel on Pixabay

Page 27: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup Extras Persistent Storage

Photo by Karsten Bergmann on Pixabay

Nfs, cephs, gluster, ...

Page 28: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup Extras Visualization

Photo by Karsten Bergmann on Pixabay

swarm visualizer portainer

Page 29: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup Extras Logging

Photo by Karsten Bergmann on Pixabay

rsyslog, elk, ...

Page 30: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup Extras Monitoring

Photo by Karsten Bergmann on Pixabay

ELK, zabbix, prometheus + grafana, ...

Page 31: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Third: Docker Swarm setup Extras Proxy (Handle multiple apps)

Photo by Karsten Bergmann on Pixabay

haproxy, nginx, traefik, ...

Page 32: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Demo

Photo by Wolfgang Appel on Pixabay

Page 33: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Page 34: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

– webserver (nginx)– php (php-fpm)– cache (redis)– db (mysql)– cron

Requirements

Page 35: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Production grade images

FROM dockerwest/nginx-magento2:mainline

COPY ./pub /phpapp/pubRUN rm -rf /phpapp/pub/media/* && chown -R nginx:nginx /phpapp/pub

Page 36: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Production grade images

FROM dockerwest/php-magento2:7.1

COPY ./entrypoint.sh /COPY ./go-cron /usr/local/binCOPY ./ /phpapp/RUN rm -rf /phpapp/var/* && rm -rf /phpapp/pub/media/* \ && rm -rf /phpapp/update && rm -rf /phpapp/phpserver && rm -rf /phpapp/dev \ && rm -f /phpapp/app/etc/env.php \ && chown -R www-data:www-data /phpapp

ENTRYPOINT ["/entrypoint.sh"]CMD ["php-fpm7.1"]

Page 37: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Production grade images

FROM dockerwest/php-magento2:7.1

COPY ./entrypoint.sh /COPY ./go-cron /usr/local/binCOPY ./ /phpapp/RUN rm -rf /phpapp/var/* && rm -rf /phpapp/pub/media/* \ && rm -rf /phpapp/update && rm -rf /phpapp/phpserver && rm -rf /phpapp/dev \ && rm -f /phpapp/app/etc/env.php \ && chown -R www-data:www-data /phpapp

ENTRYPOINT ["/entrypoint.sh"]CMD ["php-fpm7.1"]

#!/bin/shset -e

if [ "${CRON}" ]; then exec /command.sh go-cron -s "${CRON}" -- "$@"else exec /command.sh "$@"fi

Page 38: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Prepare data for prodcution

– initial media– prepared db

Page 39: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Initial production preparation

– create volumes– set proper permissions– set initial media– import db– set proper configuration

Page 40: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

version: '3.3'

networks: default: ipam: config: - subnet: 10.110.3.0/24 traefik_webproxy: external: true

Page 41: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

version: '3.3'

networks: default: ipam: config: - subnet: 10.110.3.0/24 traefik_webproxy: external: true

volumes: redis: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/redis" mysql: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/mysql" magento_var: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/var" magento_media: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/media"

Page 42: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

version: '3.3'

networks: default: ipam: config: - subnet: 10.110.3.0/24 traefik_webproxy: external: true

volumes: redis: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/redis" mysql: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/mysql" magento_var: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/var" magento_media: driver: local driver_opts: type: nfs o: addr=192.168.250.21,rw device: ":/srv/storage/magento2/media"configs:

magento_config: file: ./env.php

Page 43: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

services: redis: image: redis:alpine volumes: - type: volume source: redis target: /data volume: nocopy: true logging: driver: syslog options: tag: magento-redis syslog-address: "tcp://192.168.250.21:514"

Page 44: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

services: redis: image: redis:alpine volumes: - type: volume source: redis target: /data volume: nocopy: true logging: driver: syslog options: tag: magento-redis syslog-address: "tcp://192.168.250.21:514"

mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=toor command: --innodb-doublewrite=0 volumes: - type: volume source: mysql target: /var/lib/mysql volume: nocopy: true logging: driver: syslog options: tag: magento-mysql syslog-address: "tcp://192.168.250.21:514" deploy: placement: constraints: [node.role == manager]

Page 45: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

application: image: blackikeeagle/swarm-magento2-demo-php:0.0.2 environment: - DEVELOPMENT=noprofile # we want to use mailcatcher in the demo volumes: - type: volume source: magento_var target: /phpapp/var volume: nocopy: true - type: volume source: magento_media target: /phpapp/pub/media volume: nocopy: true configs: - source: magento_config target: /phpapp/app/etc/env.php logging: driver: syslog options: tag: magento-application syslog-address: "tcp://192.168.250.21:514" deploy: replicas: 2

Page 46: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Fourth: Magento 2 on Swarm

Photo by Lemzo on Pixabay

Up and running

nginx: image: blackikeeagle/swarm-magento2-demo-nginx:0.0.2 volumes: - type: volume source: magento_media target: /phpapp/pub/media volume: nocopy: true networks: - default - traefik_webproxy logging: driver: syslog options: tag: magento-nginx syslog-address: "tcp://192.168.250.21:514" deploy: labels: # tell traefik to route to the container - "traefik.enable=true" # a name for this application in traefik, must be unique - "traefik.backend=magento2" # hostnames to route to this container (and retrieve ssl certs for) - "traefik.frontend.rule=Host:magento2-demo.test" # network this container is attached to (global name) - "traefik.docker.network=traefik_webproxy" # port this container listens on - "traefik.port=80"

Page 47: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Demo

Photo by Wolfgang Appel on Pixabay

Page 48: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Lemzo on Pixabay

Extras

Page 49: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Lemzo on Pixabay

Extras Cron

cron: image: blackikeeagle/swarm-magento2-demo-php:0.0.2 environment: - DEVELOPMENT=noprofile # we want to use mailcatcher in the demo - "CRON=0 * * * * *" command: php bin/magento cron:run volumes: - type: volume source: magento_var target: /phpapp/var volume: nocopy: true - type: volume source: magento_media target: /phpapp/pub/media volume: nocopy: true configs: - source: magento_config target: /phpapp/app/etc/env.php logging: driver: syslog options: tag: magento-cron syslog-address: "tcp://192.168.250.21:514"

Page 50: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Lemzo on Pixabay

Extras Handling updates

application: image: blackikeeagle/swarm-magento2-demo-php:0.0.2 volumes: - type: volume source: magento_var target: /phpapp/var volume: nocopy: true - type: volume source: magento_media target: /phpapp/pub/media volume: nocopy: true configs: - source: magento_config target: /phpapp/app/etc/env.php logging: driver: syslog options: tag: magento-application syslog-address: "tcp://192.168.250.21:514" deploy: replicas: 2 update_config: parallelism: 1 # update per 1 running containers delay: 10s # wait for 10s healthy status before continuing

Page 51: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Lemzo on Pixabay

Extras Handling updates

#!/usr/bin/env bash

currentversion=$(cat /phpapp/var/.version)updatedfile="/phpapp/var/update/updated-$currentversion"

if [[ ! -e "$updatedfile" ]] && [[ -e "/run/php/.checkfpm" ]] ; then

set -e

cd /phpapp gosu www-data php bin/magento setup:upgrade --keep-generated gosu www-data php bin/magento indexer:reindex gosu www-data php bin/magento setup:cron:run gosu www-data php bin/magento c:f

gosu www-data touch "$updatedfile"fi

Page 52: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Lemzo on Pixabay

Extras Mail

msmtp, mhsendmail, ...

Page 53: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Viola on Pixabay

Pro

– Easy to setup– docker-compose swarm is a small step→

– great management tools available– very easy to maintain

Con

– Not all batteries included– no “Cron” functionality built in– no “One-off” functionality built in– no auto re-balance

Page 54: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Photo by Viola on Pixabay

It’s not because you can run mysql containerized, you should do thatKeep track of your storage, you will end up with a full disk eventuallySwarm does not have autoscaling, (out of the box)Magento logging should be centralized in ELK

Page 55: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

We can run Magento 2 on Docker Swarm

Photo by Bishnu Sarangi on Pixabay

Page 56: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

We can run Magento 2 on Docker Swarm

Photo by Bishnu Sarangi on Pixabay

Page 57: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Questions?

I’m Ike, Developer / Operationsat

@BlackIkeEagle BlackIkeEagle

Studio Emma

Archlinux TUDockerWest VdebugParchive herecura.eu

PHP-WVL

Page 58: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Thanks

I’m Ike, Developer / Operationsat

@BlackIkeEagle BlackIkeEagle

Studio Emma

Archlinux TUDockerWest VdebugParchive herecura.eu

PHP-WVL

https://joind.in/talk/6a1af

Page 59: Run Magento 2 on Docker Swarm · 2019. 10. 23. · APPLICATION=../magento DEVELOPMENT=1. First: Magento 2 development on docker Photo by Tobias A. Müller on Unsplash. First: Magento

Links

https://github.com/BlackIkeEagle/alpine-swarm

https://github.com/BlackIkeEagle/swarm-sample-magento2

Vagrant multi node swarm (alpine based just for fun)

Magento 2 demo with some docker image building