GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Aprovisione NGINX en Docker y aumente las capacidades del servidor

Las cargas de trabajo de servidores web en contenedores, como NGINX, se han vuelto comunes en la industria de TI moderna. NGINX crea un flujo de trabajo de contenedores perfecto y casar NGINX con Docker es una tarea perfectamente lógica.

En este tutorial, aprenderá cómo aprovisionar un nuevo contenedor NGINX en Docker que se ejecuta en cualquier sistema operativo, como Windows, macOS o Linux.

Requisitos

Para seguir este tutorial, asegúrese de tener lo siguiente:

  • Docker Desktop:este tutorial utiliza la versión 3.5.1.
  • Windows 10:el tutorial usa Windows para ejecutar Docker, pero los mismos pasos generales también se pueden aplicar a Linux o macOS.
  • El motor Docker si estás en Linux.

Aprovisionamiento de un NGINX en Docker Container

Comencemos creando primero una imagen Docker de Linux con NGINX ya instalado. Este tutorial utilizará una distribución mínima de Linux llamada Alpine Linux que ejecuta la última versión de NGINX disponible, que es 1.21.1 en este tutorial.

1. Primero, abra una sesión de terminal donde ejecutará todos los comandos Docker necesarios.

2. Ejecute docker pull comando para recuperar, o pull , el último nginx imagen del repositorio NGINX Docker Hub usando mainlin-alpine sucursal. Docker Hub es un repositorio de código abierto de imágenes de Docker disponible para los usuarios de Docker.

docker pull nginx:mainline-alpine

Recuperar la imagen más reciente es excelente para el desarrollo y las pruebas, pero a menudo es una buena práctica de producción especificar una versión específica como docker pull nginx:1.21.0-alpine .

3. A continuación, ejecute docker run comando para ejecutar un contenedor desde nginx:mainline-alpine imagen.

  • -i – Este parámetro solicita una consola interactiva, que devuelve la salida del contenedor interno al terminal.
  • -t – Aquí solicita una consola Pseudo-TTY para el contenedor en ejecución que permite el uso del comando de teclado ctrl-c para salir del contenedor interactivo.
  • --name – El nombre de esta ejecución de contenedor debe ser único para cada contenedor nuevo (a menos que se eliminen los contenedores anteriores con el mismo nombre).
  • -p – Qué puerto interno a externo usar, que en este caso el puerto interno de 80 debe asignarse al puerto externo de 80 .
  • “nombre de la imagen”:de qué imagen de Docker aprovisionar el contenedor, en este caso, el nginx:mainline-alpine extraído anteriormente imagen.
docker run -i -t --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. En un navegador web, navegue hasta el contenedor Docker en ejecución yendo a http://localhost . Si tiene éxito, verá la página de bienvenida predeterminada de NGINX. Dado que en el paso anterior, comenzó a asignar el contenedor al puerto externo 80 al puerto 80 del contenedor (-p 80:80 ), NGINX debería estar disponible.

5. Finalmente, abra su consola de línea de comandos nuevamente y presione la combinación de teclas de ctrl-c para salir del contenedor en ejecución. ¡Aún tienes trabajo por hacer!

Asignación de archivos de sitio web a un contenedor

En este punto, puede abrir fácilmente un contenedor NGINX Docker con la página web de muestra. Ahora debe cargar su sitio web personalizado en NGINX. Dado que los contenedores son inmutables y eliminarán cualquier cambio cuando se vuelvan a crear, debe proporcionar una fuente de sitio web fuera de la imagen de Docker.

El servidor web NGINX que se ejecuta en Linux almacena los archivos del sitio web en /usr/share/nginx/html directorio. En lugar de cargar archivos directamente a este directorio, debe asignar una ubicación de almacenamiento a esa ubicación para que el contenedor extraiga esos archivos de la ubicación de almacenamiento en el arranque.

En su sistema operativo host local:

1. Primero, cree un directorio para mapear al contenedor NGINX Docker. En este ejemplo, C:\Artículos\NGINX se utiliza para asignar a /usr/share/nginx/html.

2. En el directorio recién creado, cree un archivo, index.html , que contiene lo siguiente. Este archivo será el archivo que NGINX sirva al navegar al sitio web.

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

3. A continuación, en la línea de comando, invoque docker run con casi todos los mismos parámetros que el paso tres en la sección anterior. Pero esta vez, incluya el parámetro de volumen, -v Como se muestra abajo.

