Docker in azione: come e perché usarlo in produzione con Rancher
ECCENTRIC DEVELOPER
Oscar Fanelli
Full-stack developer
Zend Framework
Doctrine
ReactJS
Tom's Hardware
Docker
PhpStorm
(sul serio, vi basta cercare "Oscar Fanelli", sanno anche quando vado a fare la cacca)
ECCENTRIC DEVELOPER
Luca Mattivi
.NET Developer
Full-stack Developer
Laravel
AngularJS
Uala CTO
Docker
IoT
Problematiche a cui Docker ha risposto
MAMP
- Pronto all'uso in pochi minuti
- E se Mysql non ci serve?
- Peso piuma?
- E se volessimo riprodurre l'ambiente di produzione in locale?
Brew
- Possibile configurare a piacimento i servizi
- E se volessimo una versione specifica di uno specifico servizio?
- E se volessimo riprodurre l'ambiente di produzione in locale?
- E se volessimo aggiornare OSX?
brew update && brew upgrade...
% /usr/local/bin/gpg1
dyld: Library not loaded: /usr/local/opt/libusb-compat/lib/libusb-0.1.4.dylib
Referenced from: /usr/local/bin/gpg1
Reason: image not found
[1] 41295 trace trap /usr/local/bin/gpg1
error: unable to unlink old '.gitignore' (Permission denied)
error: unable to create file .travis.yml (Permission denied)
error: unable to create file .yardopts (Permission denied)
error: unable to unlink old 'CODEOFCONDUCT.md' (Permission denied) ...
npm ERR! Darwin 13.3.0
npm ERR! argv "node" "/Users/user/.node/bin/npm" "update" "-g"
npm ERR! node v0.10.32
npm ERR! npm v2.0.0
npm ERR! code EPEERINVALID
npm ERR! peerinvalid The package npmconf does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer npm-registry-client@3.2.2 wants npmconf@^2.1.0
Vagrant
- Configurabile 100%
- Possibile riprodurre ambiente di produzione
- Veloce?
- Tempo necessario per mettere in piedi tutto?
devops...
Docker
- Containers
- Immagini
- Kernel condiviso
- No hypervisor (niente overhead)
- Performance migliori
- Utilizzo solo delle risorse necessarie
Docker
Dockerfile
- File di configurazione
- Contiene tutte le istruzioni necessarie per:
- Installare servizi
- Configurare servizi
- Esporre porte
- Facile da apprendere
- Mantenibile
- Estendibile
- Adatto anche ai più pretenziosi
FROM ubuntu:16.04
MAINTAINER Oscar Fanelli <oscar.fanelli@gmail.com>
ENV PROJECT_PATH=/var/www \
DEBIAN_FRONTEND=noninteractive
# Utilities, Apache, PHP, and supplementary programs
RUN apt-get update -q && apt-get upgrade && apt-get install -yqq --force-yes \
npm \
git \
wget \
apache2 \
libapache2-mod-php \
php \
php-curl \
php-mysql \
php-redis \
php-xml
# Apache mods
RUN a2enmod rewrite expires headers
# PHP.ini file: enable <? ?> tags and quiet logging
RUN sed -i "s/short_open_tag = .*/short_open_tag = On/" $PHP_INI && \
sed -i "s/memory_limit = .*/memory_limit = 256M/" $PHP_INI
# VirtualHost
COPY config/docker/apache-virtualhost.conf /etc/apache2/sites-available/000-default.conf
# Port to expose
EXPOSE 80
# Copy site into place
COPY . $PROJECT_PATH
WORKDIR $PROJECT_PATH
# Start apache
CMD /usr/sbin/apache2ctl -D FOREGROUND
Docker Compose
- Configuratore di più container
- Gestione di variabili d'ambiente
- Mount dei volumi
- Porte
- ...
version: '2'
services:
db:
image: mysql:5.7.17
volumes:
- "./.data/db:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: secret
expose:
- "3306"
redis:
image: redis
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- db
web:
build:
context: .
dockerfile: Dockerfile
volumes:
- ".:/var/www/"
depends_on:
- db
- redis
env_file: .env
USE CASE
Upgrade da PHP 5.6 a 7.0
Perchè Docker?
Docker
- Scalabilità
- Efficiente separazione dei servizi
- Portabilità
- Alta personalizzazione
alcuni numeri su Uala
- 4500 richieste / minuto
- 650 connessioni simultanee
- 70ms tempo risposta medio
- 30 servizi diversi erogati
AWS?
~10/12k € al mese
Private Cloud (con Rancher)
250 € al mese
Docker in locale
vs
Docker in produzione
Necessità
- Uptime garantito
- Performance
- Scalabilità
- Bilanciamento del carico
- Monitoring & Logging
- Routing (es: porta 80/443)
come semplificare?
Rancher
Cosa fa?
- Gestione dell'infrastruttura
- Connessione criptata tra gli host configurati
- Parallelizzazione dei container su più macchine
- Continuous deployment (grazie a Jenkins)
- Variabili d'ambiente
- Certificati (https)
Continuous Deployment:
Da GitHub a Rancher
TEST & BUILD
CODE & PUSH
PRIVATE REPOSITORY
DEPLOY & RUN
Deployment Flow
Per gli insulti
oscar.fanelli@gmail.com
@nesis
@pensiero
Oscar Fanelli
Luca Mattivi
luca@uala.it
@leen151
@leen15
Link utili
- slides.com/pensiero/docker-rancher-produzione
- rancher.com
- hub.docker.com/r/leen15
- hub.docker.com/r/pensiero
- github.com/pensiero/talk-commit-2017-demo-time
Docker in azione: come e perché usarlo in produzione con Rancher
By Oscar Fanelli
Docker in azione: come e perché usarlo in produzione con Rancher
- 2,011