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

 
docker/intro.txt · Dernière modification: 2019/05/11 14:35 (modification externe)     Haut de page