Condivisione della tecnologia

【Docker-compose】Costruisci un ambiente php

2024-07-12

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

Orchestrazione del contenitore con composizione Docker

1. Cos'è

Compose è uno strumento software lanciato da Docker Company, in grado di gestire più contenitori Docker per formare un'applicazione. È necessario definire un file di configurazione docker-compose.yml in formato YAML e scrivere le relazioni di chiamata tra più contenitori.Quindi, con un solo comando, puoi avviare/arrestare questi contenitori contemporaneamente

  • · Docker-Compose è il progetto open source ufficiale di Docker, responsabile della realizzazione della rapida orchestrazione dei cluster di contenitori Docker.

2. Cosa puoi fare?

Docker consiglia di eseguire un solo servizio in ciascun contenitore Poiché il contenitore docker stesso occupa pochissime risorse, è meglio separare ciascun servizio separatamente. Ma poi ci troviamo di fronte a un altro problema?

Se devo distribuire più servizi contemporaneamente, devo scrivere un Dockerfile separato per ciascun servizio e quindi creare l'immagine e il contenitore. Questo è estenuante, quindi docker ci fornisce ufficialmente lo strumento di distribuzione multiservizio docker-compose? .

Ad esempio, per implementare un progetto di microservizi Web, oltre al contenitore del servizio Web stesso, è spesso necessario aggiungere il contenitore del servizio mysql del database back-end, il server Redis, il centro di registrazione eureka e persino i contenitori di bilanciamento del carico, ecc. . . . . .

Compose consente agli utenti di definire un set di contenitori di applicazioni associati come progetto tramite un file modello docker-compose.yml separato (formato YAML).

Puoi facilmente definire un'applicazione multi-contenitore con un file di configurazione, quindi utilizzare un singolo comando per installare tutte le dipendenze dell'applicazione e completare la compilazione. Docker-Compose risolve il problema di come gestire e orchestrare i contenitori.

3. Dove andare

  • Sito ufficiale · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

Indirizzo di download accelerato

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

Aggiungi autorizzazioni eseguibili

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

Controlla se l'installazione è andata a buon fine

docker-compose --version
  • 1
  • disinstallare

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

4. Comporre concetti fondamentali

  • Tre passaggi per utilizzare Compose

    Scrivi Dockerfile per definire ciascuna applicazione di microservizi e creare il file immagine corrispondente

    Utilizza docker-compose.yml per definire un'unità aziendale completa e organizzare vari servizi contenitore nell'applicazione complessiva.

    Infine, esegui il comando docker-compose up per avviare ed eseguire l'intera applicazione per completare la distribuzione con un clic e andare online.

  • Componi comandi comuni

    docker-compose -h # Visualizza la guida

    docker-compose up # Avvia tutti i servizi docker-compose

    docker-compose up -d # Avvia tutti i servizi docker-compose e li esegue in background

    docker-compose down # Arresta ed elimina contenitori, reti, volumi e immagini.

    L'ID del servizio in docker-compose exec yml # Inserisci all'interno dell'istanza del contenitore

    docker-compose exec file docker-compose.yml scritto ID servizio /bin/bash

    docker-compose ps # Visualizza tutti i contenitori in esecuzione attualmente orchestrati da docker-compose

    docker-compose top # Visualizza i processi contenitore correnti orchestrati da docker-compose

    ID servizio nei log di composizione docker yml # Visualizza il log di output del contenitore

    docker-compose config # Controlla la configurazione

    docker-compose config -q # Controlla la configurazione e l'output solo se ci sono problemi

    docker-compose restart # Riavvia il servizio

    docker-compose start # Avvia il servizio

    docker-compose stop # Interrompe il servizio

installazione del comando 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. Combattimento pratico: configurare il server DNS in Linux e creare l'ambiente lemp (Nginx + MySQL (MariaDB) + PHP)

Richiedere

1) Nella macchina virtuale Linux, configura l'indirizzo IP su 192.168.90.215 (x sono le ultime 3 cifre del tuo ID studente, y è specificato da te) e la macchina virtuale potrà accedere a Internet normalmente;

2) Configura il server DNS, il dominio è cr.com (abc sono le iniziali del tuo nome), una volta completata la configurazione, usa nslookup per verificare la risoluzione forward e reverse;

3) Configura LEMP (ovvero Nginx + MySQL (MariaDB) + PHP) e accedi a www.cr.com (abc sono le tue iniziali) tramite l'host reale per accedere al LEMP creato. (Non è possibile modificare il file host per la risoluzione locale, ma è necessario utilizzare il proprio DNS configurato)

6. Configura la risoluzione DNS

Per prima cosa configura l'IP statico per Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (se non si apre, cambia l'indirizzo qui sotto)

//fare

Modifica il file /etc/named.conf

vim /etc/named.conf
  • 1

Modificare i valori di ascolto e query su any

Configura il DNS per risolvere cr.com su 192.168.90.215

vim /etc/named.rfc1912.zones 
  • 1

Aggiungi alla fine del file

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 per salvare

Modifica il file di configurazione corrispondente vim /var/named/com.cr.loop

Aggiungere quanto segue

$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

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

Aggiungere quanto segue

$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

Riavvia i DNS

systemctl restart named
  • 1

Visualizza lo stato del DNS

systemctl status named
  • 1

Iniziato con successo

Analisi in avanti di nslookup cr.com

Analisi inversa di nslookup 192.168.90.215

Configura lemp

Scrivi il file docker-compose.yml in /mydocker/lemp

vim /mydocker/lemp/docker-compose.yml compila il seguente contenuto

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

Crea nginx/Dockerfile in /mydocker/lemp/

compilare

FROM nginx:latest

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

Crea default.conf

Compila il seguente contenuto

 

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

Crea php/Dockerfile in /mydocker/lemp/

compilare

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Orchestra i contenitori docker

 docker-compose up -d 
  • 1

Docker ps per visualizzare lo stato di esecuzione del contenitore

Avviato con successo

Questa macchina accede all'ambiente php e all'ambiente nginx tramite IP

Accesso riuscito

Configura il server DNS locale come macchina virtuale, che è 192.168.90.215

Apri la finestra cmd ed esegui un test ping su cr.com

Ping eseguito correttamente

Accedi all'ambiente php creato tramite il nome di dominio

Modifica il file di configurazione nginx

Il nome di dominio finale accede direttamente al sito web