Criação de uma imagem de contêiner para uso no Amazon ECS - Amazon Elastic Container Service

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? e Visão geral do Docker.

Pré-requisitos

Antes de começar, certifique-se de que os seguintes pré-requisitos sejam atendidos.

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
  1. 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.

  2. 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.

  3. Atualize os pacotes instalados e o cache de pacotes em sua instância.

    sudo yum update -y
  4. Instale o pacote do Docker Community Edition mais recente.

    sudo yum install docker
  5. Inicie o serviço Docker.

    sudo service docker start
  6. Adicione o ec2-user ao grupo docker, de modo que você possa executar comandos do Docker sem usar o sudo.

    sudo usermod -a -G docker ec2-user
  7. 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 grupo docker apropriadas.

  8. Verifique se o ec2-user pode executar comandos do Docker sem sudo.

    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
  1. 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
  2. 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ção EXPOSE significa que a porta 80 do contêiner é a responsável por receber, e a instrução CMD inicia o servidor Web.

  3. 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 .
  4. 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
  5. 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".

  6. 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.

  7. 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
  1. Crie um repositório do Amazon ECR para armazenar sua imagem hello-world. Observe repositoryUri na saída.

    Substitua region com seu Região da AWS, por exemplo, us-east-1.

    aws ecr create-repository --repository-name hello-repository --region region

    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"
        }
    }
  2. Marque a imagem hello-world com o valor repositoryUri da etapa anterior.

    docker tag hello-world aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. 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-stdin aws_account_id.dkr.ecr.region.amazonaws.com

    Saí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.

  4. 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 --region region --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: