====== Différences ======
Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.
| — |
docker:intro [2019/05/11 14:35] (Version actuelle) |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Docker ====== | ||
| + | |||
| + | Docker (présenté ici‐même 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:docker.png?200|}} | ||
| + | |||
| + | 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, Docker Inc. n'est pas à l'origine de CoreOS, qui est géré par CoreOS, Inc. | ||
| + | |||
| + | Le blog à l’origine de la dépêche (946 clics) | ||
| + | Le site officiel de Docker (463 clics) | ||
| + | La documentation de Docker (293 clics) | ||
| + | Le dépôt officiel de Docker (163 clics) | ||
| + | |||
| + | ===== Installation (Debian/Ubuntu) ===== | ||
| + | |||
| + | Créer le fichier /etc/apt/sources.list.d/docker.list et écrire ça dedans : | ||
| + | <code=bash> | ||
| + | deb http://get.docker.io/ubuntu docker main | ||
| + | </code> | ||
| + | Télécharger la clé GPG et installer le paquet : | ||
| + | <code=bash> | ||
| + | apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 | ||
| + | apt-get update | ||
| + | apt-get install lxc-docker | ||
| + | </code> | ||
| + | ===== Manipulation d’images ===== | ||
| + | |||
| + | |||
| + | Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus : | ||
| + | <code=bash> | ||
| + | docker pull debian | ||
| + | docker run -i -t debian /bin/bash | ||
| + | </code> | ||
| + | Faire tout ce qu’on veut sur la nouvelle image | ||
| + | <code=bash> | ||
| + | root@xxxxxx# ... | ||
| + | |||
| + | Et </code>sauvegarder les changements | ||
| + | <code=bash> | ||
| + | root@xxxxxx# exit | ||
| + | docker commit xxxxxx le_nom_de_l_image | ||
| + | </code> | ||
| + | Supprimer les images : | ||
| + | <code=bash> | ||
| + | docker rmi id_ou_nom_de_l_image | ||
| + | </code> | ||
| + | ===== 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 ===== | ||
| + | <code=bash> | ||
| + | JOB1=$(docker run -d conteneur) | ||
| + | docker logs $JOB1 | ||
| + | docker stop $JOB1 | ||
| + | |||
| + | Voir les conteneurs qui tournent : | ||
| + | <code=bash> | ||
| + | docker ps | ||
| + | |||
| + | ou | ||
| + | <code=bash> | ||
| + | docker ps -a | ||
| + | |||
| + | Supprimer un ou tous les conteneurs : | ||
| + | <code=bash> | ||
| + | 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 : | ||
| + | <code=bash> | ||
| + | docker build -t nom_du_conteneur . | ||
| + | |||
| + | Exemple de Dockerfile : LAMP - MariaDB | ||
| + | Dockerfile | ||
| + | <code=bash> | ||
| + | # 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 | ||
| + | |||
| + | #!/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 | ||
| + | |||
| + | #!/bin/bash | ||
| + | supervisord | ||
| + | |||
| + | supervisord.conf | ||
| + | |||
| + | [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 | ||
| + | |||
| + | </code> | ||