En el siguiente ejemplo, -v el parámetro está mapeando el C:\Articles\NGINX local directorio al /usr/share/nginx/html de la imagen directorio. La creación de esta asignación le permitirá modificar el contenido de /usr/share/nginx/html directorio contenedor modificando el contenido de C:\Articles\NGINX directorio.

Esto demuestra una ubicación de archivo de Windows, pero este comando funciona igual en Linux. Por ejemplo, -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. Finalmente, abra un navegador web y vaya a http://localhost . Verá lo siguiente en función del index.html recién creado ya que ahora está extrayendo archivos del C:\Articles\NGINX local. directorio.

Ejecución de una aplicación PHP-FPM con un contenedor Docker NGINX

A estas alturas, puede abrir un contenedor NGINX Docker y modificar fácilmente el contenido de un sitio web. Si necesita una configuración súper básica, esto podría funcionar. Pero, si planea ejecutar una aplicación web en NGINX, debe trabajar un poco más.

Como ejemplo, habilitemos la imagen NGINX recién creada para ejecutar el popular lenguaje de secuencias de comandos web PHP utilizando PHP FastCGI Process Manager (FPM).

Para esta sección, se deben introducir varios conceptos nuevos. Para definir fácilmente un conjunto de contenedores y sus enlaces, es mejor usar un archivo de Docker Compose. Docker Compose define la serie de servicios y aplicaciones relacionadas en un archivo YAML (Yet Another Markup Language).

Además, dado que necesita copiar un archivo de configuración personalizado para el sitio predeterminado, en el contenedor NGINX, una versión personalizada de nginx:mainline-alpine se necesita imagen. Para extender una imagen existente, un dockerfile se usa y construye con build paso en el archivo Docker Compose.

1. Cree un directorio para contener sus archivos de configuración. En este ejemplo, el directorio C:\Artículos\NGINXPHP se utiliza.

2. Primero, cree el archivo, dockerfile , con los siguientes contenidos.

# 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. A continuación, cree el archivo docker-compose.yml archivo, que contiene lo siguiente.

# 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. Finalmente, cree el archivo de configuración de NGINX, default.conf , con lo siguiente.

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

Puede preguntarse de dónde proviene "PHP" para el nombre de host. De forma predeterminada, se crea una red compartida por todas las aplicaciones contenidas en el servicio utilizando el nombre del directorio principal. A cada contenedor se le asigna un nombre de host igual al nombre de la aplicación. En este ejemplo, la red es nginxphp y los nombres de host son web y php .

5. En una sesión de terminal, vaya a su directorio de archivos de configuración de Docker personalizado, que en este ejemplo es C:\Articles\NGINXPHP . Ejecute el comando, docker-compose up para generar y poner en marcha su servicio personalizado.

6. Ahora que el conjunto de contenedores está funcionando, necesita un archivo PHP para probar la configuración. Cree el archivo, index.php , en su directorio compartido NGINX Docker que es C:\Articles\NGINXPHP en este tutorial.

<?php phpinfo(); ?>

7. Abra un navegador web y vaya a http://localhost/index.php para verificar que el archivo PHP se muestre correctamente.

Conclusión

Los contenedores Docker NGINX son increíblemente útiles para pruebas y desarrollo. ¡Con el cuidado y la atención adecuados, los contenedores Docker también pueden ayudar a aumentar en gran medida la capacidad de un servidor web de producción!

Ahora que ha aprovisionado con éxito un contenedor NGINX y un contenedor PHP-FPM vinculado, intente agregar un contenedor de base de datos a la combinación para un entorno de aplicación web completo.


Docker
  1. Monitoree el servidor Linux usando Prometheus y Grafana

  2. Cómo instalar y alojar un servidor OpenVPN con Docker

  3. ¿Qué es Docker (y los contenedores de Linux?)

  4. Cómo empaquetar y transferir imágenes de Docker de un servidor a otro

  5. Cómo configurar bloques de servidor Nginx en Ubuntu y CentOS

Consejos y trucos para asegurar su servidor web Nginx

Cómo instalar Docker en Ubuntu 20.04 y ejecutar Nginx Container

¡Cree un proxy inverso NGINX en Docker y aprenda 1 nueva habilidad!

25 comandos de Nginx que deben conocer los desarrolladores y administradores

.NET Core y Docker

.NET y Docker