Ceci est une ancienne révision du document !



docker

Docker est un logiciel libre (sous 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.

Pour Ubuntu 14.04 LTS (« The Trusty Tahr ») et ultérieures

Docker fait partie des dépôts officiels à partir d’Ubuntu 14.04 LTS. Il suffit donc d'installer le paquet docker.io.

Pour les versions précédentes ou pour obtenir les dernières versions de Docker

En utilisant le script d'installation fourni par Docker

Le script est à télécharger depuis le site officiel de Docker.

- Télécharger le script et executer le script

wget https://get.docker.com/
mv index.html script.sh
chmod +x script.sh
./script.sh

=== Manuellement === (testé avec succès sur Ubuntu 16.04 64Bits)

  1. Tout d'abord, ouvrez le fichier /etc/apt/sources.list.d/docker.list en modification, puis collez-y la ligne suivante :
    deb http://get.docker.io/ubuntu docker main
  2. Télécharger la clé GPG et installer le package avec les commandes suivantes saisies dans un terminal :
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
    sudo apt-get update
    sudo apt-get install lxc-docker
Vous devez fermer et rouvrir votre session pour que les changements prennent effet, sinon vous risquez de rencontrer des erreurs de permissions.
Si vous voulez vous éviter de taper sudo devant chaque commande Docker, ajoutez votre utilisateur au groupe Docker :
sudo addgroup [utilisateur] docker

Une fois Docker installé, vous pouvez lancer le service :

sudo service docker start

et vérifier s'il fonctionne correctement (n'oubliez pas le sudo devant la commande docker si vous n'avez pas ajouté votre utilisateur au groupe docker) :

docker run hello-world

À la première exécution, Docker ne doit pas trouver l'image de l'application hello-word en local. Il va alors tenter de télécharger la dernière version. En cas de réussite, il exécute l'application qui affiche une simple page d'explication sur la sortie standard et s'arrête.

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

Manipulation de 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 ou supprimer tous les conteneurs :

docker rm $JOB1
docker rm id_du_conteneur
docker rm `docker ps -a -q`

Supprimer une image :

docker rmi id_ou_nom_de_l_image

Import, export

Une des grandes forces de Docker 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 "admin@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 .

Date et heure

La date et l'heure du conteneur est basée sur celle du système hôte. Cependant il est possible de constater un écart d'heure entre le système et le conteneur. Ceci est dû au fait que le conteneur peut-être configuré sur un autre fuseau horaire (timezone).

Date de votre système et fuseau :

date
more /etc/timezone

Date du conteneur et fuseau :

sudo docker attach CONTENEUR   #valider par la touche ENTRÉE
date
more /etc/timezone

Réglage du fuseau dans le conteneur

sudo dpkg-reconfigure tzdata

( se détacher du conteneur : CTRL-p CTRL-q )

Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.

  • docker.1472598938.txt.gz
  • Dernière modification: Le 31/08/2016, 01:15
  • par 168.253.163.46