Como instalar o Docker na instância do AWS EC2 com AMI (atualização CE / EE)

28

Qual é a maneira atual de instalar o Docker em uma instância do AWS EC2 executando a AMI? Houve um anúncio do Docker Enterprise Edition e agora quero saber se alguma coisa mudou. Até agora, eu uso yum install dockere recebo uma versão do Docker no 1.12.6, build 7392c3b/1.12.6momento (03/03/2017). No entanto, o repositório do Docker no GitHub me diz que já existem versões mais recentes.

Lembro-me do repositório oficial do Docker (pacote) tendo um pacote chamado docker-enginesubstituindo dockerhá algum tempo atrás e agora eles parecem dividir o pacote em docker-cee docker-eeonde, por exemplo, "Docker Community Edition (Docker CE) não é suportado no Red Hat Enterprise Linux". [ Fonte ]

Portanto, é ou ainda será correto usar o acima para obter a versão estável mais recente do Docker nas instâncias do EC2 executando a AMI ou preciso extrair o pacote de outro lugar (e, em caso afirmativo, qual, CE ou EE)?

mxscho
fonte
2
Você leu a documentação da AWS sobre como instalar o Docker padrão? Em caso afirmativo, qual parte não funcionou ou quais problemas não foram resolvidos? docs.aws.amazon.com/AmazonECS/latest/developerguide/…
Tim
A questão é se posso continuar fazendo assim. Como já mencionado, ele me instalará o Docker com versão na 1.12, que já é uma, se não mais atualizações menores, da versão estável mais recente (1.13, antes do CE / EE) e gostaria de saber se isso se deve ao atraso usual da atualização do repositório ou porque o guia e o pacote estão simplesmente desatualizados, o que exige algum trabalho de substituição feito por mim (por exemplo, de alguma forma, obter o Docker de seu próprio repositório?). Ainda sobre o anúncio EE mais recente que pode mudar alguma coisa ...
mxscho
Executando o que AMI?
Michael Hampton
@MichaelHampton, o mais recente para HVM, Amazon Linux AMI 2016.09.1.
Mxscho 5/03
1
Suponho que a Amazon irá atualizá-lo quando eles chegarem a ele. Embora você saiba, é claro, que ninguém deve usar o Amazon Linux para nada.
Michael Hampton

Respostas:

44

Para que o Docker seja executado na AWS AMI, siga as etapas abaixo (todas elas assumindo que você conectou a instância do EC2).

  1. Atualize os pacotes em sua instância

    [ec2-user ~]$ sudo yum update -y

  2. Instalar o Docker

    [ec2-user ~]$ sudo yum install docker -y

  3. Iniciar o serviço Docker

    [ec2-user ~]$ sudo service docker start

  4. Adicione o usuário ec2 ao grupo de janelas de encaixe para poder executar comandos do Docker sem usar o sudo.

    [ec2-user ~]$ sudo usermod -a -G docker ec2-user

Você poderá executar todos os comandos do docker sem precisar sudo. Depois de executar o 4º comando, eu precisava sair e fazer login novamente para que as alterações entrassem em vigor.

ajtrichards
fonte
3
Como eu já mencionei na pergunta, isso realmente funciona, mas instala uma versão desatualizada do Docker (ainda a versão 1.12.6 em 28/05/2017). Enquanto eu próprio mudei para a imagem do Ubuntu para minhas instâncias do EC2, o que realmente queria saber é como instalar uma das versões atuais do Docker em uma imagem da AMI. Porque (pelo menos no momento da pergunta) não havia uma maneira óbvia de obter uma instalação atualizada do Docker CE ou do Docker EE. Era sobre isso que se tratava essa questão, e é por isso que não posso aceitá-la sem hesitar. Obrigado de qualquer maneira!
Mxscho 27/05
@mxscho sim, também é o que estou procurando, então aguarde até que uma resposta que aborda a questão seja publicada.
User239558
1
Hoje, o yum install instala 17.03.1ce-1.50.amzn1
raarts
1
não funcionou para mim. Então, eu precisava fazer isso. O sudo yum instala o yum-utils e, em seguida, o sudo yum-config-manager - habilita o rhui-REGION-rhel-server-extras e, em seguida, o sudo yum install docker
TheAshwaniK
5

