Table des matières

, , , ,

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 (il n'utilise plus LXC depuis peu) en isolant les processus les uns des autres pour créer une virtualisation de haut niveau. Dans l'esprit docker : un processus = un conteneur, facteur à prendre en compte dans le choix LXC vs DOCKER.

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écharger 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 :

Soit en utilisant le script d'installation fournit par docker https://get.docker.com

Soit manuellement :

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

NOTE: vous devez fermer et rouvrir votre session pour que les changements prennent effet, vous aurez autrement toujours les erreurs de permission.

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 inclut 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

Construire un conteneur :

docker build -t nom_du_conteneur .

Aller plus loin