Comment installer Docker sur une instance AWS EC2 avec AMI (mise à jour CE / EE)

28

Quelle est la façon actuelle d'installer Docker sur une instance AWS EC2 exécutant l'AMI? Il y a eu une annonce de Docker Enterprise Edition et maintenant je veux savoir si quelque chose a changé. Jusqu'à présent, j'utilisais yum install dockeret j'obtiens un Docker versionné en 1.12.6, build 7392c3b/1.12.6ce moment (3/3/2017). Cependant, le référentiel Docker sur GitHub me dit qu'il existe déjà des versions plus récentes.

Je me souviens du dépôt Docker (package) officiel ayant un package nommé docker-engineremplaçant il y a dockerquelque temps et maintenant ils semblent diviser le package en docker-ceet docker-ee, par exemple, "Docker Community Edition (Docker CE) n'est pas pris en charge sur Red Hat Enterprise Linux." [ Source ]

Est-il donc ou sera-t-il toujours correct d'utiliser ce qui précède pour obtenir la dernière version stable de Docker sur les instances EC2 exécutant l'AMI ou dois-je extraire le package ailleurs (et si oui, lequel, CE ou EE)?

mxscho
la source
2
Avez-vous lu la documentation AWS sur la façon d'installer la norme Docker? Si oui, quelle partie de cela n'a pas fonctionné, ou quels problèmes n'a-t-il pas traités? docs.aws.amazon.com/AmazonECS/latest/developerguide/...
Tim
La question est de savoir si je peux continuer comme ça. Comme déjà mentionné, cela m'installera Docker versionné à 1.12 qui est déjà une sinon plusieurs mises à jour de version mineures derrière la dernière version stable (1.13, avant CE / EE) et je me demande si cela est dû au retard de mise à jour habituel du référentiel ou parce que le guide et le package étant simplement obsolètes, ce qui nécessite un travail de remplacement effectué par moi (par exemple, obtenir Docker de leur propre référentiel?) Concernant également la dernière annonce d'EE qui pourrait changer quelque chose ...
mxscho
Exécuter quoi AMI?
Michael Hampton
@MichaelHampton le dernier pour HVM, Amazon Linux AMI 2016.09.1.
mxscho
1
Je suppose qu'Amazon le mettra à jour quand ils y arriveront. Bien que vous sachiez bien sûr que personne ne devrait utiliser Amazon Linux pour quoi que ce soit.
Michael Hampton

Réponses:

44

