Docker est un outil permettant d'empaqueter une application et ses dépendances dans un conteneur (container en anglais) virtuel, qui pourra être exécuté sur n'importe quel serveur Linux.
Build : Construction d'images d'applications
Ship : Distibution des images via les registries
Run : Execution d'application dans des containers
Any application : Tout ce qui tourne sous Linux
Anywhere : laptop, cloud, VM, bare metal, ...
Dev vs Ops, FIGHT !
Les développeurs s'occupent de l'intérieur du container. Ils installent les dépendances et les applications, ils construisent les images.
Les Ops s'occupent de configurer et de déployer les containers sur les différents environnements.
docker run -p 5984:5984 tutum/couchdb
Lance un container à partir de l'image 'tutum/couchdb' et mappe le port 5984 du container sur le port 5984 de l'hôte
=> Waiting for confirmation of CouchDB service startup Apache CouchDB 1.5.0 (LogLevel=info) is starting. Apache CouchDB has started. Time to relax. [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/ [info] [<0.107.0>] 127.0.0.1 - - GET / 200 => Creating an admin user with a random password in CouchDB [info] [<0.108.0>] 127.0.0.1 - - PUT /_config/admins/admin 200 "" => Done!
docker run -p 5984:5984 tutum/couchdb
L'image tutum/couchdb est récupérée depuis le registry global un container est créé à partir de l'image le port 5984 est mappé sur l'hôte le container est démarré
récuperer une image depuis un registry
docker pull NAME[:TAG]
pousser une image sur le registry
docker push NAME:[TAG]
construire une image à partir d'un fichier Dockerfile
docker build .
construire une image à partir d'un container
docker commit CONTAINER [REPOSITORY][:TAG]
FROM ubuntu:14.04 # hérite d'une image de base RUN apt-get update && \ # installation des dépendances apt-get install -y couchdb pwgen && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN mkdir /var/run/couchdb ADD run.sh /run.sh && chmod 755 /*.sh EXPOSE 5984 # info sur le port 'exposable' VOLUME ["/var/lib/couchdb"] # création d'un volume CMD ["/run.sh"] # la commande lancée lorsque que le container démarre
construire l'image
docker build -t my_couchdb .
Ils permettent d'exécuter le processus définit dans l'image en isolation des autres containers et du l'OS hôte
Un container possède:
Un container est toujours créé à partir d'une image
docker run [OPTIONS] IMAGE
Crée et démarre un container à partir de l'image IMAGE
Docker permet de controller les ressources aloués aux containers
Par défaut, les containers son non-privilégiés.
Les privilèges suivants peuvent être activés
En mode privilégié, on peut faire tourner docker dans docker !
Ils permettent de stocker et diffuser les images
Chaque image est reférencé dans un registry par son NOM et un TAG
Récupérer une image depuis un registre
docker pull [IMAGE][:TAG]
publier une image sur un registre
docker push [IMAGE][:TAG]
Le TAG peut s'apparenter à un numéro de version, et permet d'identifier l'image de manière unique
ex: les images officielles MongoDB
Docker maintient un registre global
C'est de ce registre que les images sont téléchargée par défaut
docker run -d --name some-mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6
docker run --name some-wordpress \ --link some-mysql:mysql -p 8080:80 -d wordpress
wordpress: image: wordpress ports: - "8081:80" links: - db:mysql db: image: "mysql:5.6" environment: - MYSQL_ROOT_PASSWORD=my-secret-pw
docker-compose up