GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment exécuter NGINX Inside Docker (pour une mise à l'échelle automatique facile)

L'une des charges de travail les plus courantes de Docker consiste à l'utiliser pour conteneuriser des serveurs Web tels que NGINX et Apache afin d'exécuter une flotte de diffusion de contenu hautes performances qui peut être facilement mise à l'échelle et gérée automatiquement. Nous allons vous montrer comment le configurer avec NGINX.

Configuration de NGINX dans Docker

Docker est une plate-forme de conteneurisation, utilisée pour regrouper votre application et tout son code dans une image de conteneur facilement gérable. Le processus est assez similaire à la configuration d'un nouveau serveur - le conteneur est une ardoise vierge, vous devrez donc installer des dépendances, créer votre code, copier sur les artefacts de construction et copier sur n'importe quelle configuration. Heureusement, vous n'avez pas besoin d'automatiser autant. NGINX dispose déjà d'un conteneur Docker accessible au public, que vous pouvez utiliser comme point de départ pour votre application.

Bien sûr, selon l'application que vous conteneurisez, cela peut être un peu plus compliqué. Si vous déployez un CMS comme WordPress, vous aurez probablement besoin d'une base de données externe, car les conteneurs ne sont pas conçus pour être persistants. Un bon point de départ pour WordPress, en particulier, serait le conteneur Docker de WordPress.

Dans le but d'avoir quelque chose d'un peu plus impliqué qu'une simple page Web Hello World, nous allons créer un nouveau répertoire de projet et initialiser une application Vue.js de base. Votre configuration sera différente selon le contenu que vous diffusez, mais l'idée générale est la même.

A la racine de votre projet, créez un nouveau fichier nommé simplement Dockerfile sans extension. Cela agira comme la configuration de construction. Par défaut, le conteneur est vide et n'inclut que les applications et les dépendances qui sont installées avec l'image de base. Vous devrez copier le code de votre application ; si vous ne servez que du contenu statique, c'est facile, mais si vous travaillez avec des applications côté serveur comme WordPress, vous devrez peut-être installer des dépendances supplémentaires.

La configuration suivante est assez basique. Comme il s'agit d'une application de nœud, nous devons exécuter npm run build pour obtenir une version prête à être distribuée. Nous pouvons gérer tout cela dans le Dockerfile, en configurant une construction de conteneur en deux parties :

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

Le FROM de la première ligne la commande extrait le node conteneur de Docker Hub et crée un nouveau conteneur appelé build-stage . Le prochain cd 's dans ce répertoire et copie sur le package.json . Ensuite, il exécute npm install , puis copie le code de l'application et démarre le processus de génération. Si votre application doit être construite à partir de la source, vous voudrez faire quelque chose de similaire à ceci.

L'état suivant tire le nginx conteneur pour servir de déploiement de production. Il fait le src répertoire, puis copie, depuis le build-stage conteneur, le /src/dist/ dossier contenant les artefacts de construction, vers le /src dossier du conteneur de production. Il copie ensuite un fichier de configuration NGINX.

Vous voudrez également créer un nouveau fichier appelé .dockerignore , pour lui dire d'ignorer node_modules ainsi que tous les artefacts de build des builds locaux.

**/node_modules
**/dist

Le Dockerfile fait référence à un nginx.conf , que vous devrez également créer. Si vous exécutez une configuration plus complexe avec plusieurs configurations dans /sites-available , vous pouvez créer un nouveau dossier pour votre configuration NGINX et le copier.

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;
    }
  }
}

Il s'agit simplement d'un serveur Web HTTP. Le moyen le plus simple de configurer HTTPS serait d'exécuter le certbot de LetsEncrypt localement et de copier le certificat depuis /etc/letsencrypt/live/example.com/fullchain.pem dans le conteneur de production. Ces certificats sont valables 90 jours, vous devrez donc les renouveler régulièrement. Vous pouvez automatiser cela dans le cadre du processus de création du conteneur.

Une fois que tout est en ordre, vous pouvez lancer le build Docker :

docker build . -t my-app

Cela construira le conteneur en tant que my-app , après quoi vous êtes libre de le taguer et de l'envoyer à ECS ou à un registre de conteneurs pour un éventuel déploiement. Vous devriez, bien sûr, le tester d'abord localement avec docker run liaison localhost:8080 au port 80 de l'instance NGINX :

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

Une fois que vous avez une image construite, la déployer en production est assez simple. Vous pouvez lire notre guide sur la configuration d'un déploiement de conteneurs à mise à l'échelle automatique sur AWS ECS pour en savoir plus, ou lire notre guide sur la configuration d'un pipeline CI/CD avec des conteneurs pour gérer les builds et les déploiements automatisés.

CONNEXE : Qu'est-ce qu'un fichier PEM et comment l'utiliser ?


Docker
  1. Comment exécuter MySQL dans Docker Container :un guide simple et facile à suivre

  2. Comment exécuter un programme dans un conteneur Docker ?

  3. Comment déployer des microservices avec Docker

  4. Comment exécuter MySQL dans un conteneur Docker

  5. Comment exécuter une commande sur un conteneur Docker en cours d'exécution

Comment exécuter une application .NET dans Docker

Comment exécuter NGINX Inside Docker (pour une mise à l'échelle automatique facile)

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment créer des images Docker dans un pipeline GitLab CI

Comment exécuter des conteneurs Docker