AWS: Installieren von Docker auf einen EC2 virtuellen Server von Amazon

Einführung

In diesem Artikel zeige ich, wie man Docker auf den Amazon Cloud Service EC2 installiert.

Ich habe mich bewusst für diese Konfiguration entscheiden, um nicht mit der zusätzlichen Komplexität des ECS (EC2 Container Service) zu verwirren, den es explizit für Docker Container auch noch gibt. In einem eigenen Artikel werde ich mich diesem noch umfangreich kümmern.

In diesem Artikel werden wir Docker auf eine neuen virtuellen Host in der Amazon Cloud erstellen. Und mit einem Container ein kleines Beispiel zur Anzeige bringen.

Eine kleine Einführung zu Docker auf dem eigenen Windows 10 PC ist auch in folgenden Artikel von mir zu finden: http://ninja4.net/docker-installation-von-docker-auf-windows-10/

Wie man sich einen kostenlosen AWS Cloud Account einrichtet habe ich unter folgenden Link beschrieben: http://ninja4.net/aws-einrichten-eines-neuen-amazon-web-service-account-billing-alarm-12-monate-kostenlos/

Wie man diesen Account sicher macht habe ich unter folgenden Link beschrieben: http://ninja4.net/aws-einrichten-des-identity-managements-und-absichern-des-zugangs/

Einrichten des EC2

Unter EC2 versteht man einen virtuellen Server in der Amazon Cloud.

Zum Einrichten des virtuellen Servers klickt man auf EC2 in der AWS Console: (Bitte Aufpassen, dass die Console am richtigen Standort ist, in diesem Beispiel habe ich Frankfurt gewählt)

Im folgenden Bildschirm ist auf Launch Instance zu klicken:

Für dieses Beispiel mache ich mir es recht einfach und wähle Amazon Linux, dass auch explizit angibt dass man es für Docker verwenden kann:

Als nächstes ist der Instanztyp zu wählen.

Die Typen haben folgende Bedeutung:

T - Sind sehr kleine Instanzen -> WebServer und sehr kleine Instanzen  
M - Sind normale Instanzen -> Application Server  
C - Sind auf Rechenpower ausgelegte Instanzen -> Rechenintensive Applikationen und Datenbanken  
G - Sind für Grafikberechnungen, die viel GPU benötigen, wie Video Encodierung, 3D Streaming und Maschinen Learning  
R - Haben besonders leistungsstarken Speicher -> Speicherlastige Applikationen, Datenbanken  
D - Sind auf Speicher optimierte Modelle-> Fileserver  
I - Datendurchsatz optimierte Modelle, IOPS Optimiert -> NoSQL Datenbank und Datewarehouse  

