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