GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Esegui il provisioning di NGINX su Docker e aumenta le capacità del server

La containerizzazione dei carichi di lavoro dei server Web, come NGINX, è diventata comune nel moderno settore IT. NGINX crea un flusso di lavoro container perfetto e sposare NGINX con Docker è un'attività perfettamente logica.

In questo tutorial imparerai come eseguire il provisioning di un nuovo contenitore NGINX su Docker in esecuzione su qualsiasi sistema operativo come Windows, macOS o Linux!

Prerequisiti

Per seguire questo tutorial, assicurati di avere quanto segue:

  • Docker Desktop:questo tutorial utilizza la versione 3.5.1.
  • Windows 10:il tutorial utilizza Windows per eseguire Docker, ma gli stessi passaggi generali possono essere applicati anche a Linux o macOS.
  • Il motore Docker se sei su Linux.

Provisioning di un NGINX su Docker Container

Iniziamo creando prima un'immagine Docker Linux con NGINX già installato. Questo tutorial utilizzerà una distribuzione Linux minima chiamata Alpine Linux che esegue l'ultima versione disponibile di NGINX, che è la 1.21.1 in questo tutorial.

1. Innanzitutto, apri una sessione del terminale in cui eseguirai tutti i comandi Docker necessari.

2. Esegui il docker pull comando per recuperare, o pull , l'ultimo nginx immagine dal repository NGINX Docker Hub utilizzando mainlin-alpine ramo. Docker Hub è un repository open source di immagini Docker disponibile per gli utenti Docker.

docker pull nginx:mainline-alpine

Il recupero dell'immagine più recente è ottimo per lo sviluppo e il test, ma spesso è una procedura ottimale per la produzione specificare una versione specifica come docker pull nginx:1.21.0-alpine .

3. Quindi, esegui docker run comando per eseguire un container da nginx:mainline-alpine immagine.

  • -i – Questo parametro richiede una console interattiva, che restituisce l'output del contenitore interno al terminale.
  • -t – Qui chiedi una console Pseudo-TTY al contenitore in esecuzione che consente l'uso del comando chiave ctrl-c per uscire dal contenitore interattivo.
  • --name – Il nome dell'esecuzione di questo contenitore deve essere univoco per ogni nuovo contenitore (a meno che non vengano rimossi i contenitori precedenti con lo stesso nome).
  • -p – Quale porta da interno a esterno utilizzare, che in questo caso è la porta interna di 80 dovrebbe essere mappato sulla porta esterna di 80 .
  • "nome immagine" – Da quale immagine Docker eseguire il provisioning del contenitore, in questo caso, il nginx:mainline-alpine precedentemente estratto immagine.
docker run -i -t --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. In un browser web, vai al contenitore Docker in esecuzione andando su http://localhost . In caso di successo, vedrai la pagina di benvenuto di NGINX predefinita. Poiché nel passaggio precedente, hai avviato il container mappando la porta esterna 80 alla porta 80 del container (-p 80:80 ), NGINX dovrebbe essere disponibile.

5. Infine, apri nuovamente la tua console della riga di comando e premi la combinazione di tasti ctrl-c per uscire dal contenitore in esecuzione. Hai ancora del lavoro da fare!

Mappatura di file di siti Web su un container

A questo punto, puoi facilmente visualizzare un contenitore Docker NGINX con la pagina Web di esempio. Ora devi caricare il tuo sito web personalizzato su NGINX. Poiché i contenitori sono immutabili e cancelleranno eventuali modifiche quando vengono ricreati, devi fornire un'origine del sito Web al di fuori dell'immagine Docker.

Il server Web NGINX in esecuzione su Linux archivia i file del sito Web in /usr/share/nginx/html directory. Invece di caricare i file direttamente in questa directory, dovresti mappare un percorso di archiviazione a tale percorso in modo che il contenitore estragga quei file dal percorso di archiviazione all'avvio.

Sul tuo sistema operativo host locale:

1. Innanzitutto, crea una directory da mappare al contenitore NGINX Docker. In questo esempio, C:\Articoli\NGINX viene utilizzato per eseguire il mapping a /usr/share/nginx/html.

2. Nella directory appena creata, crea un file, index.html , che contiene quanto segue. Questo file sarà il file che NGINX serve durante la navigazione sul sito web.

<html>
    <head></head>
    <body>
        <h1>ATA Test!</h1>
        <p>Welcome to your custom NGINX index file.</p>
    </body>
</html>

3. Quindi, sulla riga di comando, richiama docker run con quasi tutti gli stessi parametri del passaggio tre nella sezione precedente. Ma questa volta, includi il parametro del volume, -v come mostrato di seguito.

Nell'esempio seguente, il -v il parametro sta mappando il C:\Articles\NGINX locale nella directory dell'immagine /usr/share/nginx/html directory. La creazione di questa mappatura ti consentirà di modificare i contenuti di /usr/share/nginx/html contenitore modificando il contenuto di C:\Articoli\NGINX directory.

Questo dimostra la posizione di un file di Windows, ma questo comando funziona allo stesso modo su Linux. Ad esempio, -v /usr/share/myfiles:/usr/share/nginx/html .

