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

Come eseguire NGINX Inside Docker (per un ridimensionamento automatico semplice)

Uno dei carichi di lavoro più comuni di Docker è utilizzarlo per containerizzare server Web come NGINX e Apache per eseguire un parco di distribuzione di contenuti ad alte prestazioni che può essere facilmente ridimensionato e gestito automaticamente. Ti mostreremo come configurarlo con NGINX.

Configurazione di NGINX in Docker

Docker è una piattaforma di containerizzazione, utilizzata per impacchettare l'applicazione e tutto il relativo codice in un'unica immagine container facilmente gestibile. Il processo per eseguire questa operazione è abbastanza simile a come faresti per configurare un nuovo server:il contenitore è una lavagna vuota, quindi dovrai installare dipendenze, creare il tuo codice, copiare gli artefatti di compilazione e copiare su qualsiasi configurazione. Fortunatamente, non devi automatizzare così tanto. NGINX ha già un container Docker disponibile pubblicamente, che puoi utilizzare come punto di partenza per la tua applicazione.

Ovviamente, a seconda dell'applicazione che stai containerizzando, questo può essere un po' più complicato. Se stai implementando un CMS come WordPress, probabilmente dovrai disporre di un database esterno, poiché i contenitori non sono progettati per essere persistenti. Un buon punto di partenza per WordPress, in particolare, sarebbe il contenitore Docker di WordPress.

Allo scopo di avere qualcosa di un po' più coinvolto di una semplice pagina Web di Hello World, creeremo una nuova directory di progetto e inizializzeremo un'applicazione Vue.js di base. La tua configurazione sarà diversa a seconda del contenuto che stai offrendo, ma l'idea generale è la stessa.

Nella radice del tuo progetto, crea un nuovo file chiamato semplicemente Dockerfile senza estensione. Questo fungerà da configurazione di build. Per impostazione predefinita, il contenitore è vuoto e include solo le applicazioni e le dipendenze installate con l'immagine di base. Dovrai copiare il codice della tua applicazione; se stai fornendo solo contenuti statici, è facile, ma se lavori con applicazioni lato server come WordPress, potresti dover installare dipendenze aggiuntive.

La configurazione seguente è piuttosto semplice. Poiché si tratta di un'applicazione nodo, è necessario eseguire npm run build per ottenere una build pronta per la distribuzione. Possiamo gestire tutto questo nel Dockerfile, impostando una build del contenitore in due parti:

FROM node:latest as build-stageWORKDIR /srcCOPY package*.json ./RUN npm installCOPY ./ .RUN npm run buildFROM nginx come production-stageRUN mkdir /srcCOPY --from=build-stage /src/dist /srcCOPY nginx.conf /etc/nginx/nginx.conf

La prima riga è FROM comando estrae il node container da Docker Hub e crea un nuovo container chiamato build-stage . Il prossimo cd 's in quella directory e copia su package.json . Quindi, esegue npm install , quindi copia il codice dell'app e avvia il processo di compilazione. Se la tua applicazione deve essere compilata dal sorgente, ti consigliamo di fare qualcosa di simile a questo.

Lo stato successivo estrae nginx contenitore per fungere da distribuzione di produzione. Crea il src directory e quindi copia, dalla build-stage contenitore, il /src/dist/ cartella contenente gli artefatti di compilazione, oltre a /src cartella del contenitore di produzione. Quindi copia su un file di configurazione NGINX.

Ti consigliamo anche di creare un nuovo file chiamato .dockerignore , per dirgli di ignorare node_modules così come qualsiasi artefatto di build da build locali.

**/node_modules**/dist

Il Dockerfile fa riferimento a un nginx.conf , che dovrai anche creare. Se stai eseguendo una configurazione più complessa con più configurazioni in /sites-available , potresti voler creare una nuova cartella per la tua configurazione NGINX e copiarla.

utente nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$indirizzo_remoto - $utente_remoto [$tempo_locale] "$richiesta" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log principale; invia il file; keepalive_timeout 65; server {ascolta 80; nome_server host locale; posizione / { radice / origine; indice index.html; file_prova $uri $uri/ /indice.html; } pagina_errore 500 502 503 504 /50x.html; posizione =/50x.html { radice /usr/share/nginx/html; } }}

Questo è solo un server web HTTP. Il modo più semplice per configurare HTTPS sarebbe eseguire localmente il certbot di LetsEncrypt e copiare il certificato da /etc/letsencrypt/live/example.com/fullchain.pem nel contenitore di produzione. Questi certificati sono validi per 90 giorni, quindi dovrai rinnovarli regolarmente. Puoi automatizzare questa operazione come parte del processo di creazione del contenitore.

Una volta che tutto è in ordine, puoi eseguire la build Docker:

Questo creerà il contenitore come my-app , dopodiché sei libero di taggarlo e inviarlo a ECS o a un registro dei contenitori per l'eventuale distribuzione. Ovviamente dovresti prima testarlo localmente con docker run vincolante localhost:8080 alla porta 80 dell'istanza NGINX:

docker esegui -d -p 8080:80 mia-app

Dopo aver creato un'immagine, distribuirla in produzione è abbastanza semplice. Puoi leggere la nostra guida alla configurazione di una distribuzione di container con scalabilità automatica su AWS ECS per saperne di più, oppure leggere la nostra guida sulla configurazione di una pipeline CI/CD con container per gestire build e distribuzioni automatizzate.

RELAZIONATO: Che cos'è un file PEM e come si usa?


Docker
  1. Come eseguire Nginx in un contenitore Docker:una guida passo passo

  2. Come eseguire MySQL in Docker Container:una guida semplice e facile da seguire

  3. Come eseguire un programma all'interno di un contenitore Docker?

  4. Come eseguire un comando su un contenitore Docker in esecuzione

  5. Come eseguire Nginx all'interno di un contenitore Docker senza interruzioni?

Come eseguire un'app .NET in Docker

Come eseguire NGINX Inside Docker (per un ridimensionamento automatico semplice)

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come creare immagini Docker in una pipeline CI GitLab

Come eseguire i contenitori Docker