Docker: Einfach zu bauen, auszuführen, fertig!

Docker hat in letzter Zeit viel Aufsehen erregt, und das aus gutem Grund. Der Containerisierungsdienst macht die Bereitstellung von Microservices einfach und stabil, da jeder Dienst ein Betriebssystem in seiner eigenen virtuellen Umgebung ausführen kann. Das bedeutet volle Kompatibilität… keine Sorge mehr um Betriebssystemversionen, Abhängigkeiten und Unterschiede zwischen Ihren Entwicklungs- und Produktionsmaschinen! Um das Ganze abzurunden, ist es leichtgewichtig, sodass Sie mehrere Docker-Container auf demselben Computer (EC2-Instanz) ausführen können. Heute lernen wir in 3 einfachen Schritten, wie Sie Docker auf Amazon EC2 einrichten und bereitstellen!

Bevor wir beginnen, werfen Sie einen Blick auf dieses allgemeine Diagramm (mit freundlicher Genehmigung von infoworld.com).

Auf der linken Seite sehen Sie die Einrichtung Ihrer herkömmlichen virtuellen Maschine mit einem Hypervisor. Ein Hypervisor ist einfach Ihr VM-Manager, der für die Zuweisung von Hardwareressourcen zu jedem virtuellen Betriebssystem verantwortlich ist. Wenn jedes Gastbetriebssystem 1 GB Speicher benötigt und der Host 1 GB Speicher benötigt, würde das Setup auf der linken Seite insgesamt 4 GB erfordern.

Auf der rechten Seite befindet sich ein Container-Setup, in dem eine Container-Engine wie Docker ausgeführt wird. Der wichtigste Unterschied besteht darin, dass eine Container-Engine leichter ist, da sie bestimmte Hardwareressourcen mit ihrem Host-Betriebssystem gemeinsam nutzen kann, im Gegensatz zu herkömmlichen VMs, für die eine eigene separate Zuordnung erforderlich ist. Dieses Setup erfordert 1 GB für das Host-Betriebssystem und möglicherweise 600 MB pro Container (da 300 MB hypothetisch mit dem Host-Betriebssystem geteilt werden), sodass insgesamt 2,8 GB erforderlich sind. Sehen Sie diese Vorteile? Cool, jetzt können wir anfangen!

Loslegen

Geben Sie Ihre EC2-Instanz ein und klonen Sie Kangzeroos-ES6-React-Redux-Boilerplate von Github. Der angezeigte Code dient zum Einrichten dieser Web-App, die Schritte sind jedoch für jedes Projekt gleich. Sobald Sie es heruntergeladen haben, gehen Sie in den Ordner und suchen Sie die folgenden Dateien. Dies sind die Dateien, die wir mit Docker verwenden werden.

Dockerfile build.sh run.sh

Bevor wir Docker verwenden können, müssen wir es zuerst installieren. Im Folgenden finden Sie die schnelle und einfache Möglichkeit, Docker zu installieren. Wenn Sie jedoch die vollständige Konfiguration wünschen, lesen Sie die offiziellen Dokumente.

$ sudo apt-get update $ sudo apt-get install docker-engine $ sudo service docker start $ sudo docker run hello-world

Der letzte Befehl prüft, ob Docker erfolgreich ausgeführt wird, und wird dann beendet. Wenn dies alles funktioniert, können Sie mit dem Dockerisieren beginnen!

Schritt 1: Erstellen der Docker-Datei

Der erste Schritt besteht darin, die Dateien zu konfigurieren, die Docker benötigt, um sich selbst ein Image zu erstellen. Docker-Images sind lediglich Entwürfe von Umgebungen, die Sie erstellen möchten, während Container die tatsächlich laufenden und funktionalen Umgebungen sind, in denen Ihre App ausgeführt wird. Im Stammverzeichnis unseres App-Verzeichnisses befindet sich ein Ordner mit dem Namen App. Die Web-App selbst befindet sich in diesem AppOrdner, während sich alle Docker-bezogenen Inhalte außerhalb befinden. Dies ist notwendig, da Docker alles im Inneren containerisiert App. Machen wir also die erste Docker-Datei mit dem Namen Dockerfile(keine Dateierweiterung Dockerfile.sh, nur Dockerfile) und gehen wir sie Zeile für Zeile durch.

