GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak spustit NGINX Inside Docker (pro snadné automatické škálování)

Jednou z nejběžnějších úloh Dockeru je použití ke kontejnerizaci webových serverů, jako jsou NGINX a Apache, k provozování vysoce výkonné flotily doručování obsahu, kterou lze snadno automaticky škálovat a spravovat. Ukážeme vám, jak to nastavit pomocí NGINX.

Nastavení NGINX uvnitř Dockeru

Docker je kontejnerizační platforma, která se používá k zabalení vaší aplikace a veškerého jejího kódu do jednoho snadno spravovatelného obrázku kontejneru. Postup je velmi podobný tomu, jak byste postupovali při nastavování nového serveru – kontejner je prázdný list, takže budete muset nainstalovat závislosti, vytvořit svůj kód, zkopírovat artefakty sestavení a zkopírovat jakákoli konfigurace. Naštěstí nemusíte tolik automatizovat. NGINX již má veřejně dostupný kontejner Docker, který můžete použít jako výchozí bod pro svou aplikaci.

Samozřejmě, v závislosti na aplikaci, kterou kontejnerizujete, to může být trochu složitější. Pokud nasazujete CMS, jako je WordPress, budete pravděpodobně potřebovat externí databázi, protože kontejnery nejsou navrženy tak, aby byly trvalé. Dobrým místem pro začátek pro WordPress by byl zejména kontejner WordPress Docker.

Abychom mohli zapojit něco trochu víc než jednoduchou webovou stránku Hello World, vytvoříme nový adresář projektu a inicializujeme základní aplikaci Vue.js. Vaše konfigurace se bude lišit v závislosti na obsahu, který zobrazujete, ale obecná myšlenka je stejná.

V kořenovém adresáři projektu vytvořte nový soubor jednoduše nazvaný Dockerfile bez prodloužení. To bude fungovat jako konfigurace sestavení. Ve výchozím nastavení je kontejner prázdný a obsahuje pouze aplikace a závislosti nainstalované se základním obrazem. Budete muset zkopírovat kód vaší aplikace; pokud pouze poskytujete statický obsah, je to snadné, ale pokud pracujete s aplikacemi na straně serveru, jako je WordPress, možná budete muset nainstalovat další závislosti.

Následující konfigurace je docela základní. Protože se jedná o uzlovou aplikaci, musíme spustit npm run build získat sestavení připravené pro distribuci. To vše můžeme zvládnout v Dockerfile nastavením sestavení dvoudílného kontejneru:

FROM node:latest as build-stage
WORKDIR /src
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

FROM nginx as production-stage
RUN mkdir /src
COPY --from=build-stage /src/dist /src
COPY nginx.conf /etc/nginx/nginx.conf

První řádek je FROM příkaz stáhne node kontejneru z Docker Hub a vytvoří nový kontejner s názvem build-stage . Další cd 's do tohoto adresáře a zkopíruje přes package.json . Poté spustí npm install , poté zkopíruje kód aplikace a spustí proces sestavení. Pokud je třeba vaši aplikaci sestavit ze zdroje, budete chtít udělat něco podobného.

Další stav vyvolá nginx kontejner, který bude sloužit jako produkční nasazení. Vytváří src a poté zkopíruje z build-stage kontejner, /src/dist/ složku obsahující artefakty sestavení, přejděte do /src složka výrobního kontejneru. Poté se zkopíruje přes konfigurační soubor NGINX.

Budete také chtít vytvořit nový soubor s názvem .dockerignore , abyste mu řekli, aby ignoroval node_modules stejně jako všechny artefakty staveb z místních staveb.

**/node_modules
**/dist

Dockerfile odkazuje na nginx.conf , kterou budete také muset vytvořit. Pokud provozujete složitější konfiguraci s více konfiguracemi v /sites-available , možná budete chtít vytvořit novou složku pro konfiguraci NGINX a zkopírovat ji.

user  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  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  /var/log/nginx/access.log  main;
  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    location / {
      root   /src;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}

Toto je pouze webový server HTTP. Nejjednodušší způsob, jak nastavit HTTPS, by bylo spustit lokálně certbot společnosti LetsEncrypt a zkopírovat certifikát z /etc/letsencrypt/live/example.com/fullchain.pem do výrobního kontejneru. Tyto certifikáty jsou platné 90 dní, takže je budete muset pravidelně obnovovat. Toto můžete automatizovat jako součást procesu sestavování kontejneru.

Jakmile je vše v pořádku, můžete spustit sestavení Docker:

docker build . -t my-app

Tím se kontejner vytvoří jako my-app , poté jej můžete označit a odeslat do ECS nebo do registru kontejnerů pro případné nasazení. Měli byste to samozřejmě nejprve otestovat lokálně pomocí docker run vazba localhost:8080 na port 80 instance NGINX:

docker run -d -p 8080:80 my-app

Jakmile máte vytvořený obraz, jeho nasazení v produkci je poměrně jednoduché. Můžete si přečíst našeho průvodce nastavením nasazení kontejneru s automatickým škálováním na AWS ECS, kde se dozvíte více, nebo si přečíst našeho průvodce nastavením kanálu CI/CD s kontejnery pro automatizované sestavení a nasazení.

SOUVISEJÍCÍ: Co je soubor PEM a jak jej používáte?


Docker
  1. Jak spustit program uvnitř kontejneru Docker?

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak použít Dockerfile k vytvoření Docker Image

  1. Jak nasadit kontejner nginx s Dockerem na Linode

  2. Jak spustit MySQL v kontejneru Docker

  3. Jak spustit Nginx v kontejneru Docker bez zastavení?

  1. Jak spustit Nginx v kontejneru Docker:Průvodce krok za krokem

  2. Jak spustit MySQL v Docker Container:Jednoduchý a snadno sledovatelný průvodce

  3. Jak spustit úlohu cron uvnitř kontejneru dockeru