par
Marek Goldmann
10 Déc 2013
Un projet pour créer et gérer des conteneurs.
Oui, une virtualisation de système d'exploitation légère.
C'est complètement différent.
Machine virtuelle (KVM, VMware) | Conteneur (LXC, OpenVZ) | |
---|---|---|
Matériel | Simulé | L'utilise (presque) en direct |
OS supportés | Presque tous | Seulement Linux |
Espace | Espace utilisateur | Espace noyau |
Séparation | Complète | Control Groups (cgroups) |
Temps démarrage | Secondes à minutes | Milisecondes |
Passage échelle | Quelques une | Infini (milliers) |
Noyau spécifique | Oui | Non |
Fonctions avancées (migration live, etc) | Oui | Non |
Facilité de création | Moyenne | Facile |
Durée requise à création | Longue | Courte |
Taille | ENORME | Petite |
dotCloud* et une communauté puissante.
* dotCloud, Inc. a été renommée en Docker, Inc. récemment
Atteint seulement après 10 mois depuis le premier commit sur GitHub
Fait fonctionner, démarre, arrête, etc... sur les conteneurs
Crée les images
Stockage pour les images
C'est facile ! On utilise des Dockerfiles.
Un fichier texte avec des instructions qui automatisent la fabrication de l'image.
# Se base sur une image de Fedora 20
FROM mattdm/fedora
# Met à jour l'image
RUN yum -y update
# Installe java
RUN yum -y install java-1.7.0-openjdk-devel wget
# Récupère WildFly
RUN wget http://download.jboss.org/wildfly/8.0.0.Beta1/wildfly-8.0.0.Beta1.tar.gz -O /opt/wildfly.tar.gz
RUN tar -xf /opt/wildfly.tar.gz -C /opt
# Lance WildFly au démarrage du conteneur
ENTRYPOINT /opt/wildfly-8.0.0.Beta1/bin/standalone.sh -c standalone-ha.xml -b 0.0.0.0
Ceci devrait être sauve dans le fichier appelé Dockerfile
FROM
: l'image sur laquelle on se base / qu'on étendRUN
: La commande à exécuter à la fabricationENTRYPOINT
: La commande à exécuter après le démarrage du conteneurMais il y en a beaucoup d'autres !
docker build .
$ docker build .
Uploading context 10240 bytes
Step 1 : FROM mattdm/fedora
[SNIP]
Step 4 : RUN wget -q http://download.jboss.org/wildfly/8.0.0.Beta1/wildfly-8.0.0.Beta1.tar.gz -O /opt/wildfly.tar.gz
---> Running in 41467b97b423
---> 112766c23202
Step 5 : RUN tar -xf /opt/wildfly.tar.gz -C /opt
---> Running in d07d0c5c3dab
---> c53f9f4ceb1e
Step 6 : ENTRYPOINT /opt/wildfly-8.0.0.Beta1/bin/standalone.sh -c standalone-ha.xml -b 0.0.0.0
---> Running in a9b2cecf4db5
---> 5894688e4f2e
Successfully built 5894688e4f2e
Nous avons fabriqué l'image 5894688e4f2e
Dockerfile
build
à nouveau
$ time docker build .
Uploading context 10240 bytes
Step 1 : FROM mattdm/fedora
---> 0f3e92b4e94d
[SNIP]
Step 4 : RUN wget -q http://download.jboss.org/wildfly/8.0.0.Beta1/wildfly-8.0.0.Beta1.tar.gz -O /opt/wildfly.tar.gz
---> Using cache
---> 2ad6655478dd
Step 5 : RUN tar -xf /opt/wildfly.tar.gz -C /opt
---> Using cache
---> c0f63f06e9ec
Step 6 : RUN touch /etc/something
---> Running in 8426dd5570af
---> 7ef016a00cde
Step 7 : ENTRYPOINT /opt/wildfly-8.0.0.Beta1/bin/standalone.sh -c standalone-ha.xml -b 0.0.0.0
---> Running in 60bfa9d3a746
---> e757e0ea05d7
Successfully built e757e0ea05d7
real 0m0.307s
user 0m0.000s
sys 0m0.018s
Nous avons construit une nouvelle image e757e0ea05d7
Oui, 300ms!
$ docker images
REPOSITORY TAG ID CREATED SIZE
<none> <none> e757e0ea05d7 37 minutes ago 12.29 kB (virtual 1.056 GB)
<none> <none> 5894688e4f2e 46 minutes ago 12.29 kB (virtual 1.056 GB)
Oui, 12.29kB!
docker pull
Récupérer une image ou un repository dans le registry
docker push
Transmettre une image depuis le registry vers un repository
docker run
Lance une commande dans un nouveau conteneur basé sur l'image spécifiée
docker stop
Arrête un conteneur
docker start
Démarre un conteneur arrêté
docker rm
Supprime un conteneur arrêté
docker rmi
Supprime une image du registry
Il est (relativement) facile de créer une PaaS avec Docker
Il y a même un tutoriel pour en créer une en 5 minutes...
https://github.com/openshift/openshift-pep/blob/master/openshift-pep-010-docker-cartridges.md
Fabriquer une fois - exécuter n'importe où !
yum install docker-io
Remerciements :