FROM ubuntu # ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install nodejs -y && apt-get install npm -y # install curl for n RUN apt-get install curl -y RUN apt-get install vim -y # obtain latest stable version of node RUN npm cache clean -f RUN npm install -g n RUN n stable # setup working directory # ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Die erste Zeile ist FROM ubuntu. Der Zweck von Dockerfilebesteht darin, das Betriebssystem und die Programme innerhalb des Betriebssystems einzurichten. Daher ist es sinnvoll, dass in der ersten Zeile angegeben wird, welche Betriebssystemversion verwendet werden soll. ubuntuHier bezieht sich auf ein bestimmtes Image, das auf Docker Hub gehostet wird, insbesondere auf das offizielle Ubuntu OS-Image.

# ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install curl -y RUN apt-get install vim -y

Der nächste Satz von Zeilen wird in Ubuntu eingerichtet. Wir möchten nach Ubuntu-Updates mit RUN apt-get update -yund Upgrades mit RUN apt-get upgrade -y... ziemlich Standardmaterial zum Einrichten Ihrer Umgebung suchen. Installieren Sie auch Curl RUN apt-get install curl -yund Vim RUN apt-get install vim -y, die beide für allgemeine Zwecke gut geeignet sind.

# obtain latest stable version of node RUN apt-get install nodejs -y && apt-get install npm -y RUN npm cache clean -f RUN npm install -g n RUN n stable

Der nächste Satz von Zeilen ist spezifisch für NodeJS. Da wir ES6-Funktionen verwenden möchten, benötigen wir die neueste Version von NodeJS, die über das Knotenmodul erreicht wird n. Installieren Sie NodeJS und NPM mit RUN apt-get install nodejs -y && apt-get install npm -y. Reinigen Sie dann npm, um Platz für die nVerwendung zu machen RUN npm cache clean -f. Installieren nmit RUN npm install -g n. Und schließlich können wir n(neueste Version von NodeJS) mit ausführen RUN n stable.

NodeJS ist für Javascript gedacht. Wenn Sie jedoch mit anderen Sprachen wie Python arbeiten, installieren Sie alle Programme, die Sie zum Ausführen Ihrer Python-App benötigen.

# setup working directory ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Der letzte Teil Dockerfilebesteht darin, das Arbeitsverzeichnis der App selbst einzurichten. ADD /App /AppNimmt den AppOrdner von unserem Computer und kopiert ihn in den Docker-Container. Legt als Nächstes WORKDIR /Appdas Docker-Arbeitsverzeichnis /Appso fest, dass alle Befehle, die Sie in Docker ausführen, ausgeführt werden /App. Dies ist erforderlich npm install, um an der richtigen Stelle (auch bekannt /Appals Docker-Container) zu installieren .

Schließlich RUN npm installinstallieren wir unsere NodeJS-Abhängigkeiten auf unserem Computer. Zuletzt werden wir Port 8080 unseres Docker-Images explizit EXPOSE 8080verfügbar machen, damit die Außenwelt auf unsere App zugreifen kann. Die Außenwelt umfasst das Internet sowie andere Docker-Container, die auf demselben Computer ausgeführt werden.

Schritt 2: Das Build-Skript

docker build -t kangzeroo .

Erstellen Sie eine neue Datei im Stammverzeichnis Ihrer App mit dem Namen build.sh. Dies ist eine Shell-Datei zum Erstellen unseres Docker-Containers. Diese build.shDatei ist eigentlich nicht erforderlich, da wir diesen Befehl direkt im Terminal ausführen können. Es ist jedoch sehr schön, um den Prozess zu vereinfachen.

Hier ist die Aufschlüsselung dieser Zeile: docker buildist der Befehl, der Docker anweist, ein Image zu erstellen. -t kangzerooSetzt den Tag-Namen des Docker-Images auf kangzeroo, auf den wir später verweisen können. Bitte beachten Sie, dass ein gültiger Tag-Name in Kleinbuchstaben geschrieben werden muss und keine Leerzeichen enthält (verwenden Sie die Benennung in Groß- und Kleinschreibung). Schließlich .teilt Docker mit, wo nach dem gesucht werden Dockerfilesoll, der für den Build benötigt wird ( .bedeutet hier).

