URL: https://linuxfr.org/news/docker-tutoriel-pour-manipuler-les-conteneurs Title: Docker : Tutoriel pour manipuler les conteneurs Authors: Adminrezo NeoX, Davy Defaud, tuiu pol et Benoît Sibaud Date: 2014年03月29日T08:45:55+01:00 License: CC By-SA Tags: docker, lxc, virtualisation, automatisation, tutoriel et debian Score: 35 Docker (présenté [ici‐même](https://linuxfr.org/news/gerer-les-containers-avec-docker) la semaine dernière) est un logiciel à mi‐chemin entre la virtualisation applicative et l’automatisation. Il a l’avantage de ne virtualiser que la partie application et pas du tout la partie système ni le noyau. Il étend le principe des conteneurs Linux (LXC). [Docker Inc.](http://www.docker.com/about_docker_inc/) (anciennement Dotcloud) qui développe Docker, propose aussi un système minimaliste (CoreOS), Docker pouvant virtualiser aussi bien une application qu'un système complet. NdM : comme signalé dans un [commentaire](//linuxfr.org/news/docker-tutoriel-pour-manipuler-les-conteneurs#comment-1529086), Docker Inc. n'est pas à l'origine de CoreOS, qui [est géré par CoreOS, Inc](https://coreos.com/about/). ---- [Le blog à l’origine de la dépêche](http://blog.adminrezo.fr) [Le site officiel de Docker](https://www.docker.io/) [La documentation de Docker](http://docs.docker.io/en/latest/) [Le dépôt officiel de Docker](https://index.docker.io/) ---- # Installation (Debian/Ubuntu) Créer le fichier `/etc/apt/sources.list.d/docker.list` et écrire ça dedans : ```sh deb http://get.docker.io/ubuntu docker main ``` Télécharger la clé GPG et installer le paquet : ```sh apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 apt-get update apt-get install lxc-docker ``` # Manipulation d’images Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus : ```sh 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 ```sh root@xxxxxx# exit docker commit xxxxxx le_nom_de_l_image ``` ## Supprimer les images : ```sh docker rmi id_ou_nom_de_l_image ``` ## Création d’images par Dockerfile Les principales directives des fichiers Dockerfiles : - MAINTAINER : nom et courriel 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 système de fichiers du conteneur ; - USER : utilisateur qui exécute les commandes dans le conteneur ; - EXPOSE : port(s) à exposer à l’extérieur. # Manipuler un conteneur ```sh JOB1=$(docker run -d conteneur) docker logs $JOB1 docker stop $JOB1 ``` ## Voir les conteneurs qui tournent : ``` docker ps ``` ou ``` docker ps -a ``` ## Supprimer un ou tous les conteneurs : ```sh docker rm $JOB1 docker rm id_du_conteneur docker rm `docker ps -a -q` ``` ## Construire un conteneur ## Créer un fichier nommé Dockerfile avec les directives Docker, puis : ```sh docker build -t nom_du_conteneur . ``` # Exemple de Dockerfile : LAMP - MariaDB ## ## Dockerfile ```sh # lamp (d'un M qui veut dire Maria) # Pour Debian Wheezy # # VERSION 0.0.1 # FROM debian:wheezy MAINTAINER Nico Dewaele "nico@adminrezo.fr" ENV DEBIAN_FRONTEND noninteractive # Depots, mises a jour et installs de Apache/PHP5 RUN echo "deb http://ftp.fr.debian.org/debian/ wheezy main non-free contrib"> /etc/apt/sources.list 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 vim ssh supervisor python-software-properties apache2 libapache2-mod-php5 php5-cli php5-mysql # Installation et configuration de MariaDB RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db RUN add-apt-repository 'deb http://mirrors.linsrv.net/mariadb/repo/5.5/debian wheezy main' RUN apt-get update && apt-get install -y mariadb-server RUN service mysql start RUN mysql -v -uroot -e'UPDATE user SET host = "%" WHERE user = "root" LIMIT 1; DELETE FROM user WHERE user = "root" AND host != "%"' mysql RUN service mysql stop # Config de Apache ADD foreground.sh /etc/apache2/foreground.sh ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 # Verification de PHP ADD index.php /var/www/index.php #RUN rm /var/www/index.html # Demarrage des services RUN mkdir -p /var/log/supervisor ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf ADD start.sh /start.sh EXPOSE 80 22 # Si MariaDB doit être exposée à l'extérieur # EXPOSE 3306 CMD ["/bin/bash", "-e", "/start.sh"] ``` ## foreground.sh ## ```sh #!/bin/bash read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT source /etc/apache2/envvars apache2 -D FOREGROUND ``` ## start.sh ## ```sh #!/bin/bash supervisord ``` ## supervisord.conf ## ```sh [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log autorestart=true [program:httpd] command=/usr/sbin/apache2ctl start stopsignal=6 [program:mariadb] command=/usr/sbin/mysqld stdout_logfile=/tmp/%(program_name)s.stdout stderr_logfile=/tmp/%(program_name)s.stderr stopsignal=6 ```

AltStyle によって変換されたページ (->オリジナル) /