Voici plusieurs exemples de mise en place de containers avec Docker, de la simple mise en place, en passant par l’utilisation des Dockerfiles et pour finir avec docker-compose.
Simple mise en place
Mise en place de plusieurs containers dont un LAMP, un MariaDB et un PHPMyAdmin.
Container Lamp
Chercher la bonne image dans un premier temps :
# docker search lamp --stars=20 lamp |
La commande pour installer (récupérer, déployer) une image de container sur sa machine est la suivante :
# docker pull tutum/lamp |
Le démarrage d’un container s’effectue grâce à docker run
, ce container écoute sur deux ports : le 80 pour le HTTP, le 3306 pour les connexions MySQL. On peut alors accéder à notre serveur web.
# docker run -d -p 80:80 -p 3306:3306 tutum/lamp |
Pour donner un autre nom au container :
# docker run -d -p 80:80 -p 3306:3306 --name="server_lamp" tutum/lamp |
Dans le cas d’une image sauvegardée :
# docker run -d -p 80:80 -p 3306:3306 8d876406448a |
La commande netsat -petula
confirmera que docker est bien à l’écoute de http et mysql :
# netstat -petula |
De façon générale pour les ports :
# docker run -p <hôte_port1>:<container_port1> -p <hôte_port2>:<container_port2> |
Entrer dans le shell de server_lamp avec l’id de statut du conteneur :
# docker exec -it <idcontainer> bash |
ou
# docker run --rm -it tutum/lamp /bin/bash |
Container Mariadb
Prendre la dernière image :
# docker pull mariadb:latest |
Créer un container :
# docker run --name mariadb.01 -e MYSQL_ROOT_PASSWORD=**mypass** -d mariadb |
Pour accéder au conteneur via Bash :
# docker exec -it mariadbtest bash |
(NOTE : ici la commande docker attach mariadb
plante…)
Il faudra ensuite créer au minimum une table et la remplir
Récupération de l‘@ip de ce container :
# docker inspect --format "{{.NetworkSettings.IPAddress}}" mariadb.01 |
Communication depuis un autre container docker
Script php pour se connecter à la base :
Print("Resultat d'une requete SQL sur MariaDB placee dans un autre container Docker</br>"); |
Container PhpMyAdmin
On récupère l’image :
# docker pull phpmyadmin/phpmyadmin |
Récupération de l‘@ip du container de la base de données :
# docker inspect --format "{{.NetworkSettings.IPAddress}}" mariadb.01 |
On créé un container :
# docker run --name phpmyadmin.01 -d -e PMA_HOST=172.17.0.2 -p 8080:80 phpmyadmin/phpmyadmin |
Pour aller sur PHPMyAdmin on va à l’adresse : http://monsite.fr:8080
Redirection de PHPMyAdmin
Comment rediriger en monsite.fr/phpmyadmin ou phpmyadmin.monsite.com ?
Ci dessous, 4 containers dockers dont deux avec Nginx.
1/ Faire une redirection sur le DNS
Créer une nouvelle entrée DNS :
Domaine TTL Type Cible |
2/ Faire une redirection dans le Nginx du container Nginx1
Créer un nouveau Vhost :
# vim /etc/nginx/sites-available/phpmyadmin.monsite.fr |
Ca fonctionne, en allant sur phpmyadmin.monsite.fr on se retrouve sur monsite.fr:8080
DockerFile
Exemple de dockerfile à placer à la racine du projet.
FROM python:3.4-alpine |
Dans la section ci-dessous d’autres exemples de Dockerfile.
Docker Compose
Faire un LAMP
Arborescence du projet.
# tree |
Contenu de docker-compose.yml
version: '3' |
Contenue de /php-apache/Dockerfile
FROM php:7.2.1-apache |
Contenue de /www/index.php
<?php |
Pour lancer le docker-compose :
# docker-compose up |
Faire un LEMP
Arborescence du projet.
#tree |
Contenus de docker-compose.yml
Note : les links ne sont pas nécessaire pour des containers dans le même réseau et il n’est plus utile de préciser les ports.
nginx: |
Contenus de nginx/monsite.conf
server { |
Contenus de php/Dockerfile
Note : il est bien de préciser plus d’information, comme un utilisateur différent de root par exemple….
FROM php:7-fpm |
Contenus de www/index.php
<?php |
Contenus de www/index.html
Note : si vous tenter d’aller sur http://MonServeur/ vous tomberez directement dans /www/index.html
cependant si vous préciser la page de la façon suivante http://MonServeur/index.html vous tomberez sur la page par défaut de Nginx. Ne me demandez pas pkoi j’en sais rien.
<html> |
Contenus de www/request.php
Note : il faut au moins au préalable avoir créé la base de données testdb avec PHPMyAdmin même si il elle ne comporte aucune table.
Pour récupérer l’adresse ip de votre container mysql il faut utiliser la commande docker inspect <Nom ou ID container>
.
<?php |
Pour lancer le docker-compose :
# docker-compose up |