Wenn Sie sich in einer EC2-Instanz befinden, können wir sie bash build.shaus dem Stammverzeichnis unseres Projekts ausführen . Dadurch wird der Docker-Erstellungsprozess gestartet, während die von Dockerfileuns erstellten Schritte durchlaufen werden . Dies kann eine Weile dauern. Am Ende sollte es folgendermaßen aussehen: (Machen Sie sich keine Sorgen über die unkritischen Fehler wie die optionale Abhängigkeit, die im folgenden Screenshot übersprungen wurde.)

Lassen Sie uns nun überprüfen, ob unser Bild erstellt wurde. Geben Sie ein docker images, um die Bilder anzuzeigen , die derzeit auf unserem Computer ausgeführt werden. Sie sollten ein Ergebnis wie dieses sehen:

Wenn wir dieses Bild löschen möchten, geben Sie einfach ein docker rmi kangzeroo. Wenn Sie docker imagesnach dem Löschen erneut eingeben, sehen Sie, dass das Bild nicht mehr vorhanden ist. Lassen wir das Image zunächst, da wir damit den Docker-Container erstellen, in dem unsere App ausgeführt werden kann.

Schritt 3: Das Ausführungsskript

Now that our image has been created, let’s make run.sh. Recall that Docker Images are simply blueprints of environments that you want to create. Containers are the actual running and functional environments that your app will be executed in. So run.sh will turn our images into containers. Here is what run.sh looks like:

docker run -d -it -p 80:8080 --name=kz kangzeroo npm run ec2 -- --host=0.0.0.0

Let’s walkthrough this short script. docker run is the command to run a container from an image. -d -it is the command for daemon (running tasks in the background) and interactive terminal (giving us a way to interact with the container). If you omit -d then the docker container will not run in the background and you will see log output from the app. -p 80:8080 maps port 80 of our machine to port 8080 of the container. Recall that earlier we specified EXPOSE 8080 in our Dockerfile. So now we take incoming connections on our machine’s port 80 (port 80 is the default for http) and redirect them to our container’s port 8080. If your app is not a webpage, then you can exclude this port mapping.--name=kz gives our container the name kz. Finally, kangzeroo npm run ec2 refers to our image called kangzeroo and npm run ec2 is a command specific to this boilerplate app (for starting up the app). The last part — — host=0.0.0.0 sets the boilerplate to run on 0.0.0.0 instead of localhost (This too is specific to the boilerplate). If you were running a Python backend app, it would look like docker run -d -it --name=kz kangzeroo python app.py.

Great! Save this file and run it with bash run.sh. Then check if the container is running by typing docker ps -a. This is what it should look like:

Your app is now online and running inside a Docker container! Check if it works… for this boilerplate you can check from a web browser.

And it’s working! Great, now let’s turn off our Docker container. Type docker ps -a to see all the containers again. Type docker stop kz and it stops the container. If you type docker ps you will not see the container anymore, but you will see it if you type docker ps -a ( -a means all, inclusive of running and not running container. omit -a if you only want to see running containers). To remove the container, type docker rm kz. If you type docker ps -a you won’t see the container anymore.

Conclusion

Das war Docker! Alles in allem ist Docker viel einfacher als das Einrichten einer Hypervisor-basierten VM, und Sie können sehen, wie eine Microservice-Architektur viel einfacher zu verwalten ist, wenn Sie Container übernehmen. Mit unseren Dockerfile, build.shund run.shDateien in EC2 erstellt hat , können wir die 3 Schritte zum Laufen Docker aus unserem App Root - Verzeichnis zusammenfassen:

$ bash build.sh $ bash run.sh $ exit

Das ist es! Docker: einfach zu bauen, auszuführen, fertig!

Bonus Cheatsheet

Da in diesem Tutorial Schritt für Schritt Docker unterrichtet wurde, ist es meines Erachtens angebracht, Ihnen einen Überblick über alle Docker-Befehle zu geben, die Sie für die allgemeine Verwendung benötigen.

$ docker images // To view install images $ docker rmi  // To remove an installed image $ docker ps -a // To view all docker containers $ docker stop  // To stop a docker container $ docker rm  // To remove a docker container $ docker exec -it  bash // Execute into container and run bash * If you want to see the log output from a docker container, omit the -d from run.sh
Diese Methoden wurden teilweise bei der Bereitstellung von renthero.ca verwendet