Partage de technologie

【Docker-compose】Créer un environnement php

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Orchestration de conteneurs Docker-compose

1. Qu'est-ce que

Compose est un outil logiciel lancé par Docker Company, qui peut gérer plusieurs conteneurs Docker pour former une application. Vous devez définir un fichier de configuration docker-compose.yml au format YAML et écrire les relations d'appel entre plusieurs conteneurs.Ensuite, avec une seule commande, vous pouvez démarrer/arrêter ces conteneurs en même temps

  • · Docker-Compose est le projet open source officiel de Docker, chargé de réaliser l'orchestration rapide des clusters de conteneurs Docker.

2. Que pouvez-vous faire ?

Docker recommande de n'exécuter qu'un seul service dans chaque conteneur. Étant donné que le conteneur Docker lui-même consomme très peu de ressources, il est préférable de séparer chaque service séparément. Mais alors, nous sommes confrontés à un autre problème ?

Si je dois déployer plusieurs services en même temps, dois-je écrire un Dockerfile distinct pour chaque service, puis créer l'image et le conteneur ? C'est épuisant, donc Docker nous fournit officiellement l'outil de déploiement multiservice docker-compose ? .

Par exemple, pour implémenter un projet de microservice Web, en plus du conteneur de service Web lui-même, il est souvent nécessaire d'ajouter le conteneur de service mysql de la base de données principale, le serveur Redis, le centre d'enregistrement eureka et même des conteneurs d'équilibrage de charge, etc. . . . . .

Compose permet aux utilisateurs de définir un ensemble de conteneurs d'applications associés en tant que projet via un fichier modèle docker-compose.yml distinct (format YAML).

Vous pouvez facilement définir une application multi-conteneurs avec un fichier de configuration, puis utiliser une seule commande pour installer toutes les dépendances de l'application et terminer la construction. Docker-Compose résout le problème de la gestion et de l'orchestration des conteneurs.

3. Où aller

  • Site officiel · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

Adresse de téléchargement accéléré

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

Ajouter des autorisations exécutables

chmod +x /usr/local/bin/docker-compose
  • 1

Vérifiez si l'installation a réussi

docker-compose --version
  • 1
  • désinstaller

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. Composer des concepts de base

  • Trois étapes pour utiliser Compose

    Écrivez Dockerfile pour définir chaque application de microservice et créer le fichier image correspondant

    Utilisez docker-compose.yml pour définir une unité commerciale complète et organiser divers services de conteneurs dans l'application globale.

    Enfin, exécutez la commande docker-compose up pour démarrer et exécuter l'intégralité de l'application afin de terminer le déploiement en un clic et de vous connecter.

  • Composer des commandes communes

    docker-compose -h # Afficher l'aide

    docker-compose up # Démarrer tous les services docker-compose

    docker-compose up -d # Démarrez tous les services docker-compose et exécutez-les en arrière-plan

    docker-compose down # Arrêtez et supprimez les conteneurs, les réseaux, les volumes et les images.

    L'identifiant du service dans docker-compose exec yml # Entrez dans l'instance du conteneur

    docker-compose exec fichier docker-compose.yml écrit identifiant de service /bin/bash

    docker-compose ps # Afficher tous les conteneurs en cours d'exécution actuellement orchestrés par docker-compose

    docker-compose top # Afficher les processus de conteneur actuels orchestrés par docker-compose

    ID du service dans les journaux docker-compose yml # Afficher le journal de sortie du conteneur

    docker-compose config # Vérifier la configuration

    docker-compose config -q # Vérifiez la configuration et la sortie uniquement en cas de problèmes

    docker-compose restart # Redémarrer le service

    docker-compose start # Démarrer le service

    docker-compose stop # Arrêter le service

installation de la commande docker-machine

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. Combat pratique : configurer le serveur DNS sous Linux et créer l'environnement lemp (Nginx + MySQL (MariaDB) + PHP)

Exiger

1) Dans la machine virtuelle Linux, configurez l'adresse IP sur 192.168.90.215 (x sont les 3 derniers chiffres de votre identifiant d'étudiant, y est spécifié par vous-même), et la machine virtuelle peut accéder à Internet normalement ;

2) Configurez le serveur DNS, le domaine est cr.com (abc est les initiales de votre nom), une fois la configuration terminée, utilisez nslookup pour vérifier la résolution avant et arrière ;

3) Configurez LEMP (c'est-à-dire Nginx + MySQL (MariaDB) + PHP) et accédez à www.cr.com (abc est vos initiales) via l'hôte réel pour accéder au LEMP construit. (Vous ne pouvez pas modifier le fichier hosts pour une résolution locale, mais vous devez utiliser votre propre DNS configuré)

6. Configurer la résolution DNS

Configurez d'abord l'adresse IP statique pour Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (si elle ne peut pas être ouverte, modifiez l'adresse ci-dessous)

//faire

Editez le fichier /etc/named.conf

vim /etc/named.conf
  • 1

Remplacez les valeurs d'écoute et de requête par n'importe quelle

Configurez DNS pour résoudre cr.com en 192.168.90.215

vim /etc/named.rfc1912.zones 
  • 1

Ajouter à la fin du fichier

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq à sauvegarder

Editez le fichier de configuration correspondant vim /var/named/com.cr.loop

Ajoutez ce qui suit

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Modifier vim /var/named/cr.com.zone

Ajoutez ce qui suit

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Redémarrer le DNS

systemctl restart named
  • 1

Afficher l'état du DNS

systemctl status named
  • 1

Démarré avec succès

Analyse avant nslookup cr.com

Analyse inversée nslookup 192.168.90.215

Configurer lemp

Écrivez le fichier docker-compose.yml dans /mydocker/lemp

vim /mydocker/lemp/docker-compose.yml remplissez le contenu suivant

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Créez nginx/Dockerfile dans /mydocker/lemp/

remplir

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

Créer un fichier default.conf

Remplissez le contenu suivant

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  fastcgi_split_path_info ^(.+.php)(/.+)$;

  fastcgi_pass php:9000;

 fastcgi_index index.php;

 include fastcgi_params;

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

Créez un fichier php/Docker dans /mydocker/lemp/

remplir

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Orchestrer les conteneurs Docker

 docker-compose up -d 
  • 1

Docker ps pour afficher l'état d'exécution du conteneur

Démarré avec succès

Cette machine accède à l'environnement php et à l'environnement nginx via IP

Accès réussi

Configurez le serveur DNS local en tant que machine virtuelle, qui est 192.168.90.215

Ouvrez la fenêtre cmd et effectuez un test ping sur cr.com

Ping réussi

Accédez à l'environnement php construit via le nom de domaine

Modifier le fichier de configuration nginx

Le nom de domaine final accède directement au site Internet