Noções básicas do Docker para Amazon ECS - Amazon Elastic Container Service

Noções básicas do Docker para Amazon ECS

O Docker é uma tecnologia que fornece a você as ferramentas para criar, executar, testar e implantar aplicações distribuídas que são baseadas em contêineres do Linux. O Amazon ECS usa imagens do Docker nas definições de tarefa para iniciar contêineres como parte das tarefas nos clusters.

A AWS e o Docker trabalharam em conjunto para criar uma experiência de desenvolvedor simplificada que permite a implação e o gerenciamento de contêineres no Amazon ECS diretamente usando as ferramentas do Docker. Agora você pode criar e testar os contêineres localmente usando o Docker Desktop e o Docker Compose e implantá-los no Amazon ECS no Fargate. Para começar a integração com o Amazon ECS e o Docker, baixe o Docker Desktop e, opcionalmente, cadastre-se para obter uma ID do Docker. Para obter mais informações, consulte Docker Desktop e Cadastro de ID do Docker.

O Docker fornece uma demonstração sobre a implantação de contêineres no Amazon ECS. Para obter mais informações, consulte Implantar contêineres do Docker no Amazon ECS.

A documentação neste guia supõe que os leitores possuem uma compreensão básica do 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.

Instalação do Docker

Importante

Se você já tiver um Docker instalado, vá para Criar uma imagem do Docker.

O Docker Desktop é um aplicação fácil de instalar para o ambiente Mac ou Windows, que permite criar e compartilhar aplicações e microsserviços em contêineres. O Docker Desktop inclui o Docker Engine, o cliente da CLI do Docker, o Docker Compose e outras ferramentas úteis no uso do Docker com o Amazon ECS. Para obter mais informações sobre como instalar o Docker Desktop no sistema operacional de sua preferência, consulte Visão geral do Docker Desktop.

Se você 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 e a instalação do Docker Engine e da CLI do Docker.

Para instalar o Docker em uma instância do Amazon EC2

  1. Inicie uma instância com a AMI do Amazon Linux 2 ou do Amazon Linux. Para obter mais informações, consulte Iniciar uma instância no Guia do usuário do Amazon EC2 para instâncias do Linux.

  2. Conecte-se à sua instância. Para obter mais informações, consulte Conectar à sua instância do Linux no Guia do usuário do Amazon EC2 para instâncias do Linux.

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

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

    Amazon Linux 2

    sudo amazon-linux-extras install docker

    Amazon Linux

    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. Você pode 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 EC2 local. Em seguida, envie a imagem a um registro de contêiner (como o Amazon ECR ou o Docker Hub) 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 ubuntu:18.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    Esse Dockerfile usa a imagem do Ubuntu 18.04. 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 do servidor Web. A instrução EXPOSE expõe a porta 80 no contêiner, 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. Execute docker images para verificar se a imagem foi criada corretamente.

    docker images --filter reference=hello-world

    Resultado:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  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. Para obter mais informações sobre o docker run, acesse a Referência de execução do Docker.

    docker run -t -i -p 80:80 hello-world
    nota

    A saída do servidor Web Apache é exibida na janela do terminal. Você pode ignorar a mensagem "Could not reliably determine the server's 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 a 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. Você pode 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.

Esta seção requer o seguinte:

  • Tenha a AWS CLI instalada e configurada. Se você não tiver a AWS CLI instalada no sistema, consulte Instalar a AWS Command Line Interface no Guia do usuário da AWS Command Line Interface.

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

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.

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

    Resultado:

    {
        "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 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

    Resultado:

    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 Installing the AWS Command Line Interface (Instalar a AWS CLI) no AWS Command Line Interface User Guide (Manual do usuário da 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

Limpar

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