:: @YaJUG
Des containers de la cale au pont
Nicolas MULLER
13 ans de BTP
Membre MARSJUG
Membre LAB-AIXpérimentation
Plan de la soirée
Once upon a time...
Installation + distribution
Interconnexion de containers
Live demos
Tomcat dream architecture
Docker compose
Docker machine
Feedback
Docker :: Qui a déjà joué avec ?
About Docker
Fondé en 2009
Précédemment DotCloud
Docker in 2015
Deux levées de fonds
Pourquoi Docker ?
L’industrie logiciel a changé
Fin des grosses applications monolithiques
Micro-services
Processus de déploiement
Key Rules
Design based on Unix principles for
composability and simplicity
Emphase the ecosystem
Do what’s best for user
Un problème toujours vrai en 2015
La matrice de l’enfer
Logistique
Architecture
Docker engine
Docker client
Architecture REST
Protocole HTTP(s)
Ecrit en GO
Docker :: Containers
Virtualisation d’environnement d’exécution
Processeurs
Mémoire vive
Réseau
Système de fichiers
Contraire de la virtualisation de machine
Full virtualization
Host hardware
Host OS
Hypervisor
Guest OS
virt.
App1
App2
App3
App1
App2
App3
Guest OS
virt.
VMDocker
containers
Host hardware
DockerEngine
App1
App2
App3
App4
App5
container
Comparaison
Kernel
And the winner is...
Great isolation but overhead
Less isolation but less overhead
Conclusion
What does it hide ?
Technologies sous-jacentes
CHROOT
LXC
CGROUPS
Namespace
Previously :: JAILS / DZONE
Docker vs OpenVZ
Architecture
Docker sees a container as a
application/service
OpenVZ sees a container as a VPS
OpenVZ
Template for empty linux machine
Patched linux kernel
Des processus avec des guirlandes
:: installation
Installation dev
Linux native
Docker Toolbox
Windows + Mac
Toute petite VM (25 Mo)
Installation production
Linux classique
debian
ubuntu
centos
Distribution dédiée
Projet Atomic
CoreOS
Rancher OS
:: Images
Programmation Orientée objet
Les images sont des classes
Les containers sont les objets
La couche reprend le concept d’héritage
Qu’est ce qu’une image ?
Différences entre images et containers
Une image est créé :
à partir d’un dockerfile
à partir d’un commit d’un container
Une image est un système de fichier en lecture seule
Un container est un ensemble de processus tournant
dans un système de fichier en lecture/écriture
Docker utilise le principe du COW pour démarrer très vite
les containers
:: Dockerfile
Dockerfile exemple
Liste des commandes
FROM
MAINTENER
RUN
CMD
EXPOSE
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
ENV
Builder son image
Pour builder l’image
docker build -t demojug/tomcat .
Pour lancer un container à partir de l’image
docker run -d demojug/tomcat
docker run -it demojug/tomcat bash
Best practices
Eviter d’installer trop de chose
Au mieux un processus par container
Minimiser le nombre de couches
Utiliser .dockerignore
Depuis peu, utilisez les LABEL
NO UPGRADE / NO BOOT INIT
DIVISEZ POUR REGNER
Utilisez vos propres images !
:: Commands
Liste des images
Recherche des images
Quelques commandes
docker run -d jpetazzo/clock
docker ps
docker ps -lq
docker logs --tail 3 <containerId>
docker logs --tail 1 --follow <containerId>
docker kill $(docker ps -a -q)
docker rmi $(docker images -q)
Télécharger des images
Explicitement : docker pull
Implicitement : docker run
:: volumes
:: network
Isolation by design
each container runs isolated
Container WEB Container DB
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
Container WEB Container DB
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
8080 exposé 3306 exposé
+ Dockerfile : EXPOSE <port>
+ docker run … p <port>
Exposition ports
Lien entre containers
Container WEB Container ‘db’
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
ENV VARIABLE
DBALIAS_PORT
DBALIAS_ADDR
DBALIAS_TCP
DBALIAS_PROTO
…
...
Exemple : Docker run … -link db:dbalias
LINK
Mapping de ports
Container WEB Container ‘db’
TOMCAT 8080 MYSQL 3306
Bridge docker0
Hôte
IP_INTERFACE
Réseau externe
docker run … -p 80:8080
Options :: réseau
docker run … -- net = bridge
docker run … -- net = host
docker run … -- net = CONTAINER_ID
docker run … -- net = none
:: Cycle de vie
Host 2 OS
Docker EngineDocker Engine
Host 1 OS
Source
code
repository
ContA
Build
Push
Search
Pull
Run
Dockerfile
for A
Docker
image
registry
Image
A
CRÉATION, GESTION ET
DEPLOIEMENT
Système de cache
RUN apt-get install -y curl wget
RUN apt-get install -y wget curl
RUN apt-get update
ADD / COPY
docker build --no-cache ...
:: plus loin
Docker :: everywhere
Windows Server
Container Support
Docker Engine
Linux Container
Support (LXC)
Docker Engine
Windows Server Linux
Docker Client
Chrome in Docker
https://github.com/jpetazzo/dind
Dev / Test
Utiliser une CI pour construire les images
Utiliser les containers pour
Jouer les tests unitaires
Recréer l’environnement d’intégration pour les tests
Bénéfices
Avoir la garantie d’un environnement propre
à chaque lancement des tests
Avoir la possibilité de jouer toute l’intégration dans un
seul container
:: limites
Limites :: production
Images building
Garbage collection
Logging
Filesystems
Security
Image layer and transportation
:: Compose
Multi-container application into a single file
Where to use it ?
docker-compose [command] --help
mysqldb:
image: mysql:latest
environment:
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_DATABASE: petclinic
MYSQL_ROOT_PASSWORD: supersecret
volumes:
- datadir:/var/lib/mysql
mytomcat:
build: tomcat8
environment:
CATALINA_OPTS: "-Xmx1024m"
volumes:
- webapps:/tomcat/webapps
links:
- mysqldb:webdb
ports:
- 8080:8080
docker-compose.yml
Commands
up with daemon
stop / start
logs
:: Tomcat
Images Tomcat
https://registry.hub.docker.com/search?q=tomc
at&searchfield=
https://github.com/rossbachp/dockerbox/tree/m
aster/docker-images/tomcat8
:: Machine
Créer une machine locale
Commandes
:: Swarm
Utiliser swarm avec machine
docker run swarm create
5b7220ee08396d85d08dd9516946b226
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery
token://5b7220ee08396d85d08dd9516946b226 head
docker-machine create -d digitalocean --swarm --swarm-discovery
token://31e61710169a7d3568502b0e9fb09d66 worker-00
docker-machine create -d azure --swarm --swarm-discovery
token://31e61710169a7d3568502b0e9fb09d66 worker-01
$(docker-machine env --swarm head)
docker info
:: RancherOS
Merci

Docker - YaJUG

Notes de l'éditeur

  • #63 Developpment Staging CI Not production at this day
  • #64 Start, stop and rebuild services View the status of running services Stream the log output of running services Run a one-off command on a service