Comment créer une pile de lampe basée sur Docker en utilisant Docker sur Ubuntu 20.04
- 2903
- 362
- Lucas Bernard
La pile de lampe
Lamp est la pile logicielle sur laquelle l'exécution de la majorité des sites Web. Linux représente les bases de la pile, et l'implémentation traditionnelle comprend Apache en tant que serveur Web, la base de données MySQL et PHP comme langage de programmation côté serveur. Il existe cependant de nombreuses variations possibles: MariaDB, par exemple, est souvent utilisée à la place de MySQL, dont il s'agit d'une fourche et d'autres langages de programmation, car Python ou Perl peuvent être utilisés à la place de PHP. Dans cet article, nous verrons comment implémenter une pile de lampe de base à l'aide de Docker et de l'utilitaire Docker-Compose.
Dans ce tutoriel, vous apprendrez:
- Comment installer docker et docker-compose sur Ubuntu 20.04
- Comment définir les services et les volumes à l'aide de Docker-Compose
- Comment mapper les ports hôtes vers les ports de conteneur dans le fichier de configuration Docker-Compose
- Comment utiliser des supports de liaison et des volumes nommés
- Comment construire un projet avec Docker-Compose
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Installé Ubuntu 20.04 ou amélioré Ubuntu à 20.04 FOCAL FOSSA |
Logiciel | docker, docker-compose |
Autre | Autorisations racinaires pour construire des conteneurs Docker et lancer le service Docker |
Conventions | # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier |
-
Installation de packages et démarrage du service Docker
Afin de créer une pile de lampe basée sur Docker sur Ubuntu 20.04 Focal Fossa, la première chose que nous devons faire est d'installer le logiciel dont nous avons besoin:
docker
lui-même, etcomposer docker
, qui est un utilitaire qui nous permet d'organiser facilement des applications multi-continents en utilisantyaml
fichiers de configuration. Les deux forfaits sont disponibles dans les référentiels officiels d'Ubuntu. Nous pouvons les installer viaapte
:$ sudo apt installer docker-compose
Une fois l'installation effectuée, nous devons démarrer le
docker
Service et l'activer au démarrage. Nous pouvons effectuer les deux opérations avec une seule commande:$ systemctl activer - maintenant docker
-
Configuration du projet
La première étape de notre voyage consiste à créer le répertoire que nous utiliserons comme racine de notre projet. Pour le bien de cet article, nous l'appellerons
linuxconfig
. À l'intérieur de ce répertoire, nous en créerons un autre,Document de document
, qui hébergera nos fichiers de site Web. Nous pouvons créer les deux répertoires à la fois en utilisant le-p
option dumkdir
commande:$ mkdir -p linuxconfig / documentroot
À l'intérieur de
linuxconfig
répertoire, nous définissons la configuration Docker-Compose pour notre projet dans un fichier YAML, qui par défaut doit être appelécomposer docker.YML
. Il y a trois strophes principales que nous pouvons utiliser dans le fichier de configuration: prestations de service, volumes et réseaux.Chaque section est utilisée pour configurer l'aspect correspondant d'un projet. Dans ce tutoriel, nous n'utiliserons que les deux premiers. Nous implémenterons les composants de la pile de lampe en tant que services à l'intérieur de leurs propres conteneurs séparés.
Les conteneurs créés avec Docker-Compose seront membres du même réseau et pourront donc se parler par défaut. Dans le réseau, chaque conteneur sera en mesure de référencer les autres par un nom d'hôte identique à son nom, ou par le nom utilisé pour définir le service mis en œuvre par le conteneur.
Par défaut, les conteneurs seront nommés en utilisant le nom du répertoire contenant le fichier de configuration comme préfixe. Dans ce cas, par exemple, le conteneur utilisé pour un service appelé php-httpd, sera nommé linuxconfig_php-httpd_1.
-
Définition du service PHP + HTTPD
Le premier service que nous définirons dans le fichier de configuration comprendra Php Comme le module du serveur Web Apache. Nous utiliserons l'une des images PHP officielles disponibles sur docker comme base pour notre conteneur, en particulier celui avec le
-apache
suffixe, qui fournit la configuration que nous avons mentionnée ci-dessus. Commençons à écrire notre configuration:
CopieVersion: '3.7 'Services: PHP-HTTPD: Image: PHP: 7.Ports 3-Apache: - 80:80 Volumes: - "./ Documentroot: / var / www / html "
La première chose que nous avons spécifiée dans le fichier de configuration est
version
. Avec cette instruction, nous déclarons quelle version spécifique du fichier composé que nous allons utiliser. Au moment de l'écriture, version3.7
est le dernier et recommandé. - Après avoir déclaré la version du fichier de composition, nous avons commencé à écrire le service strophe; À l'intérieur, nous définissons les services qui composeront notre pile de lampe. Nous avons appelé le premier service
php-httpd
. Le nom du service est complètement arbitraire, mais est toujours une bonne habitude d'en utiliser un qui est significatif dans le contexte du projet.Le
image
L'instruction est utilisée pour spécifier sur quelle image le conteneur doit être basé, dans ce casPHP: 7.3-APACH
.Le
ports
L'instruction est utilisée pour exposer les ports sur le conteneur et pour créer une carte entre les ports hôtes et les ports de conteneur. Une telle carte est définie en séparant les ports avec un:
. Sur le côté gauche, nous spécifions le port hôte, et à droite, le port à l'intérieur du conteneur il doit être mappé pour. Dans ce cas, nous avons cartographié le port80
sur l'hôte du port80
sur le conteneur, car c'est le port par défaut utilisé par le serveur Web Apache.La dernière instruction que nous avons utilisée est
volumes
: avec lui, nous pouvons spécifier un mappage entre un volume nommé ou un chemin (relatif ou absolu) sur le système hôte sur un chemin sur le conteneur, sur lequel il sera monté.Dans notre configuration, le
./ Documentroot
Le répertoire hébergera les fichiers du site: il sera monté sur le/ var / www / html
Répertoire à l'intérieur du conteneur, car ce dernier est la racine du document utilisée par l'Apache VirtualHost par défaut. Une telle configuration est appelée un lier la monture et est particulièrement utile pendant le développement car les modifications que nous apportons sur les fichiers du projet sont immédiatement reflétées à l'intérieur du conteneur. L'inconvénient de cette configuration est qu'il établit une dépendance entre le conteneur et la structure de fichiers de la machine hôte, diminuant l'un des principaux avantages de l'utilisation de Docker: Portabilité.Le répertoire à monter à l'intérieur du conteneur sera créé automatiquement s'il n'existe pas lorsque le
secouer docker
La commande est lancée: dans ce cas, il appartiendra à root s'il n'est pas spécifié autrement.À l'intérieur de
Document de document
Répertoire Nous pouvons maintenant créer un fichier d'index et essayer de créer notre projet pour vérifier que la configuration fonctionne:$ echo "documentroot / index.php $ sudo docker-compose up -d
Après avoir exécuté la commande, les images Docker nécessaires seront téléchargées depuis DockerHub et les conteneurs que nous serons créés avec les paramètres que nous avons fournis et exécuter en arrière-plan (ils ne bloqueront pas le terminal), en raison de la
-d
option que nous avons fournie aucomposer docker
commande. Avec le projet en cours d'exécution, si nous naviguons vershôte local
Avec notre navigateur, nous devrions voir la page suivante:
La page phpinfoPour arrêter le projet, du répertoire hébergeant le
composer docker.YML
Fichier, nous pouvons exécuter:$ sudo docker-compose stop
Définir le service MariaDB
Une partie essentielle de la pile de lampe est la couche de base de données. Dans notre configuration, nous utiliserons Mariadb et son image officielle Docker disponible sur Dockerhub:
CopieVersion: '3.7 'Services: PHP-HTTPD: Image: PHP: 7.Ports 3-Apache: - 80:80 Volumes: - "./ Documentroot: / var / www / html "Mariadb: image: mariaDB: 10.5.2 volumes: - MariaDb-volume: / var / lib / mysql Environment: tz: "Europe / Rome" mysql_allow_empty_password: "non" mysql_root_password: "rootpwd" Mariadb-Volume:
À l'intérieur de prestations de service strophe, nous avons défini un autre service et l'appeler
mariadb
Et avec leimage
instruction que nous avons spécifiée, nous souhaitons utiliser ledix.5.2
Version de l'image officielle.Dans la définition de service précédente, nous avons utilisé un support de liaison. Cette fois, au lieu de cela, nous avons utilisé un Docker approprié volume nommé, Pour être monté sur
/ var / lib / mysql
À l'intérieur du conteneur (c'est le répertoire de données par défaut utilisé par MariADB). Contrairement à un support de liaison, les volumes nommés ne créent pas de dépendances du conteneur sur la structure du système de fichiers hôte. Complètement gérés par Docker, ils sont la méthode recommandée de persistance des données qui autrement seraient perdues lorsque les conteneurs sont détruits.Les volumes nommés peuvent être définis dans le principal
volumes
strophe du fichier de configuration et peut être référencé à partir duvolumes
sous-section de chaque service défini. Dans ce cas, nous avons appelé notre volumemariadb-volume
.En tant qu'étape suivante, nous avons défini la valeur de certains Variables d'environnement utilisé pour influencer le comportement du conteneur. Les variables d'environnement sont définies dans le
environnement
Section d'une définition de service. Les variables que nous avons définies dans ce cas ont l'effet suivant:Variable Effet Tz Définissez le fuseau horaire utilisé par le serveur MariaDB Mysql_allow_empty_password Activer ou désactiver l'utilisation du mot de passe vide pour l'utilisateur de la racine DB Mysql_root_password Il s'agit d'une variable obligatoire et est utilisée pour définir le mot de passe de l'utilisateur de la racine DB Mysql_database Utilisé éventuellement pour spécifier le nom de la base de données à créer sur le démarrage de l'image Mysql_user Utilisé éventuellement pour spécifier le nom d'un utilisateur qui sera créé avec des autorisations SuperUser pour la base de données spécifiée avec MySQL_DATABASE Mysql_password Utilisé pour spécifier le mot de passe pour l'utilisateur créé avec le nom fourni par MySQL_USER À ce stade, nous devrions avoir un serveur Web fonctionnel capable de travailler avec PHP et une base de données pour stocker nos données.
Bonus - phpmyadmin
Notre pile de lampe de base devrait maintenant être complète. En prime, nous voulons peut-être ajouter phpmyadmin à lui, afin de contrôler facilement notre base de données MARIADB à partir d'une interface Web conviviale. Ajoutons la définition de service associée à notre configuration docker-compose:
CopieVersion: '3.7 'Services: PHP-HTTPD: Image: PHP: 7.Ports 3-Apache: - 80:80 Volumes: - "./ Documentroot: / var / www / html "Mariadb: image: mariaDB: 10.5.2 volumes: - MariaDb-volume: / var / lib / mysql Environment: tz: "Europe / Rome" mysql_allow_empty_password: "non" mysql_root_password: "rootpwd" mysql_user: 'TESTUSER' MySQL_PASSWORD: 'TestPassword' Image: PHPMYADMIN / PHPMYADMIN Liens: - Ports «MariaDB: DB»: - 8081: 80 Volumes: Mariadb-volume:
Nous avons nommé notre service
phpmyadmin
et le configuré pour utiliser le phpmyadmin / phpmyadmin image de dockerhub. Nous avons également utilisé leliens
mot-clé pour la première fois; à quoi ça sert? Comme nous le savons déjà, par défaut, et sans aucune configuration spéciale nécessaire, tous les conteneurs créés dans la même configuration Docker-Compose peuvent se parler. L'image PhpMyAdmin est configurée pour référencer un conteneur de base de données en cours d'exécution par ledb
Nom, nous devons donc créer un alias avec le même nom pour notre service MariaDB. C'est exactement celiens
est utilisé pour: définir des alias supplémentaires pour atteindre un service d'un autre.À l'intérieur de la définition du service, nous avons également cartographié le port
8081
de notre machine hôte, à port80
À l'intérieur du conteneur (le port 80 est déjà mappé au même port à l'intérieur du conteneur PHP-HTTPD). L'interface phpmyadmin sera donc accessible LocalHost: 8081 adresse. Reconstruisons notre projet et vérifions-le:$ sudo docker-compose up -d --build
La page de connexion phpmyadminNous pouvons nous connecter avec les informations d'identification que nous avons définies pour notre service de base de données, et vérifier que le
testdb
La base de données a été créée:
Page d'accueil phpmyadmin
Utilisation d'une image personnalisée pour un service
Dans les exemples ci-dessus, nous avons toujours utilisé des images de vanille dans notre définition de services. Il y a des cas dans lesquels nous pouvons vouloir utiliser des images Docker personnalisées basées sur eux. Par exemple, disons que nous voulons construire le service PHP-HTTPD, mais incluez une extension PHP supplémentaire: comment pouvons-nous le faire? Sur la racine du projet, nous définissons un nouveau répertoire, et pour la commodité, le nommez après le service:
$ mkdir php-httpd
À l'intérieur de ce répertoire, nous créons un dockerfile, utilisé pour étendre l'image de base, avec le contenu suivant:
De PHP: 7.3-APACHE Étiquette responsable = "Egdoc.dev @ gmail.com "Run apt-get update && apt-get install -y libmcrypt-dev \ && pecl install mcrypt-1.0.2 \ && docker-php-ext-inable mcrypt
De retour dans notre
composer docker.YML
fichier, nous modifions la définition duphp-httpd
service. Nous ne pouvons pas référencer l'image directement comme nous l'avons fait auparavant. Au lieu de cela, nous spécifions le répertoire contenant notre DockerFile personnalisé comme contexte de construction:
CopieVersion: '3.7 'Services: php-httpd: build: Context: ./ PORTS PHP-HTTPD: - 80:80 Volumes: - "./ Documentroot: / var / www / html "[…]
Dans le
construire
Section Nous définissons les configurations qui sont appliquées au moment de la construction. Dans ce cas, nous avons utilisécontexte
Pour référencer le répertoire contenant le DockerFile: ledit répertoire est utilisé comme contexte de construction, et son contenu est envoyé au démon Docker lorsque le conteneur est construit. Pour appliquer la modification, nous devons reconstruire le projet.Soit dit en passant, pour en savoir plus sur les extensions supplémentaires dans l'image PHP Docker, vous pouvez jeter un œil à la documentation officielle, et en particulier sur Extensions PECL section.
Conclusions
Dans ce tutoriel, nous avons vu comment construire une pile de lampe de base en utilisant la technologie des conteneurs avec Docker et Docker-Compose. Nous avons vu comment définir les différents services à l'intérieur du compose Docker.Fichier de configuration YML, et comment configurer les supports de liaison, les volumes nommés et les ports de conteste hôte. Nous avons également vu comment utiliser des images personnalisées. Vous pouvez jeter un œil à la référence Docker-Compose pour la liste détaillée des instructions qui peuvent être utilisées dans le fichier de configuration Docker-Compose.
Tutoriels Linux connexes:
- Ubuntu 20.04 WordPress avec installation Apache
- Choses à installer sur Ubuntu 20.04
- Ampache Raspberry Pi Installation
- Installation de WordPress OpenLitesPeed
- Comment travailler avec l'API WooCommerce REST avec Python
- Comment installer la pile de lampe sur Almalinux
- Comment configurer le serveur Linux Apache MySQL Python
- Ubuntu 20.04: WordPress avec l'installation de Nginx
- Comment changer le mot de passe de l'utilisateur de MariaDB
- Installez MySQL sur Ubuntu 20.04 LTS Linux
- « Ubuntu 20.04 Installation de bureau à la cannelle
- Comment énumérer et supprimer le référentiel PPA sur Ubuntu 20.04 Linux »