Docker est un moteur open source extensible optimisé par Linux Containers qui automatise le déploiement d'applications sous forme de conteneurs portables, légers et autonomes. Pour les besoins de ce didacticiel, nous supposerons que vous avez suivi les étapes décrites dans notre Configuration et sécurisation d'une instance de calcul, que votre système est à jour et que vous vous êtes connecté à votre Linode en tant que root via SSH.
Installation
Pour les besoins de ce guide, nous allons vous montrer comment installer Docker sur Ubuntu 12.04 et CentOS 6.4 Docker fournit des référentiels pour chacune de ces distributions, ce qui facilite l'installation.
Ubuntu 12.04 64bit
Ici, nous allons ajouter le référentiel maintenu par Docker pour Ubuntu et installer le logiciel.
-
Docker est disponible sous forme de package dans les référentiels Ubuntu de Docker, mais uniquement pour 64 bits. Tout d'abord, vous devrez ajouter la clé du référentiel Docker en utilisant
apt-key
:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
-
Ajoutez le référentiel Docker à vos sources apt :
echo "deb http://get.docker.io/ubuntu docker main" | sudo tee /etc/apt/sources.list.d/docker.list
-
Exécutez ce qui suit pour apt-get update et installez
lxc-docker
:sudo apt-get update sudo apt-get install lxc-docker
-
Pour vérifier que l'installation s'est terminée avec succès, lancez un exemple de conteneur Ubuntu. Cette commande récupérera automatiquement toutes les images manquantes, exécutera le conteneur et fournira une session bash interactive :
sudo docker run -i -t ubuntu /bin/bash
Le résultat devrait ressembler à :
# docker run -i -t ubuntu /bin/bash Unable to find image 'ubuntu' (tag: latest) locally Pulling repository ubuntu 8dbd9e392a96: Download complete b750fe79269d: Download complete 27cf78414709: Download complete [email protected]:/#
-
Pour quitter le conteneur, tapez
exit
.
CentOS 6 64bit
Docker est disponible sur le référentiel EPEL en tant que docker-io
package pour 64 bits uniquement.
-
Pour ajouter le référentiel EPEL, installez le dernier package epel-release.
-
Pour installer Docker, exécutez la commande suivante :
sudo yum -y install docker-io
-
Pour démarrer le démon Docker, appelez
service
:sudo service docker start
-
Si vous souhaitez que le démon Docker démarre au démarrage, exécutez la commande suivante :
sudo chkconfig docker on
-
Pour vérifier que l'installation s'est terminée avec succès, lancez un exemple de conteneur Fedora. Cette commande récupérera automatiquement toutes les images manquantes, exécutera le conteneur et fournira une session bash interactive :
sudo docker run -i -t fedora /bin/bash
-
Pour quitter le conteneur, tapez
exit
.
Que puis-je faire avec Docker ?
Docker permet aux utilisateurs de regrouper leurs applications et configurations dans des images légères pour un déploiement sous forme de conteneurs portables.
Bonjour le monde
Pour exécuter un conteneur Docker qui affiche "hello world", exécutez la commande suivante :
docker run ubuntu /bin/echo hello world
Il devrait renvoyer hello world
.
Cela indique à Docker de faire un certain nombre de choses :
- Si l'image (Ubuntu) n'existe pas déjà localement, téléchargez-la depuis l'index Docker.
- Créez un nouveau conteneur avec l'image Ubuntu de base avec un système de fichiers en lecture-écriture et une interface réseau.
- Attribuez une adresse IP au conteneur ; configurer NAT pour transférer le trafic vers et depuis le conteneur.
- Exécutez la commande
/bin/echo hello world
, et imprimez le résultat. - Après avoir terminé le processus principal, le conteneur se fermera.
Écrire un Dockerfile pour Nginx
Lors de la création d'une image, Docker suit le jeu d'instructions dans un fichier nommé Dockerfile
. Notez que le fichier doit être nommé Dockerfile
et tous les fichiers ou dossiers requis par le Dockerfile doivent se trouver dans le même répertoire que le Dockerfile
lui-même.
Exécuter un programme comme echo
dans un conteneur Docker est assez simple. Cependant, pour les programmes qui agissent en tant que serveurs, tels que Nginx, vous devrez vous assurer que le programme est configuré pour ne pas s'auto-démoniser.
Voici un exemple de Dockerfile pour Nginx :
FROM ubuntu:12.04
MAINTAINER Jon Chen "[email protected]"
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
VOLUME /etc/nginx/sites-enabled
VOLUME /var/log/nginx
EXPOSE 80
CMD ["nginx"]
La syntaxe Dockerfile ressemble à ceci :
# Comment
INSTRUCTION arguments
Docker parcourt les instructions Dockerfile de haut en bas dans l'ordre. La première instruction doit être FROM
, qui précise l'image de base à partir de laquelle vous souhaitez construire votre nouvelle image :
FROM ubuntu:12.04
Cela définit l'image officielle d'Ubuntu 12.04 comme image de base. Vous souhaiterez également utiliser l'instruction MAINTAINER pour définir l'auteur de l'image :
MAINTAINER Jon Chen "[email protected]"
Ensuite, le RUN
L'instruction exécutera des commandes sur l'image et validera les résultats. Chaque commit est enregistré et utilisé pour l'instruction suivante. Par exemple, ce RUN
remplace le contenu de /etc/apt/sources.list
dans l'image avec deb http://archive.ubuntu.com/ubuntu precise main universe
:
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
La chose importante à retenir pour les programmes tels que Nginx est de s'assurer que le programme ne s'exécute pas en tant que démon. Le comportement par défaut de Nginx en tant que démon consiste à débrancher les processus de travail, puis à quitter le processus maître. Comme Docker ne surveille que le PID du processus d'origine, le conteneur s'arrêtera prématurément au lieu de s'exécuter de manière persistante. Pour désactiver la démonisation, ajoutez la directive de configuration démon off à /etc/nginx/nginx.conf
:
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
Pour exposer un port à l'intérieur du conteneur vers l'extérieur du conteneur, utilisez l'instruction EXPOSE :
EXPOSE 80
L'instruction CMD définit la commande par défaut à exécuter au démarrage du conteneur. Dans notre exemple, nous voulons exécuter Nginx :
CMD ["nginx"]
Par défaut, les conteneurs Docker n'ont pas de stockage persistant. Afin de partager des données entre conteneurs, utilisez la fonctionnalité VOLUME :
VOLUME /etc/nginx/sites-enabled
VOLUME /var/log/nginx
Afin de monter un répertoire de l'hôte sur le conteneur, vous devrez spécifier le répertoire hôte, le répertoire du conteneur correspondant et les autorisations de répertoire dans la ligne de commande lorsque vous exécutez le conteneur :
-v=[]: Create a bind mount with: [host-dir]:[container-dir]:[rw|ro].
If "host-dir" is missing, then docker creates a new volume.
Pour créer cette image, exécutez la commande suivante dans le même répertoire que le Dockerfile. Vous pouvez également spécifier un référentiel et une balise pour votre image avec -t repo/tag
:
docker build -t bsdlp/nginx .
Exécutez la commande suivante pour ajouter /etc/nginx/sites-enabled
et /var/log/nginx
en tant que volumes de l'hôte au conteneur, démarrez le conteneur en tant que démon et exposez le port 80 du conteneur en tant que port 80 sur l'hôte :
docker run -d -p 80:80 -v /etc/nginx/sites-enabled:/etc/nginx/sites-enabled -v /var/log/nginx:/var/log/nginx bsdlp/nginx
Plus d'informations
Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.
- Guide de démarrage de Docker
- Docker sur GitHub
- Index officiel des images Docker