Comment créer une pile de lampe basée sur Docker en utilisant Docker-Compose sur Ubuntu 18.04 Bionic Beaver Linux
- 3414
- 247
- Clara Nguyen
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 utilisantSudo
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
- « Comment installer la discorde sur Ubuntu 18.04 Bionic Beaver Linux
- Comment réinitialiser le mot de passe mysql root sur Ubuntu 18.04 Bionic Beaver Linux »