Pour que Docker s'exécute sur l'AWS AMI, vous devez suivre les étapes ci-dessous (elles supposent toutes que vous avez accédé à l'instance EC2).

  1. Mettez à jour les packages sur votre instance

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

  2. Installer Docker

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

  3. Démarrez le service Docker

    [ec2-user ~]$ sudo service docker start

  4. Ajoutez l'utilisateur ec2 au groupe docker pour pouvoir exécuter des commandes Docker sans utiliser sudo.

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

Vous devriez alors pouvoir exécuter toutes les commandes du docker sans avoir besoin sudo. Après avoir exécuté la 4e commande, je devais me déconnecter et me reconnecter pour que la modification prenne effet.

ajtrichards
la source
3
Comme je l'ai déjà mentionné dans la question, cela fonctionne bien, mais installe une version obsolète de Docker (toujours la version 1.12.6 le 28/05/2017). Alors que je suis moi-même passé à l'image Ubuntu pour mes instances EC2, la vraie chose que je voulais savoir, c'est comment installer l'une des versions actuelles de Docker sur une image AMI. Parce qu'il n'y avait (au moins au moment de la question) aucun moyen évident d'obtenir une mise à jour de Docker CE ou une installation de Docker EE. C'est de cela qu'il s'agissait en premier lieu et c'est la raison pour laquelle je ne peux pas l'accepter sans hésitation. Merci de toute façon!
mxscho
@mxscho oui, c'est aussi ce que je recherche, alors attendez qu'une réponse à la question soit publiée.
user239558
1
Aujourd'hui, yum install installe 17.03.1ce-1.50.amzn1
raarts le
1
N'a pas travaillé pour moi. J'avais donc besoin de faire ça. sudo yum installe yum-utils, puis sudo yum-config-manager --enable rhui-REGION-rhel-server-extras, puis sudo yum install docker
TheAshwaniK
5

La partie la plus difficile à comprendre tout cela était l'exigence de conteneur-selinux. Trouvez la dernière version sur http://mirror.centos.org/centos/7/extras/x86_64/Packages/ et installez-la en premier. De plus, les instances EC2 peuvent ne pas avoir de générateur d'entropie approprié et havegeddoivent donc être installées.

Le reste est extrait de https://docs.docker.com/install/linux/docker-ce/centos/ avec l'ajout de hasged et firewalld. Tout cela doit être fait en tant que root de manière sudoappropriée.

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

Activez SELinux en modifiant /etc/sysconfig/selinuxpour être

SELINUX=enforcing
SELINUXTYPE=targeted

Redémarrez ensuite votre instance en émettant shutdown -r now

L'exécution sudo docker versiondevrait rapporter au moment de cette publication ...

Client:
 Version: 18.03.0-ce
 Version API: 1.37
 Version Go: go1.9.4
 Git commit: 0520e24
 Construit: Wed Mar 21 23:09:15 2018
 OS / Arch: linux / amd64
 Expérimental: faux
 Orchestrateur: swarm

Serveur:
 Moteur:
  Version: 18.03.0-ce
  Version API: 1.37 (version minimale 1.12)
  Version Go: go1.9.4
  Git commit: 0520e24
  Construit: Wed Mar 21 23:13:03 2018
  OS / Arch: linux / amd64
  Expérimental: faux
Archimedes Trajano
la source
1
Avez-vous essayé d'exécuter Docker sur d'autres AMI à l'exception de CentOS? Pouvez-vous partager vos expériences?
Suncatcher
1
Je n'ai pas utilisé le centos Ami J'ai utilisé l'AMI Linux 2. Le Linux 1 est trop vieux.
Archimède Trajano
1
OK, j'ai compris. Les dépôts CentOS que vous avez utilisés sont-ils entièrement compatibles avec Amazon AMI?
Suncatcher
À droite, j'utilise des machines virtuelles Centos pour le développement à l'aide de Vagrant, je devais juste adapter mes scripts pour qu'il fonctionne avec les packages manquants.
Archimède Trajano
1
Paranoïa simple
Archimède Trajano
2

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

L'AMI actuelle optimisée pour Amazon ECS (amzn-ami-2017.09.j-amazon-ecs-optimisé) comprend:

  • La dernière version minimale d'Amazon Linux AMI
  • La dernière version de l'agent de conteneur Amazon ECS (1.17.2)
  • La version recommandée de Docker pour le dernier agent de conteneur Amazon ECS (17.12.0-ce)
  • La dernière version du package ecs-init pour exécuter et surveiller l'agent Amazon ECS (1.17.2-1)

Vous pouvez voir l'historique à https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html

Plutext
la source
0

En plus de ma réponse précédente. Si vous utilisez Terraform, j'ai également créé un module Terraform qui peut être utilisé pour créer un Docker Swarm

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

La différence entre l'approche que j'avais faite précédemment et l'approche que je fais actuellement avec le module terraform est d'utiliser les packages Docker fournis par AWS. Cela n'inclut pas le docker-compose complet et ce qui ne l'est pas, mais vous n'avez pas besoin de ces packages normalement sur un serveur.

Parce que j'utilise celui qu'Amazon avait fourni, ce n'est plus la dernière version 18.09 mais la version 18.06. Cependant, la configuration est plus simple et je n'ai pas à jouer au rattrapage de container-selinux.

La seule dépendance externe que j'utilise est EPEL pour se faufiler car vous avez toujours besoin d'une bonne source aléatoire pour certaines applications.

Je me suis également appuyé sur les groupes de sécurité AWS plutôt que sur la configuration explicite de firewalld et j'ai utilisé le paramètre SELinux par défaut dans l'image AMI.

Archimedes Trajano
la source