Comment créer une pile de lampe basée sur Docker en utilisant Docker-Compose sur Ubuntu 18.04 Bionic Beaver Linux

Comment créer une pile de lampe basée sur Docker en utilisant Docker-Compose sur Ubuntu 18.04 Bionic Beaver Linux

Objectif

Après ce tutoriel, vous pourrez créer un environnement de lampe en utilisant la technologie Docker.

Exigences

  • Autorisation
  • Connaissance de base de Docker

Conventions

  • # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
    directement en tant qu'utilisateur racine ou en utilisant Sudo commande
  • $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Autres versions de ce tutoriel

Ubuntu 20.04 (Focal Fossa)

Introduction


Docker est un projet open source visant à fournir des logiciels à l'intérieur conteneurs. Vous pouvez considérer un conteneur comme une sorte de «package», un environnement isolé qui partage le noyau avec la machine hôte et contient tout ce dont l'application a besoin. Tous les conteneurs sont construits en utilisant images (Le référentiel d'images centrales pour leur dockerhub).

Dans ce didacticiel, nous verrons comment créer une pile de lampe basée sur des composants dockerisés: en suivant la philosophie «un service par conteneur», nous assemblerons l'environnement en utilisant composer docker, Un outil pour orchestrer les compositions de conteneurs.

Un service vs multiple service pour conteneur

Il y a plusieurs avantages à utiliser un service par conteneur, au lieu d'exécuter plusieurs services dans le même. Modularité, par exemple, (nous pouvons réutiliser un conteneur à différentes fins), ou une meilleure maintenabilité: il est plus facile de se concentrer sur un élément spécifique d'un environnement au lieu de les considérer tous en même temps. Si nous voulons respecter cette philosophie, nous devons créer un conteneur pour chaque composant de notre pile de lampe: un pour Apache-Php et un pour la base de données. Les différents conteneurs doivent être capables de se parler: pour orchestrer facilement les conteneurs liés que nous utiliserons composer docker.

Étapes préliminaires

Avant de continuer, nous devons installer docker et composer docker sur notre système:

# apt-get install docker-compose

Les packages seront installés en quelques secondes et le docker Le service sera automatiquement démarré. Nous pouvons maintenant procéder à la création d'un répertoire pour notre projet et à l'intérieur, un autre pour tenir les pages qui seront desservies par Apache. DocumentRoot serait un nom significatif pour cela; Dans ce cas, la seule page qui sera servie c'est indice.php:

$ mkdir -p docking-lamp / documentroot $ echo ""> docking-lamp / documentroot / index.php 
Copie

Ici, notre code se compose simplement du phpinfo Fonction: sa sortie (une page affichant des informations sur PHP, au cas où vous ne le savez pas) sera ce que notre serveur affichera par défaut. Maintenant utilisons notre éditeur préféré pour créer le composer docker.YML dossier pour notre projet.



Php-apache

Nous pouvons maintenant commencer à fournir des instructions sur la construction et la connexion de nos conteneurs dans le fichier Docker-Compose. Ceci est un fichier qui utilise le yaml syntaxe. Toutes les définitions doivent être fournies dans le prestations de service section.

Version: Services «3»: PHP-APache: Image: PHP: 7.2.PORTS 1-APACHE: - 80:80 Volumes: - ./ Documentroot: / var / www / html liens: - 'mariaDb' 
Copie

Jetons un coup d'œil à ce que nous venons de faire ici. La première ligne que nous avons insérée dans le fichier, version, Spécifie la version de syntaxe Docker-Compose que nous allons utiliser, dans ce cas la version 3, La dernière version principale disponible. À l'intérieur de prestations de service Section, nous avons commencé à décrire notre service en spécifiant son nom, php-apache (Un nom arbitraire, vous pouvez utiliser ce que vous voulez), puis les instructions pour la construire.

Le image Le mot-clé permet à Docker de savoir quelle image nous voulons utiliser pour construire notre conteneur: dans ce cas, j'ai utilisé 7.2.1-APACH ce qui nous fournira Php 7.2.1 avec le serveur Web Apache. Besoin d'une autre version PHP? il vous suffit de choisir parmi les nombreux fournis dans la page d'image sur dockerhub.

La deuxième instruction que nous avons fournie est ports: Nous disons à Docker de cartographier le port 80 sur notre hôte, au port 80 Sur le conteneur: de cette façon apparaîtra car nous exécutions le serveur Web directement sur notre système.

Nous avons ensuite utilisé le volumes instruction pour spécifier un lier la monture. Étant donné que pendant le développement, le code change beaucoup et rapidement, il n'y aurait aucun sens à mettre le code directement dans un conteneur: de cette façon, nous devons le reconstruire chaque fois que nous apportons des modifications. Au lieu de cela, ce que nous allons faire, c'est dire à Docker de lier le montage Document de document répertoire, à / var / www / html à l'intérieur du conteneur. Ce répertoire représente le principal apache VirtualHost Document Root, donc le code que nous mettons à l'intérieur, sera immédiatement disponible.

Enfin nous avons utilisé le lien mot-clé spécifiant mariadb comme son argument. Ce mot-clé il n'est pas nécessaire, comme il peut sembler, de créer une connexion entre les deux conteneurs: même sans le spécifier, le mariadb Le service serait accessible de l'intérieur du conteneur construit pour le apache-php Service, en utilisant son nom comme nom d'hôte. Le mot-clé fait deux choses: d'abord, spécifions éventuellement un alias Nous pouvons utiliser pour référencer un service en plus de son nom. Ainsi, par exemple, en écrivant:

Lien: MariaDB: Service de base de données 
Copie

Le service pourrait également être atteint en utilisant service de base de données. La deuxième chose lien fait, spécifie une dépendance: dans ce cas php-apache Le service sera considéré comme dépendant de la mariadb Un, donc ce dernier sera lancé avant le premier lors de la construction ou du démarrage de l'environnement.



Installer des extensions PHP

Le Dockerfile PHP-APache par défaut n'inclut pas certaines extensions PHP, comme MySQLI ou PDO. Pour les installer, nous devons construire notre propre dockerfile, en fonction de celui-ci. Pour ce faire, nous créons un répertoire à l'intérieur de notre projet nommé PHP-APACHE (ce sera notre construire un contexte) Et à l'intérieur, notre dockerfile. Collez et enregistrez le code ci-dessous en tant que php-apache / dockerfile:

 De PHP: 7.2.1-APACHE HERENTEREER EGIDIO DOCILE RUN DOCKER-PHP-EXT-INSTALL PDO PDO_MYSQL MYSQLI 
Copie

Comme vous pouvez le voir, avec le DEPUIS instruction, nous avons spécifié que ce dockerfile devrait être basé sur le par défaut. Ensuite, nous avons inclus un COURIR Instruction: Utilisation du script fourni dans l'image elle-même, docker-php-extall, Nous incluons les extensions nécessaires pour utiliser l'APD et MySQLI. À ce stade, si nous voulons utiliser notre DockerFile personnalisé, nous devons modifier légèrement la section PHP-APACHE dans notre compose Docker.yml, de cette façon:

Version: Services «3»: php-apache: build: Context: ./ PORTS PHP-APACHE: - 80:80 Volumes: - ./ Documentroot: / var / www / html liens: - 'mariaDb' 
Copie

Qu'est ce qui a changé? Au lieu de spécifier directement l'image distante à utiliser, nous avons fourni le contexte instruction, à l'intérieur du construire La section, de sorte que le dockerfile contenu dans le répertoire que nous avons créé et ici fourni comme argument, sera automatiquement utilisé. Le répertoire de contexte est importé par le démon docker lors de la construction de l'image, donc si nous voulons ajouter des fichiers supplémentaires, nous devons les mettre également là.

Le service de base de données

Une base de données dans une partie essentielle d'un environnement de lampe, il est utilisé pour la persistance. Dans ce cas, nous allons utiliser mariadb:

MariaDB: Image: Mariadb: 10.1 volumes: - MariaDb: / var / lib / mysql Environment: TZ: "Europe / Rome" MySQL_ALLOW_EMPTY_PASSWORD: "NON" MySQL_ROOT_PASSWORD: "rootpwd" MySQL_USER: 'TESTUSER' MYSQL_PASSWORD: 'TestPassword' 
Copie

Nous savons déjà ce que le image Le mot-clé est pour. Il en va de même pour le volumes instruction, à l'exception du fait que cette fois, nous n'avons pas déclaré de lier la monture, Au lieu de cela, nous avons référencé un volume nommé, pour persévérance. Il est important de se concentrer sur la différence entre les deux pendant un moment.

Comme dit précédemment, un lier la monture est un moyen rapide de monter un répertoire d'hôte à l'intérieur d'un conteneur, de sorte que les fichiers contenus dans ledit répertoire deviennent accessibles à l'intérieur de l'environnement restreint: pour spécifier un support de liaison, le syntaxe courte est:

:

Le chemin d'hôte peut être un parent (au fichier docker-compose) ou un chemin absolu, tandis que le point de montage à l'intérieur du conteneur doit être spécifié sous forme absolue.

UN volume nommé est quelque chose de différent: c'est un bon volume de docker Utilisé pour la persistance, et il doit généralement être préféré à un support de liaison, car il ne dépend pas de la structure des fichiers hôte (l'un des nombreux avantages des conteneurs, c'est leur portabilité). La syntaxe à utiliser pour référencer un volume nommé À l'intérieur d'une définition de service est:

:

UN volume nommé Le cycle de vie est indépendant de celui d'un conteneur qui l'utilise et doit être déclaré dans le volumes Section du fichier docker-compose, comme nous le verrons dans un instant.

Retour à la définition du service maintenant. Le dernier mot-clé que nous avons utilisé est environnement: il nous permet de définir certaines variables d'environnement qui influenceront le comportement du service. Nous avons d'abord utilisé Tz Pour spécifier notre fuseau horaire de la base de données: dans ce cas, j'ai utilisé «Europe / Rome». Les noms des autres variables disent tout sur leur objectif: en les utilisant, nous définissons les détails importants comme nom de la base de données par défaut à créer (testdb), l'utilisateur à créer et son mot de passe. Nous définissons également le mot de passe de l'utilisateur racine et avons décidé de ne pas autoriser les mots de passe vides.



La section Volumes

Dans cette section, nous devons déclarer le volume nommé Nous avons référencé à partir du mariadb Définition du serveur:

Volumes: Mariadb: 
Copie

À la fin, c'est à quoi ressemblera notre fichier dans son intégralité:

Version: Services «3»: PHP-APache: Image: PHP: 7.2.PORTS 1-APACHE: - 80:80 Volumes: - ./ Documentroot: / var / www / html: z liens: - 'Mariadb' Mariadb: image: Mariadb: 10.1 Volumes: - MariaDb: / var / lib / mysql Environment: TZ: "Europe / Rome" MySQL_ALLOW_EMPTY_PASSWORD: "Non" MySQL_ROOT_PASSWORD: "rootpwd" MySQL_USER: 'TESTUSER' MYSQL_PASSWORD: 'TestPassword' 
Copie

Il est vraiment important de respecter l'indentation pour que le fichier soit interprété correctement.

Construisons notre environnement

Une fois que nous avons spécifié toutes les instructions pour nos services, nous pouvons utiliser le secouer docker commander pour les construire. La commande doit être exécutée dans le même répertoire où le composer docker.YML le fichier est situé:

# docker-compose

Quelques minutes et nous serons prêts à partir. À la fin si tout s'est bien passé, en naviguant vers hôte local Sur notre hôte, nous verrons la sortie du script PHP que nous avons placé à l'intérieur Document de document:

Notre environnement de lampe est maintenant prêt à être utilisé.

Réflexions de clôture

Nous avons vu comment créer un base LAMPE environnement, utilisant Docker et orchestrer des conteneurs et des services avec composer docker. La configuration que nous avons utilisée est axée sur le développement et peut être élargie et modifiée pour répondre aux différents besoins: Docker Documentation C'est une source très bien écrite que vous pouvez consulter pour étendre vos connaissances Docker. N'hésitez pas à laisser un commentaire sur les doutes ou les questions que vous avez.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Comment créer une pile de lampe basée sur Docker à l'aide de Docker sur…
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Ubuntu 20.04 Guide
  • Ubuntu 20.04 Hadoop
  • Les 8 meilleurs environnements de bureau Ubuntu (20.04 FOCAL FOSSA…
  • Liste des clients FTP et installation sur Ubuntu 20.04 Linux…
  • Comment se connecter à Docker Container via SSH
  • Comment installer la pile de lampe sur Almalinux