A parte mais difícil de entender tudo isso foi o requisito de container-selinux. Apenas encontre a versão mais recente em http://mirror.centos.org/centos/7/extras/x86_64/Packages/ e instale-a primeiro. Além disso, as instâncias do EC2 podem não ter um gerador de entropia adequado; portanto, havegedpode ser necessário instalar.

O restante é retirado de https://docs.docker.com/install/linux/docker-ce/centos/ com a adição de haveged e firewalld. Tudo isso deve ser feito como raiz de maneira sudoapropriada.

yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.42-1.gitad8f0f7.el7.noarch.rpm
yum install -q -y http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/h/haveged-1.9.1-1.el7.x86_64.rpm
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -q -y firewalld docker-ce
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload
systemctl enable haveged
systemctl start haveged
systemctl enable docker
systemctl start docker
setenforce 1

Ative o SELinux modificando /etc/sysconfig/selinuxpara ser

SELINUX=enforcing
SELINUXTYPE=targeted

Em seguida, reinicie sua instância emitindo shutdown -r now

A execução sudo docker versiondeve render a partir do momento desta postagem ...

Cliente:
 Versão: 18.03.0-ce
 Versão da API: 1.37
 Versão Go: go1.9.4
 Confirmação Git: 0520e24
 21 de março de 2018 às 23:09:15
 Sistema operacional / Arch: linux / amd64
 Experimental: false
 Orquestrador: enxame

Servidor:
 Motor:
  Versão: 18.03.0-ce
  Versão da API: 1.37 (versão mínima 1.12)
  Versão Go: go1.9.4
  Confirmação Git: 0520e24
  21 de março de 2018 às 23:13:03
  Sistema operacional / Arch: linux / amd64
  Experimental: false
Archimedes Trajano
fonte
1
Você já tentou executar o Docker em outras AMIs, exceto o CentOS? Você pode compartilhar suas experiências?
Suncatcher
1
Não usei o centos Ami. Usei o AMI Linux 2. O Linux 1 é muito antigo.
Archimedes Trajano
1
OK, entendi. Os repositórios do CentOS que você usou são totalmente compatíveis com o Amazon AMI?
Suncatcher
Certo: eu uso VMs Centos para desenvolvimento usando o Vagrant, só precisei adaptar meus scripts para que funcionem com os pacotes ausentes.
Archimedes Trajano
1
Paranoia simples
Archimedes Trajano
2

Por https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html

A atual AMI otimizada para Amazon ECS (amzn-ami-2017.09.j-amazon-ecs-optimized) consiste em:

  • A versão mínima mais recente da Amazon Linux AMI
  • A versão mais recente do agente de contêiner do Amazon ECS (1.17.2)
  • A versão recomendada do Docker para o agente de contêiner Amazon ECS mais recente (17.12.0-ce)
  • A versão mais recente do pacote ecs-init para executar e monitorar o agente Amazon ECS (1.17.2-1)

Você pode ver o histórico em https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html

Plutext
fonte
0

Além da minha resposta anterior. Se você usa o Terraform, também criei um módulo Terraform que pode ser usado para criar um Docker Swarm

https://registry.terraform.io/modules/trajano/swarm-aws/docker

A diferença entre a abordagem que eu fiz anteriormente e a abordagem que estou fazendo atualmente com o módulo terraform é utilizar os pacotes Docker fornecidos pela AWS. Isso não inclui a janela de encaixe completa e o que não é, mas você não exige esses pacotes normalmente em um servidor.

Como estou usando o que a Amazon havia fornecido, não é mais a versão mais recente da 18.09, mas a versão 18.06. No entanto, a configuração é mais simples e eu não tenho que acompanhar o container-selinux.

A única dependência externa que eu uso é o EPEL para ser ocultada, porque você ainda precisa de uma boa fonte aleatória para alguns aplicativos.

Também contei com os grupos de segurança da AWS, em vez de configurar explicitamente o firewalld e usei a configuração do SELinux que é padronizada na imagem da AMI.

Archimedes Trajano
fonte