Ceci est une ancienne révision du document !
Présentation
Docker est un logiciel libre (Licence Apache 2.0) à mi-chemin entre la virtualisation applicative et l'automatisation. Il permet de manipuler des conteneurs de logiciels. Il complète le conteneur Linux LXC en isolant les processus les uns des autres pour créer une virtualisation de haut niveau.
Contrairement aux autres systèmes de (para) virtualisation, Docker n’embarque pas un système d’exploitation invité mais ne s’occupe que de la partie haut niveau. Il utilise le noyau de l'hôte et ne fait fonctionner que le strict nécessaire sur les invités.
Docker c'est aussi un dépôt d'images à partir duquel vous pouvez téléchargez et partager des applications sans avoir à réinventer la roue.
Commandes de base
Installation
Pour les versions 14.04 et ultérieures, Docker fait partie des paquets de la distribution.
sudo apt-get install docker.io
Pour les versions précédentes ou si vous souhaitez obtenir les dernières versions de Docker, procédez comme suit :
Créer le fichier /etc/apt/sources.list.d/docker.list :
deb http://get.docker.io/ubuntu docker main
Télécharger la clé GPG et installer le package :
sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 sudo apt-get update sudo apt-get install lxc-docker
Si vous voulez vous éviter de taper sudo devant chaque commande Docker, faites appartenir votre utilisateur au groupe Docker:
sudo addgroup utilisateur docker
Manipulation d’images
Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus
docker pull debian docker run -i -t debian /bin/bash
Faire tout ce qu’on veut sur la nouvelle image
root@xxxxxx# …
Et sauvegarder les changements
root@xxxxxx# exit docker commit xxxxxx le_nom_de_l_image
Manipuler les conteneurs
JOB1=$(docker run -d conteneur) docker logs $JOB1 docker stop $JOB1
Voir les conteneurs qui tournent :
docker ps docker ps -a
Supprimer un conteneur / supprimer tous les conteneurs :
docker rm $JOB1 docker rm id_du_conteneur docker rm `docker ps -a -q`
Supprimer une images :
docker rmi id_ou_nom_de_l_image
Import / Export
Une des grandes forces de Docker c'est de pouvoir exporter et importer très facilement les images.
Exporter un container en tar.gz :
docker export 419eed6ff306 > nginx.tgz
Importer un tar.gz :
cat nginx.tgz | docker import - nginx
Automatisation avec un Dockerfile
Le dockerfile est un fichier texte qui inclus une liste d'actions à exécuter pour construire une image.
Par exemple une image simpliste de Apache pourrait ressembler ça :
# Apache et PHP dans un container # # VERSION 0.0.1 # FROM debian:wheezy MAINTAINER Adminrezo "nico@adminrezo.fr" ENV DEBIAN_FRONTEND noninteractive # Depots, mises a jour et installs RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get -y -q autoclean && apt-get -y -q autoremove) RUN apt-get install -y -q apache2 libapache2-mod-php5 php5 supervisor RUN rm /var/www/index.html ADD index.php /var/www/index.php # Config de Apache ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 # Demarrage des services RUN mkdir -p /var/log/supervisor ADD apache.conf /etc/supervisor/conf.d/apache.conf CMD source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND
- MAINTAINER : nom et mail de mainteneur du conteneur
- FROM : image de base (ubuntu, debian)
- VOLUME : Point de montage
- RUN : commande à exécuter pour installer le conteneur.
- ENTRYPOINT : commande qui s’exécute au démarrage du conteneur (une seule sera exécutée).
- CMD : commande qui s’exécute au démarrage du conteneur.
- ADD : Copier un fichier du répertoire courant dans le filesystem du conteneur.
- USER : utilisateur qui exécute les commandes dans le conteneur.
- EXPOSE : Port(s) à exposer à l’exterieur.
Construire un conteneur :
docker build -t nom_du_conteneur .