====== Service Docker ====== Cette page accueille certaines manipulations pour installer et se servir de Docker, ainsi que ses containers. ===== Contributeur Original ===== (SISR2-2020-2021) Aloïs Noël === Contributeurs aux modifications effectuées === (SISR2-2020-2021) Benjamin Hohn \\ (SISR2-2020-2021) Eric Boissonade ===== Sommaire ===== 1. Installation de Docker a. Installation des services avant Docker b. Installation de Docker c. Configuration réseau i. Changer l'IP des containers (IP fixe, en passant par Portainer) ii. Changer l’IP des containers (par plage IP) iii. Mettre un routeur virtuel iiii. Mettre une route sur le routeur section 2. Exploitation de Docker a. Utilisation de Docker b. Création d’un container c. Créer un modèle a partir d'un container existant 3. Applications dans les containers : a. Wordpress b. Portainer 4. Commandes utiles : ===== 1. Installation : ===== Avant tout, le Docker sera sous os debian 10, il est nécessaire d’avoir une clé bootable avec debian 10 dessus. Afin de définir l’ip de la machine debian 10 : cd /etc/network nano interfaces iface enp3s4f0 inet static auto br0 iface br0 inet static address 172.20.168.211 netmask 255.255.0.0 gateway 172.20.0.254 dns-nameservers 172.20.0.6 bridge_ports enp3s4f0 bridge_stp off bridge_fd 0 A adapter en fonction de l’ip souhaitée. On installera les services avant d’installer Docker sur la machine et il est nécessaire d’être en super-utilisateur afin de réaliser les actions suivantes. Faire su pour entrer en mode super-utilisateur, le mot de passe root sera demandé. On vérifie l'adresse du DNS de votre serveur : nano /etc/resolv.conf Une fois dedans, remplacer par la bonne adresse si ce n’est pas le cas : Nameserver 172.20.0.6 ==== 1. Installation de Docker : ==== === a. Installation des services avant Docker : === On va installer les paquets nécessaires pour Docker : apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - add-apt-repository "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable" - Faites une update de votre système : apt update - Upgrade après l'update : apt upgrade === b. Installation de Docker : === - On va installer les paquets Docker : apt install docker-ce - Ensuite vérifier la conformité du service Docker : systemctl status docker === c. Configuration réseau === == i. Changer l'IP des containers (IP fixe, en passant par Portainer) == Mettre en place un adressage IP fixe en créant un « network » spécifique, puis en assignant les machines à ce « network ». Nous sommes passés par portainer pour créer le réseau RLEK. === Ensuite, nous avons associé les machines (à leur création) sur le réseau : === docker run -it --name nomconteneur --network RLEK --ip 172.21.100.11 debian L'IP et le nom du réseau est à adapter selon vos besoins. === Ou sur une machine existante : === docker connect --network RLEK --ip 172.21.100.12 conteneurLEK L'IP et le nom du réseau est à adapter selon vos besoins. Il a fallu ajouter la route pour le réseau 172.21 sur le routeur section. Voir documentation ci dessous pour la route. L'installation de Portainer est détaillée dans la section containers/applications de la documentation. == ii. Changer l’IP des containers (par plage IP) == - éditer ou créer un fichier /etc/docker/daemon.json de la manière suivante : { "bip": "x.x.x.x/x" (172.16.0.1 par exemple) } Une fois ce fichier modifié, lancez : systemctl daemon-reload systemctl restart docker - Pour vérifier l’ip du docker : ip a - Pour supprimer le fichier si besoin. (dans /etc/docker) rm -f daemon.json == iii. Mettre un routeur virtuel == Aller dans le fichier /etc/sysctl.conf” nano /etc/sysctl.conf # Décommenter la directive pour conserver le paramétrage à chaque redémarrage net.ipv4.ip_forward=1 Donc retirer le # de la ligne net.ipv4.ip_forward=1 Après configuration du fichier il faut reboot le serveur : systemctl reboot == iiii. Mettre une route sur le routeur section == Regarder fichier SIO2020-DonnesInfra pour voir le login, mdp et ip afin de se connecter, en telnet au routeur section. en conf t ip route 172.16.0.0 255.255.0.0 172.20.168.211 (toujours un réseau et non une machine pour la route sauf quand on définit le routeur/machine) Cette route sera à adapter en fonction de la plage ip que l’on attribue au serveur Docker Pour voir les routes : do show ip route ===== 2. Exploitation de Docker : ===== ==== a. Utilisation de Docker : ==== Recherche d'une image : docker search #nom_image Après avoir exécuté cette commande une liste d'image disponible vous est affiché, ce sont toutes les images existant avec le $nom_image que vous avez choisi Par exemple, si l’on veut une image d’ubuntu, on fera : docker search ubuntu Importation d'une image : docker pull #nom_image Par exemple, si l’on veut importer une image d’ubuntu, on fera : docker pull ubuntu Pour voir toutes les images étant sur votre serveur pour la conteneurisation il vous faut utiliser la commande : docker images Exécution d'un conteneur : docker run -it #nom_image Liste de tous les conteneur existant sur votre machine : docker ps -a Démarrer un conteneur : docker start #id/nom du conteneur Entrer dans un conteneur déjà démarré : docker attach #id/nom du conteneur Changer le nom d'un conteneur : docker rename #id #nom ==== b. Création d'un container : ==== Avant tout voici une liste de commandes utiles avant de continuer : docker images (permet de voir les images du docker) docker ps -a (permet de voir tous les containers) docker run -it (nom image) (lance/crée un container) docker container start (lance un container) docker attach (rentrer dans le container lancé) docker ps (permet de voir les container actifs, en marche) docker container rm -f (id du containeur) (supprime un container, le -f force la suppression, utile lorsque le container est toujours actif) docker rename (nom container) (nom “x”) (renommer un container) Afin de créer, lancer, et rentrer dans le container faites la commande suivante : docker run -it (nom image) Par exemple : docker run -it ubuntu Pour quitter le container sans l’éteindre : ctrl p + ctrl q Pour quitter le container et l’éteindre : exit Pour connaitre version ubuntu (lorsque ubuntu est installé sur le container) : cat /etc/lsb-release Pour voir l’ip du container : ifconfig Pour voir le nom de la machine (container) : hostname === Dans les détails on peut définir son nom et son ip dès sa création : === docker run --it --name "nom du container" --net "nom du réseau" --ip "adresse ip du container" "image" === On peut aussi définir son adresse ip après sa création en le connectant à un réseau existant sur le Docker : === docker network connect "réseau" --ip "adresse ip du container" "nom du container" Pour voir les réseaux existants sur le Docker : docker network ls Pour voir les informations d'un réseau en particulier : docker network inspect "nom du réseau" Par exemple : docker network inspect rezodok ==== c. Créer un modèle a partir d'un container existant ==== On va créer un modèle (image) a partir d'un container existant : docker commit "nom du container que vous allez copier" "nom de l'image que vous allez créer" Vérifier que l'image existe : docker images Créer le container avec l'image créée : (--name, --net, --ip pas obligatoire) docker run -it --name "nom du container" --net "nom du réseau" --ip "adresse ip du container" "nom de l'image créee" ===== 3. Applications dans les containers ===== ==== a. Wordpress ==== Préparation à l’installation : apt update apt upgrade apt install nano apt install wget apt install net-tools Installation des services : apt install apache2 php libapache2-mod-php mariadb-server php-mysql vérifier statut service apache2 : service apache2 status démarrer service apache2 : service apache2 start Pour vérifier le statut du service : service mysql status Pour démarrer le service : service mysql start Une fois la pile LAMP installée (avec les modules PHP les plus courants), on active le module mod_rewrite, dont a aussi besoin WordPress : a2enmod rewrite redémarrer le service : service apache2 restart Nous allons ensuite créer un hôte virtuel pour WordPress, dont la racine sera /var/www/wordpress : nano /etc/apache2/sites-available/wordpress.conf Ce qui ouvre avec l'éditeur nano un fichier dans lequel nous allons coller : “wordpress.conf” ServerName wordpress.localhost DocumentRoot /var/www/wordpress AllowOverride all Require all granted ErrorLog /var/log/apache2/error.wordpress.log CustomLog /var/log/apache2/access.wordpress.log combined Finalement, on active l'hôte virtuel et on recharge la configuration d'Apache : sudo a2ensite wordpress service apache2 reload Installation de WordPress : Copie des fichiers Tout d'​abord téléchargeons la dernière version de WordPress : wget https://fr.wordpress.org/wordpress-latest-fr_FR.zip Ensuite nous allons extraire le contenu du zip à la racine de notre hôte virtuel (/var/www/wordpress dans cet exemple) : apt install unzip sudo unzip wordpress-latest-fr_FR.zip -d /var/www mv /var/www/wordpress /var/www/html/ Retirer le sudo si vous etes déja en super-utilisateur On va renforcer légèrement la sécurité en attribuant des droits un peu restrictifs aux fichiers : sudo chown www-data:www-data /var/www/wordpress -R sudo chmod -R -wx,u+rwX,g+rX,o+rX /var/www/wordpress Retirer le sudo si vous etes déja en super-utilisateur Création de la base de données Pour créer la base de données qu'utilisera WordPress, le plus simple est de se connecter avec le client MySQL : mysql On arrive alors sur la console SQL sur laquelle nous allons entrer ces commandes (en remplaçant mot_de_passe) : CREATE DATABASE wordpress; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'mot_de_passe'; GRANT ALL ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; QUIT; Il faut remplacer mot_de_passe par un vrai mot de passe qu'on note pour la prochaine étape. Login : wpuser MDP : mpuser On vient de créer la base de données wordpress à laquelle l'utilisateur wpuser aura accès. Installation via l'interface web WordPress devrait alors être accessible à l'​adresse 172.16.0.4/wordpress/ , et cette adresse nous redirige sur une interface qui nous permet de finaliser l'installation. Cliquez sur C'est parti ! et renseignez les différents champs : Nom de la base de données : wordpress Identifiant : wpuser Mot de passe : le mot de passe qu'on a noté à l'étape précédente (lors de la création de la base de donnée et de l'utilisateur wpuser) Donc mpuser Adresse de la base de données : localhost Préfixe des tables : wp_ Après avoir cliqué sur Lancer l'installation, on tombe sur un second formulaire. Il s'agit cette fois de définir un administrateur pour WordPress. Les champs sont assez clairs. Le titre du site sera visible par les internautes. Login : wpuser MDP : mpuser ==== b. Portainer ==== On va créer le volume de données : docker volume create portainer_data Ensuite créer le container qui va contenir portainer : docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce La commande “restart=always” permet au container de redémarrer à chaque démarrage du Docker L’IP pour accéder au portainer (à adapter, l’ip présente ici est celle de notre serveur Docker) portainer : http://172.20.168.211:9000 Les logs pour s’y connecter : (ce sont des exemples, vous pouvez les modifier comme vous le souhaitez) admin mpadminSIO Remarques : On remarque que le container n’a pas d’ip car on se connecte par le biais de l’ip du docker et de son port : 172.20.168.211:9000 === Ouverture portainer vers l’extérieur : === Configuration du reverse proxy nginx sur le pm20 : Création fichier portainer en copiant celui du si4 et en modifiant les lignes suivantes : server_name “nomdedomaine.net”; donc server_name “portainer.inforostand14.net” location /{ proxy_pass http://ipdelamachine:port/; } donc location /{ proxy_pass http://portainer.inforostand14.net:9000/; } Configuration dans la messagerie Orange : Création dans la messagerie Orange pour la zone DNS: portainer.inforostand14.net Type A Renseigner l’IP de la livebox Redémarrer le service nginx sur le pm20 : service nginx restart