Criação de uma imagem de contêiner para uso no Amazon ECS
O Amazon ECS usa imagens do Docker nas definições de tarefa para iniciar contêineres. O Docker é uma tecnologia que fornece a você as ferramentas para criar, executar, testar e implantar aplicações em contêineres.
O objetivo das etapas descritas aqui é orientá-lo na criação da primeira imagem do Docker e enviar essa imagem para o Amazon ECR, que é um registro do contêiner, para uso nas definições de tarefa do Amazon ECS. Esta demonstração supõe que você possua uma compreensão básica do que é o Docker e de como ele funciona. Para obter mais informações sobre o Docker, consulte O que é o Docker?
Pré-requisitos
Antes de começar, certifique-se de que os seguintes pré-requisitos sejam atendidos.
-
Certifique-se de ter concluído as etapas de configuração do Amazon ECR. Para obter mais informações, consulte Mover uma imagem ao longo do ciclo de vida no Amazon ECR no Guia do usuário do Amazon Elastic Container Registry.
-
Seu usuário deve ter as permissões necessárias do IAM para acessar o serviço do Amazon ECR. Para obter mais informações, consulte Políticas gerenciadas do Amazon ECR.
-
Você tem o Docker instalado. Para obter as etapas de instalação do Docker para o Amazon Linux 2, consulte Instalação do Docker no AL2023. Em todos os outros sistemas operacionais, consulte a documentação do Docker em Visão geral do Docker Desktop
. -
Tenha a AWS CLI instalada e configurada. Para obter mais informações, consulte Instalar ou atualizar para a versão mais recente da AWS CLI no Guia do usuário do AWS Command Line Interface.
Se você não tem ou não precisa de um ambiente de desenvolvimento local e preferir usar uma instância do Amazon EC2 para usar o Docker, fornecemos as seguintes etapas para a inicialização de uma instância do Amazon EC2 usando Amazon Linux 2 e a instalação do Docker Engine e da CLI do Docker.
O Docker está disponível em muitos sistemas operacionais diferentes, incluindo a maioria das distribuições modernas do Linux, como o Ubuntu, e até no MacOS e no Windows. Para obter mais informações sobre como instalar o Docker no seu sistema operacional, consulte o Guia de instalação do Docker
Não é necessário um sistema de desenvolvimento local para usar o Docker. Se você já usa o Amazon EC2, pode iniciar uma instância do Amazon Linux 2023 e instalar o Docker para começar.
Se você já tiver um Docker instalado, vá para Criar uma imagem do Docker.
Para instalar o Docker em uma instância do Amazon EC2 usando uma AMI do Amazon Linux 2023
-
Inicie uma instância com a mais recente AMI do Amazon Linux 2023. Para obter mais informações, consulte Iniciar uma instância do EC2 usando o assistente de inicialização de instâncias no Guia do usuário do Amazon EC2.
-
Conecte-se à sua instância. Para obter mais informações, consulte Conectar-se à sua instância do EC2 no Guia do usuário do Amazon EC2.
-
Atualize os pacotes instalados e o cache de pacotes em sua instância.
sudo yum update -y
-
Instale o pacote do Docker Community Edition mais recente.
sudo yum install docker
-
Inicie o serviço Docker.
sudo service docker start
-
Adicione o
ec2-user
ao grupodocker
, de modo que você possa executar comandos do Docker sem usar osudo
.sudo usermod -a -G docker ec2-user
-
Faça logout e login novamente para selecionar as novas permissões do grupo
docker
. É possível fazer isso ao fechar a janela de terminal SSH atual e se reconectar à sua instância em outra janela. Sua nova sessão SSH terá as permissões de grupodocker
apropriadas. -
Verifique se o
ec2-user
pode executar comandos do Docker semsudo
.docker info
nota
Em alguns casos, pode ser necessário reinicializar sua instância para fornecer permissões para o
ec2-user
acessar o daemon do Docker. Tente reinicializar sua instância se você vir o seguinte erro:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Criar uma imagem do Docker
As definições de tarefa do Amazon ECS usam imagens do Docker para iniciar contêineres nas instâncias de contêiner dos clusters. Nesta seção, crie uma imagem do Docker de uma aplicação Web simples e teste-a no sistema ou na instância do Amazon EC2 local. Em seguida, envie a imagem a um registro de contêiner do Amazon ECR para poder usá-la em uma definição de tarefa do Amazon ECS.
Para criar uma imagem do Docker de um aplicativo web simples
-
Crie um arquivo chamado
Dockerfile
. Um Dockerfile é um manifesto que descreve a imagem básica a ser usada para a sua imagem do Docker e o que você deseja instalar e executar nela. Para obter mais informações sobre a Dockerfiles, visite Referência de Dockerfiles. touch Dockerfile
-
Edite o
Dockerfile
que você acabou de criar e adicione o conteúdo a seguir.FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Update installed packages and install Apache RUN yum update -y && \ yum install -y httpd # Write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure Apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
Esse Dockerfile usa a imagem pública do Amazon Linux 2 hospedada no Amazon ECR Public. As instruções
RUN
atualizam os caches de pacotes, instalam alguns pacotes de software para o servidor Web e, em seguida, gravam o conteúdo de “Hello World!” na raiz do documento dos servidores Web. A instruçãoEXPOSE
significa que a porta 80 do contêiner é a responsável por receber, e a instruçãoCMD
inicia o servidor Web. -
Crie a imagem do Docker do seu Dockerfile.
nota
Algumas versões do Docker podem exigir o caminho completo para o seu Dockerfile no seguinte comando, em vez de o caminho relativo mostrado abaixo.
docker build -t hello-world .
-
Liste a sua imagem do contêiner.
docker images --filter reference=hello-world
Saída:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 194MB
-
Execute a imagem recém-criada. A opção
-p 80:80
mapeia a porta 80 exposta no contêiner para a porta 80 no sistema de host.docker run -t -i -p 80:80 hello-world
nota
A saída do servidor Web Apache é exibida na janela do terminal. É possível ignorar a mensagem "
Could not reliably determine the fully qualified domain name
". -
Abra um navegador e aponte para o servidor que está executando o Docker e hospedando seu contêiner.
-
Se você estiver usando uma instância do EC2, esse é o valor Public DNS para o servidor, que é o mesmo endereço usado para se conectar à instância com o SSH. Certifique-se de que o security group para sua instância permita o tráfego de entrada na porta 80.
-
Se você estiver executando o Docker localmente, aponte seu navegador para http://localhost/
. -
Se você estiver usando docker-machine em um computador Windows ou Mac, localize o endereço IP da VM VirtualBox que está hospedando o Docker com o comando docker-machine ip, substituindo
machine-name
pelo nome da máquina de docker que você está usando.docker-machine ip
machine-name
Você deve ver uma página da Web com seu “Hello, World!” instrução.
-
-
Interrompa o contêiner do Docker digitando Ctrl+c.
Enviar a imagem para o Amazon Elastic Container Registry
O Amazon ECR é um serviço gerenciado de registro do AWS Docker. É possível usar a CLI do Docker para enviar, extrair e gerenciar imagens dos repositórios do Amazon ECR. Para conhecer detalhes dos produtos do Amazon ECR, estudos de caso de clientes em destaque e perguntas frequentes, consulte as Páginas de detalhes dos produtos do Amazon Elastic Container Registry
Para marcar a imagem e enviá-la para o Amazon ECR
-
Crie um repositório do Amazon ECR para armazenar sua imagem
hello-world
. ObserverepositoryUri
na saída.Substitua
region
com seu Região da AWS, por exemplo,us-east-1
.aws ecr create-repository --repository-name
hello-repository
--regionregion
Saída:
{ "repository": { "registryId": "
aws_account_id
", "repositoryName": "hello-repository", "repositoryArn": "arn:aws:ecr:region
:aws_account_id
:repository/hello-repository", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository" } } -
Marque a imagem
hello-world
com o valorrepositoryUri
da etapa anterior.docker tag hello-world
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
-
Execute o comando aws ecr get-login-password. Especifique o URI de registro no qual deseja fazer a autenticação. Para obter mais informações, consulte Registry Authentication (Autenticação de registro) no Guia do usuário do Amazon Elastic Container Registry.
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.region
.amazonaws.com.rproxy.goskope.comSaída:
Login Succeeded
Importante
Se você receber um erro, instale ou atualize para a versão mais recente da AWS CLI. Para obter mais informações, consulte Instalar ou atualizar para a versão mais recente da AWS CLI no Guia do usuário do AWS Command Line Interface.
-
Envie a imagem para o Amazon ECR com o valor
repositoryUri
da etapa anterior.docker push
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
Limpeza
Para continuar a criar uma definição de tarefa do Amazon ECS e iniciar uma tarefa com a imagem do contêiner, pule para a Próximas etapas. Quando você terminar de testar a imagem do Amazon ECR, poderá excluir o repositório para não ser cobrado por armazenamento de imagens.
aws ecr delete-repository --repository-name
hello-repository
--regionregion
--force
Próximas etapas
Suas definições de tarefa exigem um perfil de execução de tarefa. Para ter mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.
Depois de criar e enviar a imagem do contêiner para o Amazon ECR, você pode usar essa imagem em uma definição de tarefa. Para obter mais informações, consulte um dos seguintes: