des containers de la cale au pont · 2015-11-05 · des processus avec des guirlandes::...

Post on 07-Jun-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

:: @CNRSDes containers de la cale au pont

Nicolas MULLER

13 ans de BTPMembre MARSJUGMembre 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.

App

1

App

2

App

3

App

1

App

2

App

3

Guest OS

virt.

VMDocker containers

Host hardware

Doc

ker E

ngin

e

App

1

App

2

App

3

App

4

App

5container

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○ SSH

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 designeach 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_PORTDBALIAS_ADDRDBALIAS_TCP

DBALIAS_PROTO…...

Exemple : Docker run … -link db:dbalias

LINK

Mapping de ports

Container WEB Container ‘db’

TOMCAT 8080 MYSQL 3306

Bridge docker0

HôteIP_INTERFACE

Réseau externe

docker run … -p 80:8080

Options :: réseau

docker run … -- net = bridgedocker run … -- net = hostdocker run … -- net = CONTAINER_IDdocker run … -- net = none

:: Cycle de vie

Host 2 OS

Docker EngineDocker Engine

Host 1 OS

Source code

repository Con

t A

Build

Push

SearchPull

Run

Dockerfile for A

Dockerimage

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 ServerContainer Support

Docker Engine

Linux ContainerSupport (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 buildingGarbage collectionLoggingFilesystemsSecurityImage layer and transportation

:: ComposeMulti-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

:: Machine

Créer une machine locale

Commandes

:: Swarm

Utiliser swarm avec machinedocker run swarm create5b7220ee08396d85d08dd9516946b226

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

top related