Docker en mode avancé ********************* ![category](développement) ![tag](docker) ![tag](utilitaire) Gestion des versions d'images ----------------------------- Lorsque vous utilisez docker, les images possèdent des Tags ```bash root@lenovo:~#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE debianvim latest 588951dd9b8c 5 minutes ago 163.4 MB debian latest a0e9fe2f8803 23 hours ago 125.1 MB ``` Il est possible d'avoir pour une même image (repository) plusieurs versions (tag). Nous allons modifier l'image debianvim en ajoutant le module *htop* et créer une nouvelle image *debianvim* avec pour tag 0.1 ```bash root@lenovo:~#docker run -i -t debianvim:latest bash root@27eb5bce4424:/# apt-get install htop Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: strace ltrace The following NEW packages will be installed: htop 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 75.3 kB of archives. After this operation, 209 kB of additional disk space will be used. Get:1 http://httpredir.debian.org/debian/ jessie/main htop amd64 1.0.3-1 [75.3 kB] Fetched 75.3 kB in 8s (8891 B/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package htop. (Reading database ... 9273 files and directories currently installed.) Preparing to unpack .../htop_1.0.3-1_amd64.deb ... Unpacking htop (1.0.3-1) ... Setting up htop (1.0.3-1) ... root@27eb5bce4424:/# exit exit root@lenovo:~#docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 27eb5bce4424 debianvim:latest "bash" 36 seconds ago Exited (0) 8 seconds ago naughty_davinci root@lenovo:~#docker commit 27eb5bce4424 debianvim:0.1 2592884598c2a9fc85c189bdca84cc77279c22455a2f12e9451230891a1de3d4 root@lenovo:~#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE debianvim 0.1 2592884598c2 4 seconds ago 172.5 MB debianvim latest 588951dd9b8c 9 minutes ago 163.4 MB debian latest a0e9fe2f8803 23 hours ago 125.1 MB ``` Nous avons maintenant une version 0.1 de l'image debianvim. Seule cette dernière version possède la commande *htop* Lancement d'une application web ------------------------------- Nous allons créer une image contenant une application web que nous pourrons par la suite utilisé via le port 3333 Nous utilisons pour créer notre image un fichier dockerfile nommé debianhttp.docker ``` FROM debian # install apache and site RUN apt-get update RUN apt-get -y install apache2 RUN echo "coucou" > /var/www/html/index.html # create directories if necessary RUN if ! [ -d /var/run/apache2 ]; then mkdir /var/run/apache2;fi RUN if ! [ -d /var/log/apache2 ]; then mkdir /var/log/apache2;fi RUN if ! [ -d /var/lock/apache2 ]; then mkdir /var/lock/apache2;fi # add variable system ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid CMD ["/usr/sbin/apache2","-D","FOREGROUND"] ``` ```note dans notre fichier on fait le nécessaire pour que Apache démarre en mode foreground (afin que le conteneur tourne en permanence) d'ou les variables d'environnement et la partie CMD ``` Par la suite on peut créer notre image ```bash docker build -t debianhttp - < debainhttp.docker ``` Je peux maintenant lancer un conteneur depuis cette image ```bash docker run -d -p 3333:80 debianhttp ``` ```note la configuration d'apache en mode détaché est compliqué car il ne s'agit pas d'un service mais d'une application. N'oubliez pas que google est votre ami ... ``` Partage de fichier entre le conteneur et le système hôte -------------------------------------------------------- Il est possible dans notre exemple d'applicatin web de vouloir que le conteneur debianhttp possède dans son répertoire /var/www le répertoire local /home/myuser/www Pour cela on lance le conteneur de la façon suivante ```bash docker run -d -p 3333:80 -v /home/myuser/www:/var/www/html debianhttp ``` Gestion de la mémoire --------------------- Il est possible avec docker de limiter les ressources utilisé par le conteneur. Nous limitons par exemple l'utilisation de la mémoire à 512Mo ```bash docker run -m 512m -i -t debianhttp ``` Création d'un conteneur pour une application graphique ------------------------------------------------------ Exemple de création d'un conteneur permettant de lancer *iceweasel* (le navigateur issue de firefox pour debian) Notre fichier dockerfile debianiceweasel.docker ```bash FROM debian # install iceweasel RUN apt-get update RUN apt-get -y install iceweasel # create user userlx RUN useradd -ms /bin/bash userlx # load iceweasel USER userlx ENV HOME /home/userlx CMD /usr/bin/iceweasel ``` Nous devons créer un user nommé *userlx* et lancer au démarrage du conteneur l'application *iceweasel* avec cet utilisateur Nous générons l'image ```bash docker build -t debianiceweasel - < debianiceweasel.docker ``` Et nous pouvons maintenant lancer notre image ```bash docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix debianiceweasel ``` On partage le répertoire tmp et on indique le DISPLAY a utiliser - gestion des versions d'une image (via git ou en local) - gestion des déploiements d'une application web par exemple