Docker

Docker, du Hello world à l’environnement de dev complet

 

Aix/Marseille, le 02/03/2017.

#who

#docker
#user-story
#going-to-prod

#who

#devops

#containers

#automatisation

#nicolas sias

#lead dev

#devops

Docker

On vous rafraîchît la mémoire ?

C'est quoi donc ?

#MmeMichue « Docker est un logiciel libre qui automatise le déploiement d'applications dans des conteneurs logiciels »

 

#tech « Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur Linux »

 

#maison « Docker permet aux devs de se concentrer sur le fonctionnel et aux ops de faire la plomberie nécessaire »

Cas d'usage

  • Tests
    • unitaires
    • fonctionnels
    • charge
    • A/B
  • Déploiements green/blue
  • Abstraction
    • du réseau
    • du stockage
    • des ressources
  • Capacity planning …

La matrice de l'enfer

La matrice du paradis ?

Transformer ça ...

... en ça

Cattle vs Pets

  • Durée de vie courte
  • Stateless
  • Reproductible
  • Transportable

Gains

  • Reproductibilité
  • Automatisation
  • Infrastructure as code
  • Découplage
  • Financiers

REX

De la réalité à l’environnement de dev

Technologies utilisées

  • PHP
  • MySQL
  • Apache / Nginx
  • Memcache
  • Nodejs
  • Elastic Search
  • Editeur: Phpstorm, Sublime ...
  • ...

Plateforme Mutualisée

Vue Globale

  • Dépendant de la localisation
  • Très rigide
  • Lent à évoluer
  • Saturation du réseau
  • Représentation simpliste de la prod
  • Blocage si maintenance ou panne

Plateforme Mutualisée

Les défauts

 

Bref ...

  • WAMP / LAMP local
  • Machine Virtuelle maison
  • Vagrant
  • Docker

Plateforme Embarquée

Solutions envisagées

  • Importante montée en compétence
  • Compliquée à industrialiser
  • Compliquée à partager

Plateforme Embarquée

Vagrant

Plateforme Embarquée

Docker

  • Assez Facile à construire
  • Facile à modifier
  • Facile à partager
  • Satisfait les objectifs
    • Efficacité
    • Performance
    • Mobilité
    • Disponibilité
  • Industrialisable
  • Très proche de la production

Plateforme Embarquée

Docker - Avantages

  • Montée en compétence non négligeable
  • Docker Windows et Mac
    • Non Natif
    • Virtualbox par défaut
  • Comportement différent Linux / OSX / Windows
  • Cloud impossible
  • App Docker for Mac n'est pas prête
    • Performance
    • UID/GID

Plateforme Embarquée

Docker - Inconvénients

  • Test collaboratif
  • Connexion Wifi
  • Gestion des Assets
  • Gestion de la base de données
  • Performance / Virtualisation

Plateforme Embarquée

Docker - TODO

Démo Time

Du Dev aux bonnes pratiques ?

On le déploie en prod ?

Bonnes Pratiques

Production Ready

#1 - Atomicité des rôles

Règle d'or

  • 1 fonction = 1 container !
  • C'est bien
    • Scaling
    • Réutilisabilité
    • Tolérance aux pannes
    • Orchestration
    • Plus simple à appréhender

#2 - Be Social

  • Réutilisez les images officiels
  • Réutilisez les images de la communauté
  • Sauf si
    • Vous packagez votre propre app
    • Vous avez un besoin spécifique
  • Dans ce cas
    • Pensez héritage
    • Pensez upstream
    • Partagez votre build

#3 - Be a tagger

  • Git + Docker = love story
  • Versionnez tout
  • Tags latest / stable / dev

#4 - Config Dynamique

Runtime Config

  • Configurer vos services en utilisant des variables
  • Système de templates si besoin
  • Vault / Jenkins / Gitlab / Drone / GoCd ?
  • Rebuilder une image ssi
    • changement de code
    • changement de version

#5 - Les volumes

Identifier la donnée

  • Identifiez vos volumes dans les Dockerfile
  • Rien à changer au code
  • Bannir les mountpoints (so 2016)
  • En dev = driver local
  • En prod = un stockage résilient et backupé (SAN/NAS/OS)
  • "storage is hard" Brian Goff DC16

#6 - Taille des images

Size does matters folks !

Réduction

  • Utiliser des images de base simples
  • Supprimer fichiers inutiles
    • cache
    • docs
    • sources
    • fichiers temporaires
  • 1 fonction = 1 container

Comment ça marche ?

#7 - pensez scaling

Là où la magie opère ...

1, 2, 3 ... N !

  • Une instance va être répété N fois
  • Distribution de l’état
  • Systèmes distribués
    • BDD
    • Stockage
    • compute, etc...
version: '2'
services:

  dev:
    image: mailhog/mailhog:latest
    environment:    
      - MH_HOSTNAME
      - MH_API_BIND_ADDR
      - MH_UI_BIND_ADDR
      - MH_SMTP_BIND_ADDR
      - MH_STORAGE
      - MH_MAILDIR_PATH
    ports:
      - 1025
      - 8025
    volumes:
      - mailhogdata:/data/mailhog/
    entrypoint: MailHog -auth-file=/data/mailhog/auth

volumes:
  mailhogdata:
    external: true

Workflows

Conclusion

Questions

Frederic

@webofmars

Nicolas

contact@nicolas-sias.com

meetup-docker-2017-03-02

By Frederic Leger / webofmars

meetup-docker-2017-03-02

slides for AIx-Marseille docker meetup (02/03/2017)

  • 1,489