O Amazon Elastic Container Registry (ECR) é um registro de contêiner totalmente gerenciado que pode armazenar imagens de contêineres (Docker), facilitando a extração, o compartilhamento e a implantação de imagens de contêiner. Esta postagem ensinará como criar um Amazon ECR privado e empurrar imagens de contêiner do Docker de um aplicativo Node.js Hello World com Express. Vamos começar!
Índice #
O que é Amazon ECR #
O Amazon Elastic Container Registry (ECR) é um serviço da Amazon Web (AWS) que armazena e gerencia imagens do Docker, facilitando a retirada e implantá -las em serviços como Serviço de Contêineres Elásticos (ECS), Serviço de Kubernetes elástico (EKS) e/ou funções de lambda. Abaixo está uma rápida visão geral de como funciona do Site oficial.
Amazon ECR também tem comandos Na CLI da AWS, para fazer tudo o que puder na interface do usuário. Para esta postagem, você usará a interface do usuário para construir e empurrar uma imagem do Docker para um simples Node.js Express Hello World App.
O aplicativo Node.js Hello World #
Supõe -se que você tenha o Node.js 20+ instalado em sua máquina local. Se não, você pode clonar esse repositório em seu AWS CloudShell. O AWS CloudShell possui o Nó 20 instalado por padrão.
O aplicativo Node.js Hello World usado para este tutorial é um aplicativo Express 5.x. Você pode iniciar um aplicativo Node.js com npm init
e para instalar o Express 5.x, você pode executar npm install express@next
. Então, na pasta que tem o package.json
e package-lock.json
você pode criar um index.js
Arquivo com o seguinte código:
const express = require('express');
const app = express();
const port = process.env.PORT || 80;app.get("https://geshan.com.np/", (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
É um aplicativo simples node.js com apenas uma rota /
Isso imprime Hello World
usando expresso. Se você correr node index.js
você verá o seguinte:
> node index.js
Example app listening on port 80
Depois disso, se você acertar http://localhost
No seu navegador favorito, você verá o texto Hello World
Na guia Browser.
O próximo arquivo importante no repositório é o Dockerfile
Com o seguinte conteúdo:
FROM public.ecr.aws/docker/library/node:22 AS buildWORKDIR /srv
COPY package*.json ./
RUN npm ci --omit=dev
FROM public.ecr.aws/docker/library/node:22-alpine
ENV NODE_ENV=production
USER node
COPY --from=build /srv .
ADD . .
EXPOSE 80
CMD ["node", "index.js"]
É um Dockerfile usando Docker Build em vários estágios Para criar a construção e o estágio de produção.
A maneira mais fácil de começar é clonar esse repositório no seu shell da AWS Cloud e construir a imagem lá. Antes disso, você criará primeiro o Amazon ECR privado.
Crie a Amazon Private ECR #
O Amazon Elastic Container Registry (ECR) pode ser público ou privado. Por exemplo, isso Imagem do Docker Node.js está sendo servido a partir do ECR público. Nenhuma autenticação é necessária para puxar a imagem do nó. Por outro lado, os aplicativos que você desenvolve serão acessíveis ao público, para que estejam em um ECR privado, que tenha algum tipo de controle de acesso para garantir que apenas os usuários certos tenham acesso a ele.
Para criar um registro de contêineres elásticos privados da Amazon (ECR), você deve estar conectado à sua conta da AWS e ter as permissões corretas do IAM. Este post não cobre as permissões do IAM. Em seu console da AWS, procure ecr
Como mostrado abaixo:
Em seguida, clique em Elastic Container Registry
que o levará à página seguinte:
Nesta página, clique no Create
Botão amarelo, que o levará ao formulário abaixo:
No formulário, preencha o nome do repositório como nodejs/hello-world
onde nodejs
é o espaço para nome e hello-world
é o nome do aplicativo.
É melhor manter as tags imutáveis para que não sejam substituídas. Para fazer isso, clique no Immutable
botão de rádio no Image tag mutability
seção. Depois disso, mantenha as configurações de criptografia como está e clique no Create
Botão na parte inferior desta página.
Pode levar alguns segundos para que o registro da CE seja criado, e você será levado para o Private repositories
Página de listagem como visto abaixo:
Na parte seguinte, você aprenderá a criar e empurrar uma imagem de contêiner do Docker usando o AWS CloudShell. Você está usando o AWS CloudShell, então não há nada para instalar em sua máquina. Você também pode fazer o mesmo usando sua máquina.
Construir e empurrar a imagem do Docker Node.js #
Para construir e empurrar o Node.js Hello World (com Express.js) Docker Image, você deve primeiro ir ao repositório clicando em seu nome, como visto na captura de tela anterior.
Você vai pousar no Images
Página do repositório, que se parecerá com o abaixo:
Antes de fazer qualquer outra coisa, clique no CloudShell
Link no lado inferior esquerdo da página. Ele provisionará e executará uma concha para você:
Digite o seguinte comando no shell:
mkdir projects && cd projects && git clone https://github.com/geshan/nodejs-aws-ecs-fargate.git && cd nodejs-aws-ecs-fargate
O comando acima cria uma pasta chamada projects
e depois entra nele. Depois disso, ele clara o aplicativo Node.js (Express) Hello World, que também possui o Dockerfile acima mencionado. Posteriormente, o último comando leva você ao nodejs-aws-ecs-fargate
pasta.
Isso resultará no seguinte estado:
Depois disso, clique no View push commands
Botão no lado esquerdo da página, ele mostrará um pop-up como visto abaixo:
Copie todos os quatro comandos visíveis e cole -os no bloco de notas ou no seu IDE. Os comandos que recebi foram:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <long-id-here>.dkr.ecr.us-east-1.amazonaws.comdocker build -t nodejs/hello-world .
docker tag nodejs/hello-world:latest <long-id-here>.dkr.ecr.us-east-1.amazonaws.com/nodejs/hello-world:latest
docker push <long-id-here>.dkr.ecr.us-east-1.amazonaws.com/nodejs/hello-world:latest
Em seguida, execute -os individualmente em seu console, mantendo o pedido. Após o primeiro comando, você verá Login Succeeded
. Esse comando é usado para efetuar login no registro de contêineres elásticos.
O docker build
O comando levará até 5 minutos, aguarde. Depois que a construção for concluída, será algo como o abaixo:
O terceiro comando marca o contêiner construído com nodejs/hello-world:latest
o que resulta em nada. O quarto comando empurra a imagem para o Amazon ECR privado. Se tudo correr bem, quando terminar, parecerá o seguinte:
Depois disso, feche a concha da nuvem e refresque o Images
Página do Amazon privado ECR. Você verá a imagem do Docker empurrada no registro da seguinte forma:
Você pode ver os detalhes da imagem clicando no latest
link, que vai mostrar:
Você pode implantar o URL da imagem como um contêiner em ECS, EKS ou mesmo uma função Lambda. O Próxima parte De esta série de postagens de blog, você implantará o contêiner construído e empurrado no Amazon Elastic Container Service (ECS).
Conclusão #
Nesta postagem, você aprendeu sobre o Amazon Elastic Container Registry (ECR), um serviço na Amazon Web Services (AWS). Em seguida, você construiu um aplicativo simples do Hello World Node.js com Express 5.x. Depois disso, usando a interface da AWS, você criou um registro de imagem do Docker da AWS Private AWS. Consequentemente, observe o comando fornecido. Você usou a AWS Codeshell para construir e empurrar a imagem do aplicativo Hello World Node.js depois de clonar o repositório do GitHub.
Espero que você tenha aprendido o básico do Amazon ECR, na próxima parte, você implantará o contêiner no Amazon Elastic Container Service (ECS) usando o Fargate para provisionamento de recursos sem servidor. Continue aprendendo!