Einstieg in Docker Container
Docker ist eine Platform für Container, welche ein Betriebssystem virtualisiert. Die Docker Container teilen den Linux Kernel mit dem Host Beriebssystem. Ein Docker Container selber braucht fast keine Ressourcen und ist deshalb sehr leichtgewichtig im Gegensatz zu anderen Virtualisierungen wie VirtualBox oder VMWare. Durch diesen kleineren Overhead ist es möglich einen einzelnen Prozess in einem Docker Container laufen zu lassen. In diesem Blog wird dies am Beispiel eines Nginx Webserver demonstriert.
Docker File
Das Docker File beschreibt, wie ein Docker Image aufgebaut werden soll. Der Name der Datei ist dockerfile.
Hier ein Beispiel von einem Docker File, um ein Nginx Webserver als Docker Container laufen zu lassen:
FROM ubuntu:16.04 MAINTAINER Noser Engineering AG RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Nun gehen wir alle Befehle der Reihe nach durch:
Mit dem FROM definiert man das Basis Image, von welchem man starten will. Es gibt viele verschiedene Docker Basis Images die von Docker zur Verfügung gestellt werden. Z.B. ein Docker Image von Ubuntu, Debian usw. Man kann latest für die aktuellste Version nehmen, oder aber auch eine spezifische Version angeben wie ubuntu:16.04 oder ubuntu:14.04.
Beim MAINTAINER gibt man den Namen an, der für das Docker File zuständig ist.
Mit dem RUN kann man etwas ausführen. In unserem Beispiel wird zuerst ein Update vom Packet Management gemacht und dann wird der Nginx Webserver installiert.
Mit EXPOSE wird definiert, welchem Port der Container zur Verfügung stellt.
Mit CMD definiert man, was im Container ausgeführt werden soll, wenn der Container gestartet wird.
Docker Image
Mit dem docker build Befehl kann aus dem Docker File ein Docker Image erstellt werden:
$ docker build -t noser:myNginx .
- -t ist der Name vom Docker Image
- . der Pfad zum Verzeichnis, in welchem das Docker File zu finden ist. In diesem Beispiel befinden wir uns schon im selben Verzeichnis wie das Docker File.
Falls ein Basis Image ausgewählt ist, welches auf dem Host noch nicht vorhanden ist, wird es automatisch heruntergeladen.
Mit dem docker images Befehl kann man sich alle Docker Images anzeigen lassen, die man bereits heruntergeladen oder selber erstellt hat.
Docker Container
Um ein Docker Image zu starten, muss man docker run aufrufen:
$ docker run -d -p 80:80 -v /home/noser/nginx:/var/www/html --name myNginxWebServer noser:myNginx
- -d bedeutet, dass es ein Daemon ist und im Hintergrund läuft.
- -p mit dem Parameter wird definiert, welcher Port vom Container auf welchen Port vom Host zur Verfügung gestellt werden soll. Hier wird der Port 80 vom Container auf den Port 80 vom Host gemapped.
- -v wird das Verzeichnis /home/noser/nginx vom Host auf das Verzeichnis /var/www/html im Container gemapped. Damit kann man den Inhalt der Webseite ausserhalb des Containers ändern, falls dies gewünscht ist.
- -name gibt man der Name des Containers an
- noser:myNginx ist der Name des Images, welches gestartet werden soll.
Mit docker ps kann man sich alle laufenden Docker Container anzeigen lassen.
Nun sollte der Docker Container laufen und auf dem Host beim Port 80 der Nginx Webserver erreichbar sein.
Docker HUB
Im Docker Hub, das von Docker zur Verfügung gestellt wird, gibt es eine grosse Auswahl von Docker Images die man herunterladen und starten kann.
Man kann auch das Docker File ansehen und somit ein bestehendes Image erweitern oder anpassen. Ein solches Docker Image kann man auch als Basis Image verwenden und daraus ein eigenes Image erstellen.
Falls ihr noch mehr über Docker erfahren wollt, könnt ihr auf die Homepage von Docker gehen.
PS: Die Sicherheit wurde hier nicht behandelt. Bevor ein Container produktiv eingesetzt wird, sollte man sich noch mit dem Thema Sicherheit von Docker Container befassen.