docker run -i -t -v c:\Articles\NGINX:/usr/share/nginx/html --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. Infine, apri un browser web e vai a http://localhost . Vedrai quanto segue visualizzato in base al index.html appena creato file poiché ora sta estraendo file dal C:\Articles\NGINX locale directory.

Esecuzione di un'applicazione PHP-FPM con un contenitore Docker NGINX

A questo punto, puoi visualizzare un contenitore Docker NGINX e modificare facilmente i contenuti di un sito Web. Se hai bisogno di una configurazione di base, potrebbe funzionare. Ma, se prevedi di eseguire un'applicazione web su NGINX, devi fare un po' più di lavoro.

A titolo di esempio, abilitiamo l'immagine NGINX appena creata per eseguire il popolare linguaggio di scripting Web PHP utilizzando PHP FastCGI Process Manager (FPM).

Per questa sezione, devono essere introdotti diversi nuovi concetti. Per definire facilmente un insieme di contenitori e i relativi collegamenti, è meglio utilizzare un file Docker Compose. Docker Compose definisce la serie di servizi e applicazioni correlate in un file YAML (Yet Another Markup Language).

Inoltre, poiché è necessario copiare un file di configurazione personalizzato per il sito predefinito, nel contenitore NGINX, una versione personalizzata di nginx:mainline-alpine l'immagine è necessaria. Per estendere un'immagine esistente, un dockerfile viene utilizzato e compilato con build entra nel file Docker Compose.

1. Creare una directory per contenere i file di configurazione. In questo esempio, la directory C:\Articoli\NGINXPHP viene utilizzato.

2. Innanzitutto, crea il file, dockerfile , con i seguenti contenuti.

# The image to pull the base configuration from
FROM nginx:mainline-alpine
# The directory where any additional files will be referenced
WORKDIR C:\Articles\NGINXPHP
# Copy the custom default.conf from the WORKDIR (.) and overwrite the existing internal configuration in the NGINX container
COPY ./default.conf /etc/nginx/conf.d/default.conf

3. Quindi, crea il file docker-compose.yml file, contenente quanto segue.

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # The NGINX custom container
  web:
    # Instead of referencing image: nginx:mainline-alpine here, use build to
    # reference the current directory (.), which will look for a dockerfile
    # by default
    build: .
    # The external directory location to map to an internal location
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html
    # The external port mapping to internal port mapping
    ports:
      - "80:80"
  php:
    image: php:fpm-alpine
    # It is important that both containers can reference the same files
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html

4. Infine, crea il file di configurazione NGINX, default.conf , con quanto segue.

server {
    # The port to listen on
    listen 80;
    # The root directory, which must exactly match the internal volume share
    root /usr/share/nginx/html;

    # For all files with the PHP extension run the following
    location ~ ^/.+\.php(/|$) {
        # Pass the request to the host "php" and port 9000 (default PHP-FPM port)
        fastcgi_pass  php:9000;
	# Include the default NGINX FastCGI Parameters
        include       fastcgi_params;
	# Define one additional parameter telling PHP-FPM where to find the file
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Potresti chiederti da dove provenga "PHP" per il nome host. Per impostazione predefinita, viene creata una rete condivisa da tutte le applicazioni contenute nel servizio utilizzando il nome della directory principale. A ogni contenitore viene assegnato un nome host uguale al nome dell'applicazione. In questo esempio, la rete è nginxphp e i nomi host sono web e php .

5. In una sessione del terminale, vai alla directory del file di configurazione Docker personalizzato, che in questo esempio è C:\Articoli\NGINXPHP . Esegui il comando docker-compose up per generare e avviare il tuo servizio personalizzato.

6. Ora che il set di contenitori è attivo e funzionante, è necessario un file PHP per testare la configurazione. Crea il file, index.php , nella directory condivisa di NGINX Docker che è C:\Articoli\NGINXPHP in questo tutorial.

<?php phpinfo(); ?>

7. Aprire un browser Web e accedere a http://localhost/index.php per verificare che il file PHP sia visualizzato correttamente.

Conclusione

I contenitori Docker NGINX sono incredibilmente utili per il test e lo sviluppo. Con la cura e l'attenzione adeguate, i container Docker possono aiutare ad aumentare notevolmente anche le capacità di un server Web di produzione!

Ora che hai eseguito correttamente il provisioning di un contenitore NGINX e di un contenitore PHP-FPM collegato, prova ad aggiungere un contenitore di database al mix per un ambiente di applicazioni Web completo.


Docker
  1. Immagine Docker del server web Nginx basata su Debian GNU/Linux

  2. Monitora il server Linux usando Prometheus e Grafana

  3. Come installare e ospitare il server OpenVPN con Docker

  4. Che cos'è Docker (e contenitori Linux?)

  5. Come imballare e trasferire immagini Docker da un server all'altro

Suggerimenti e trucchi per proteggere il tuo server Web Nginx

Come installare Docker in Ubuntu 20.04 ed eseguire Nginx Container

Crea un proxy inverso NGINX in Docker e impara 1 nuova abilità!

25 Devi conoscere i comandi di Nginx per sviluppatori e amministratori

.NET Core e Docker

.NET e Docker