`

Für unser Docker Beispiel können wir ein kleines t2.micro nehmen, dass uns Amazon auch empfiehlt für die kostenlose Verwendung, die das AWS Konto ja auch hat:

Um weitere Details zu erklären, wähle ich Configure Instance Details aus:

Normalerweise kauft man sich eine Instanz auf Stundenbasis, allerdings gibt es auch zwei weitere Optionen, bspw. kann man auch *Spot Instanzen *anlegen. In diesem Fall sind die Instanzen nur dann verfügbar, wenn der Stunden-Preis für eine Instanz besonders günstig ist:

Die Spot Option macht natürlich keinen Sinn für einen Webserver, aber wenn man aufwendige Berechnungen durchführt und diese möglichst kostengünstigen Zeiten haben möchte, dann macht es Sinn. Über die Webseite https://ec2price.com kann man sich den Kursverlauf der Spot Preise übrigens anzeigen lassen:

Wir benötigen natürlich den Server ständig und verändern nichts auf der WebSeite und klicken auf "Add Storage":

Storage wird bei Amazon EBS genannt. Jeder EBS-Storage kann maximal nur an einer Maschine angeschlossen sein, wie man es von Hardware Platten auch kennt.

Neben den vorgeschlagenen GP2 Platten, kann man unter IO1 besonders Schnelle Platten wählen oder mit Magnetic klassische Magnet-Platten, die recht langsam sind:

Ich ändere die vorgeschlagene Konfiguration nicht und gehe zum nächsten Dialog:

Auf der nächsten Seite kann man Tags für die Instanz definieren:

Auf der nächsten Seite kann man die intere Firewall konfigurieren und IP-Ranges usw. einschränken. Trotz der Warnung lasse ich diese mal unverändert:

Nun bekommen wir eine letzte Übersicht und können diese anschließend mit "Launch" starten:

Als nächsten werden wir nach dem KeyPair gefragt, dass verwendet werden soll. Da dies die erste Maschine ist, generieren wir ein neues KeyPair. Ich nenne mein KeyPair einfach "ninjaadmin" und lade es herunter:

Nachdem die PEM Datei herunter geladen ist, kann man mit Launch Instances weitermachen:

Nun wird die Linux Instanz endlich auch gestartet:

Nun lasse ich mir die Instanzen anzeigen:

Anmelden auf der Maschine

Damit man sich auf der Maschine von Windows anmelden kann, benötigt man die Programme PuTTY und PuTTYgen, damit man sich Remote an der Maschine anmelden kann. Dies Programme befinden sich unter: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Nach der Installation starte ich PuTTYgen, um die PEM Datei, die wir beim Einrichten der Instanz herunter geladen haben, entsprechend für PuTTY zu konvertieren:

Hier importieren man den Key:

Und wählt den Schlüssel, der von Amazaon bei Erstellung der Istanz heruntergeladen wurde:

Im folgenden wird die ppk gespeichert. Ich speichere für die Demo kein Password. In einer produktiven Umgebung ist das allerdings anzuraten!

Ich speichere die PPK bei mir unter den Namen "ninjaadmin.ppk":

Nun kann man PuTTY starten. Anschließend ist die Public-IP aus der EC2 Ansicht von AWS ist in PuTTY einzutragen:

Unter "Connection/SSH/Auth" ist der gerade generierte Schlüssel einzutragen:

Nun speichert man die Daten der Session:

Anschließend kann man mit Open die Verbindung aufbauen:

Der folgende Dialog erfolgt einmalig und fordert den Schlüssel des Servers zu akzeptieren. Es handelt sich hier um eine Sicherheitsmaßnahme, falls jemand später sich mit einen anderen Schlüssel meldet. Da es die aller erste Verbindung ist, können wir dieser vertrauen:

Nun erscheint ein login. Angemeldet wird sich mit dem "ec2-user":

Installation von Docker

Auf dem Amazon Linux AMI wird wie bei CentOS "yum" zum installieren von Paketen verwendet. Zunächst sollen wir uns ein Update der aktuellen Pakete. Das vorangestellte Kommando "sudo" sorgt dafür, dass es als Administrator läuft, was für das Installieren von Paketen unbedingt notwendig ist.

Als nächstes installiert man Docker mit yum:

Nun wird mit dem Befehlt "sudo yum install docker" das Paket installiert:

Anschließend sollte sich Docker starten lassen:

Nun kann man testen, ob Docker richtig funktioniert, in dem man "hello-world" installiert:

NGINX installieren

Details zu den Docker Kommandos und was jetzt kommt habe ich bereits in meinen anderen Artikel beschrieben: http://ninja4.net/docker-installation-von-docker-auf-windows-10/

Mit dem folgenden Kommando wird NGINX installiert:

sudo docker run -d -p 80:80 --name web1 nginx  

Anschließend ist dieser auch in der Prozessliste zu sehen:

Öffnet man nun die IP Adresse mit dem Browser ist der Inhalt noch nicht zu sehen und bekommt eine Fehlermeldung.

Ursache ist, dass der Port 80 für die Instanz noch nicht freigegeben ist.

Hier ist auf "launch-wizard-1" zu klicken:

In der Security Group fügen wir den Port 80, der für HTTP verwendet wird hinzu:

Anschließend ist die nginx Webseite aus dem Internet sichtbar über die öffentliche IP-Addresse sichtbar:

Zusammenfassung

Es gibt ein paar leichtere Hürden, um Docker unter AWS auf einer EC2 zum laufen zu bekommen. Ich hoffe, dass ich nachvollziehbar erklärt habe, wie diese Hürden zu umschiffen sind.