NGINX es un software popular de código abierto que se utiliza para servicios web, proxy inverso, almacenamiento en caché, equilibrio de carga, transmisión de medios y más. También puede funcionar como servidor proxy para correo electrónico (IMAP, POP3 y SMTP) y como proxy inverso y balanceador de carga para servidores HTTP, TCP y UDP. Nginx es bastante popular y se utiliza en muchos sitios web de alto tráfico en la actualidad. En este tutorial, aprenderemos cómo ejecutar Nginx en un contenedor usando Docker. Abordaremos cómo descargar y ejecutar la imagen, crear varios contenedores a partir de esa imagen, aprender sobre las tareas en primer plano y en segundo plano y ver cómo inspeccionar los registros.
Imagen Vs Contenedor
- Una imagen es una aplicación que desea ejecutar
- Un contenedor es una instancia de la imagen que se ejecuta como un proceso
- Puede haber muchos contenedores ejecutándose a través de la misma imagen
- Docker Hub es el registro principal de imágenes en hub.docker.com
Lanzar un contenedor
Podemos lanzar un nuevo contenedor usando el siguiente comando.
ejecución del contenedor de Docker --publish 80:80 nginx
Es posible que vea alguna salida en el terminal similar a esta.
$ docker container run --publish 80:80 nginx /docker-entrypoint.sh: /docker-entrypoint.d/ no está vacío, intentará realizar la configuración /docker-entrypoint.sh: buscando scripts de shell en /docker-entrypoint.d/ /docker-entrypoint.sh: Ejecutando /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: obteniendo la suma de comprobación de /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: escucha habilitada en IPv6 en /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Ejecutando /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuración completa; listo para empezar
El panel de Docker también mostrará el contenedor en ejecución.
Abra un navegador para visitar http: // localhost y deberíamos ver un servidor web Nginx ofreciendo felizmente la página web predeterminada.
En la terminal, también veremos algunos registros del navegador que realiza solicitudes desde el servidor web.
172.17.0.1 - - [28 / Sep / 2020: 15: 10: 03 +0000] "GET / HTTP / 1.1" 304 0 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML , como Gecko) Chrome / 85.0.4183.121 Safari / 537.36 "" - "
Cómo funciona
Ejecutar contenedor de Docker: publicar 80:80 nginx
Cuando se activa el comando anterior, el motor Docker realiza una serie de pasos.
- Descargue la imagen de Nginx desde Docker Hub, si aún no está en la caché local
- Comenzó un nuevo contenedor a partir de la imagen de Nginx
- Puerto 80 abierto en la IP del host
- Enruta el tráfico del host del puerto 80 al puerto IP del contenedor 80
Ejecución en modo independiente
La razón por la que pudimos ver la salida del registro del contenedor de inmediato es porque el contenedor se está ejecutando en primer plano. Muchas veces solo desea que el contenedor se ejecute en segundo plano. Esto es lo que se conoce como modo independiente . Primero, debemos detener el contenedor en ejecución. Podemos hacer esto encontrando primero el ID o el nombre del contenedor con docker ps , luego usando el comando docker stop para detenerlo.
$ docker ps ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS 902affce585b nginx "/docker-entrypoint.…" Hace 2 horas Hasta 2 horas 0.0.0.0:80->80/tcp sharp_hoover
Según el resultado anterior, podemos detener el contenedor con cualquiera de los dos siguientes:
Ahora ejecutemos la imagen nuevamente, creando un nuevo contenedor que se ejecuta en modo separado. Tenga en cuenta el uso de la bandera –detach.
$ docker container run --publish 80:80 --detach nginx
Detach le dice a Docker que ejecute el contenedor en segundo plano, y la única salida a la terminal, en este caso, es la identificación única del contenedor. Cada vez que ejecuta un nuevo contenedor, obtiene una nueva identificación única. Veamos los contenedores que se ejecutan nuevamente usando el contenedor docker ls.
$ contenedor docker ls ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS d62595efbb6c nginx "/docker-entrypoint.…" Hace 4 minutos Hasta 4 minutos 0.0.0.0:80->80/tcp quizzical_hermann
Nuestro nuevo contenedor Nginx que se ejecuta en segundo plano tiene el nombre quizzical_hermann .
Podemos detener el contenedor con la ventana acoplable contenedor dejar de pasar solo los primeros dos caracteres del ID del contenedor.
$ docker contenedor parada d62 d62
Listado de contenedores
En el pasado, podía usar docker ps para mostrar contenedores. La forma más apropiada de enumerar contenedores ahora es usando el contenedor docker ls . Al enumerar nuestros contenedores, no vemos ninguno.
$ contenedor docker ls ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
Esto se debe a que si un contenedor no se está ejecutando, no se mostrará. Para ver todos los contenedores, incluso los que no se están ejecutando, debe agregar la marca -a .
$ contenedor docker ls -a ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS d62595efbb6c nginx "/docker-entrypoint.ΓǪ" Hace 14 minutos Salió (0) Hace 4 minutos quizzical_hermann 902affce585b nginx "/docker-entrypoint.ΓǪ" hace 2 horas Salió (0) hace 16 minutos sharp_hoover
Ahora vemos ambos contenedores. Esos nombres divertidos se crean automáticamente si no especifica un nombre para el contenedor durante la creación. Al igual que cada ID es único para los contenedores, también se requiere que el nombre sea único. Docker genera aleatoriamente el nombre a partir de una lista de código abierto de adjetivos y hackers notables de científicos. Entonces, ¿cómo podemos darle nuestro propio nombre a un contenedor? Podemos hacer esto especificando la bandera –name.
$ docker container run --publish 80:80 --detach --name my_nginx_server nginx 4402b968a91567195e690ca4c5c7d79525c5823f640ff0d2cceb6ee045d2a8d6 $ contenedor docker ls -a ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS 4402b968a915 nginx "/docker-entrypoint.ΓǪ" Hace 8 segundos Hasta 7 segundos 0.0.0.0:80->80/tcp my_nginx_server d62595efbb6c nginx "/docker-entrypoint.ΓǪ" Hace 19 minutos Salió (0) Hace 10 minutos quizzical_hermann 902affce585b nginx "/docker-entrypoint.ΓǪ" hace 2 horas Salió (0) hace 21 minutos sharp_hoover
Visualización de registros de contenedores en modo independiente
Si un contenedor se está ejecutando en segundo plano, no vemos ningún resultado de los registros en la terminal. Si queremos ver esos registros, podemos hacerlo con el comando docker container logs.
$ contenedor docker registra my_nginx_server /docker-entrypoint.sh: /docker-entrypoint.d/ no está vacío, intentará realizar la configuración /docker-entrypoint.sh: buscando scripts de shell en /docker-entrypoint.d/ /docker-entrypoint.sh: Ejecutando /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: obteniendo la suma de comprobación de /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: escucha habilitada en IPv6 en /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Ejecutando /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuración completa; listo para empezar 172.17.0.1 - - [28 / Sep / 2020: 17: 18: 38 +0000] "GET / HTTP / 1.1" 304 0 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML , como Gecko) Chrome / 85.0.4183.121 Safari / 537.36 "" - " 172.17.0.1 - - [28 / Sep / 2020: 17: 18: 39 +0000] "GET / HTTP / 1.1" 304 0 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML , como Gecko) Chrome / 85.0.4183.121 Safari / 537.36 "" - "
Trabajar con contenedores
Estos son los comandos con los que querrá familiarizarse cuando trabaje con sus contenedores.
$ contenedor docker Uso: COMANDO contenedor docker Administrar contenedores Comandos: adjuntar Adjuntar flujos de entrada, salida y error estándar local a un contenedor en ejecución commit Crea una nueva imagen a partir de los cambios de un contenedor cp Copia archivos / carpetas entre un contenedor y el sistema de archivos local crear Crea un nuevo contenedor diff Inspecciona cambios en archivos o directorios en el sistema de archivos de un contenedor exec Ejecuta un comando en un contenedor en ejecución exportar Exportar el sistema de archivos de un contenedor como un archivo tar inspeccionar Mostrar información detallada sobre uno o más contenedores kill Mata a uno o más contenedores en ejecución registros Obtener los registros de un contenedor ls Contenedores de lista pause Pausa todos los procesos dentro de uno o más contenedores puerto Lista de asignaciones de puertos o una asignación específica para el contenedor podar Quitar todos los recipientes parados renombrar Cambiar el nombre de un contenedor reiniciar Reiniciar uno o más contenedores rm Retire uno o más contenedores ejecutar Ejecutar un comando en un nuevo contenedor start Iniciar uno o más contenedores detenidos stats Muestra una transmisión en vivo de estadísticas de uso de recursos de contenedores detener Detener uno o más contenedores en ejecución arriba Muestra los procesos en ejecución de un contenedor anular la pausa Reanudar todos los procesos dentro de uno o más contenedores actualizar Actualizar la configuración de uno o más contenedores espere Bloquear hasta que uno o más contenedores se detengan, luego imprima sus códigos de salida Ejecute 'docker container COMMAND --help' para obtener más información sobre un comando.
Retirar contenedores
En este punto, tenemos 3 contenedores en total. Uno está funcionando y los otros dos están inactivos. Intentemos eliminarlos todos de una sola vez.
$ contenedor estibador rm 440 d62 902 d62 902 Respuesta de error del daemon: no puede eliminar un contenedor en ejecución 4402b968a91567195e690ca4c5c7d79525c5823f640ff0d2cceb6ee045d2a8d6. Detenga el contenedor antes de intentar retirarlo o forzarlo.
Se eliminaron dos de los contenedores, sin embargo, podemos ver por el mensaje de error que un contenedor en ejecución no se puede eliminar sin detenerlo primero o forzar la eliminación. Aquí usamos la bandera -f para forzar la eliminación del contenedor en ejecución.
$ contenedor docker rm 440 -f 440
Finalmente, enumeramos todos los contenedores una vez más, y podemos ver que nuestro patio de recreo está limpio.
$ contenedor docker ls -a ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
Resumen
Aprendimos sobre algunos comandos básicos para trabajar con Nginx y Docker. Los comandos con los que queremos estar familiarizados después de este tutorial se enumeran aquí.
ejecución de contenedor docker | Ejecuta un comando en un contenedor nuevo |
contenedor docker ls | Lista de contenedores |
parada de contenedor de docker | Detenga uno o más contenedores en ejecución |
Inicio del contenedor Docker | Inicie uno o más contenedores detenidos |
registros de contenedor de Docker | Coge los registros de un contenedor |
parte superior del contenedor docker | Mostrar los procesos en ejecución de un contenedor |
contenedor docker rm | Retire uno o más contenedores |
0 Comentarios