Como executar o Nginx dentro do Docker (para uma subida automática fácil)

Uma das cargas de trabalho mais comuns do Docker é usá-lo para hospedar servidores da Web como NGINX e Apache para executar uma frota de entrega de conteúdo de alto desempenho que pode ser facilmente dimensionada e gerenciada automaticamente. Mostraremos como configurá-lo com o NGINX.

Configurando o NGINX no Docker

O Docker é uma plataforma de conteinerização usada para empacotar seu aplicativo e todo o seu código em uma única imagem de contêiner facilmente gerenciável. O processo para fazer isso é bastante semelhante a como você configuraria um novo servidor: o contêiner é uma lousa em branco, então você precisa instalar dependências, criar seu próprio código, copiar os artefatos de compilação e copiar qualquer configuração. Felizmente, você não precisa automatizar tanto. O NGINX já tem um contêiner Docker disponível publicamente, que você pode usar como ponto de partida para seu aplicativo.

Claro, dependendo do aplicativo que você está conteinerizando, isso pode ser um pouco mais complicado. Se você estiver implementando um CMS como o WordPress, provavelmente precisará de um banco de dados externo, pois os contêineres não foram projetados para serem persistentes. Um bom ponto de partida para o WordPress, em particular, seria o contêiner WordPress Docker.

Para ter algo um pouco mais complicado do que uma simples página da web Hello World, criaremos um novo diretório de projeto e inicializaremos um aplicativo Vue.js básico. Sua configuração será diferente dependendo do conteúdo que você está veiculando, mas a ideia geral é a mesma.

Na raiz do seu projeto, crie um novo arquivo simplesmente chamado Dockerfile sem extensão. Isso funcionará como a configuração de compilação. Por padrão, o contêiner está vazio e inclui apenas aplicativos e dependências instalados com a imagem base. Você precisará copiar o código do seu aplicativo; Se você está apenas servindo conteúdo estático, isso é fácil, mas se você estiver trabalhando com aplicativos do lado do servidor, como o WordPress, talvez seja necessário instalar dependências adicionais.

A configuração a seguir é bastante simples. Como este é um aplicativo de nó, precisamos executar npm run build para ter um build pronto para distribuição. Podemos lidar com tudo isso no Dockerfile, configurando uma compilação de contêiner de duas partes:

 FROM node:latest as build-stage WORKDIR /src COPY package*.json ./ RUN npm install COPY ./ . RUN npm run build FROM nginx como estágio de produção RUN mkdir /src COPY --from=build-stage /src/dist /src COPY nginx.conf /etc/nginx/nginx.conf

A primeira linha do comando FROM o node do contêiner do Docker Hub e cria um novo contêiner chamado build-stage . O seguinte cd ' conhece esse diretório e copia package.json . Portanto, npm install funciona, copie o código do aplicativo e inicie o processo de compilação. Se seu aplicativo precisar ser compilado a partir do código-fonte, recomendamos fazer algo semelhante a isso.

O estado a seguir inicia o contêiner nginx para servir como distribuição de produção. cria o diretório src e, em seguida, copia, do contêiner do build-stage , a pasta /src/dist/ contendo os artefatos de compilação, além da pasta do contêiner de produção /src . Em seguida, copie para um arquivo de configuração NGINX.

Você também precisará criar um novo arquivo chamado .dockerignore , para instruí-lo a ignorar node_modules , bem como quaisquer artefatos de compilação de compilações locais.

 **/node_modules **/dist

O Dockerfile se refere a um nginx.conf , que você também precisará criar. Se você estiver executando uma configuração mais complexa com várias configurações em /sites-available , convém criar uma nova pasta para a configuração do NGINX e copiá-la.

 usuário nginx; trabalhadores_processos 1; error_log /var/log/nginx/error.log advertir; pid /var/run/nginx.pid; eventos { 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; enviar arquivo ativado; keepalive_timeout 65; servidor { escuta 80; server_name localhost; localização / { raiz /src; index index.html; try_files $uri $uri/ /index.html; } página_de_erro 500 502 503 504 /50x.html; local = /50x.html { root /usr/share/nginx/html; } } }

Este é apenas um servidor web HTTP. A maneira mais fácil de configurar HTTPS seria executar o certbot LetsEncrypt localmente e copiar o certificado de /etc/letsencrypt/live/example.com/fullchain.pem para o contêiner de produção. Esses certificados são válidos por 90 dias, portanto, você deve renová-los periodicamente. Você pode automatizar isso como parte do processo de criação do contêiner.

Quando tudo estiver em ordem, você pode executar a compilação do Docker:

 construção do docker. -t meu-aplicativo

Isso criará o contêiner como my-app , após o qual você poderá marcá-lo e enviá-lo ao ECS ou a um registro de contêiner para possível distribuição. Claro, você deve primeiro testá-lo localmente com o docker run Bind localhost:8080 na porta 80 da instância NGINX:

 docker run -d -p 8080:80 meu-aplicativo

Depois de criar uma imagem, implantá-la na produção é bastante simples. Você pode ler nosso guia para configurar uma implantação de contêiner de escalonamento automático no AWS ECS para obter mais informações ou ler nosso guia para configurar um pipeline de CI/CD com contêineres para gerenciar compilações e implantações automatizadas.

  • O que é a tecla "Fn" ou "Function" em um teclado?
  • Este relógio Raspberry Pi mostra a hora e o tempo – Revisão Geek

descubra mais conteúdo

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

Deixe uma resposta Cancelar resposta

O que é o Docker nginx?

Nginx (pronuncia-se "engine-x") é um servidor proxy reverso de código aberto para protocolos HTTP, HTTPS, SMTP, POP3 e IMAP, bem como um balanceador de carga, cache HTTP e um servidor web (servidor de origem) . O projeto nginx começou com um forte foco em alta simultaneidade, alto desempenho e baixo uso de memória.

O nginx precisa do Docker?

Quando o nginx é instalado diretamente em seu host, você pode fornecer uma página de manutenção 503 que não depende do Docker ou de qualquer contêiner executando . Pode ser servido diretamente pelo nginx e é super fácil de ligar e desligar. Ele requer apenas que um arquivo HTML independente exista em um local específico em seu sistema de arquivos.

Como uso o nginx Docker?

Executando o NGINX Open Source em um Docker Container

  1. Inicie uma instância do NGINX em execução em um contêiner e usando a configuração padrão do NGINX com o seguinte comando: $ docker run -name mynginx1 -p 80:80 -d nginx.
  2. Verifique se o contêiner foi criado e está em execução com o comando docker ps:

Qual é a diferença entre Docker e nginx?

O Docker pode ser classificado como uma ferramenta na categoria "Plataformas e contêineres de máquina virtual", enquanto o NGINX Unit é agrupado em "Servidores Web" . Alguns dos recursos oferecidos pelo Docker são: Ferramentas de desenvolvedor integradas. imagens abertas e portáteis.

Ir arriba