Commit d3c2b5a3 authored by Nane Kratzke's avatar Nane Kratzke
Browse files

Gliederung

parent ae97f391
# Lab 05: Containerization
In diesem Lab lernen Sie die Tool-Chain kennen, um Applikationen als standardisierte Deployment Units (Container-Images) bereitstellen zu können. Dies funktioniert sowohl lokal auf einem Entwicklungsrechner (z.B. Ihrem Laptop) als auch im Rahmen von Deployment Pipelines (d.h. in Remote Building Environments wie bspw. Gitlab CI/CD).
Die Standardisierung von Deployment Units in Form von Containern ist ein zentrales Merkmal der Entwicklung Cloud-nativer Anwendungen.
Die hier vorgestellten Prinzipien können Sie daher problemlos auf weitere Cloud-native Projekte übertragen.
## Inhalt
Die Standardisierung von Deployment Units in Form von Containern ist ein zentrales Merkmal der Entwicklung Cloud-nativer Anwendungen. Die hier vorgestellten Prinzipien können Sie daher problemlos auf weitere Cloud-native Projekte übertragen.
## Inhalt
- [Lab 05: Containerization](#lab-05-containerization)
- [Inhalt](#inhalt)
- [Übung 01: Installation von Docker](#übung-01-installation-von-docker)
- [Übung 02: Erstellung von einem Image](#übung-02-erstellung-von-einem-image)
- [Aufgabe 02.1 HTTP-Service mittels eines NGINX-Basisimages](#aufgabe-021-http-service-mittels-eines-nginx-basisimages)
- [Aufgabe 03.2: HTTP-Service mittels eines generellen Basis-Images bauen](#aufgabe-032-http-service-mittels-eines-generellen-basis-images-bauen)
- [Übung 03: Vergleich von Imagegrößen](#übung-03-vergleich-von-imagegrößen)
- [Aufgabe 03.1: Unnötige Dateien löschen](#aufgabe-031-unnötige-dateien-löschen)
- [Aufgabe 03.2: Image Layer einsparen](#aufgabe-032-image-layer-einsparen)
- [Aufgabe 03.3: Kleinere Basis Images nutzen](#aufgabe-033-kleinere-basis-images-nutzen)
- [Übung 04: Push von einem Image in eine Registry](#übung-04-push-von-einem-image-in-eine-registry)
- [Übung 05: Deployment-Pipeline zum Bau und Test eines Images](#übung-05-deployment-pipeline-zum-bau-und-test-eines-images)
- [Quellen und Referenzen](#quellen-und-referenzen)
- [Was sollten Sie mitnehmen ...](#was-sollten-sie-mitnehmen-)
## Übung 01: Installation von Docker
- [Vorbereitung](#vorbereitung)
- [Übung 01: Erstellung von einem Image](#übung-01-erstellung-von-einem-image)
- [Aufgabe 01.1 HTTP-Service mittels eines NGINX-Basisimages](#aufgabe-011-http-service-mittels-eines-nginx-basisimages)
- [Aufgabe 01.2: HTTP-Service mittels eines generellen Basis-Images bauen](#aufgabe-012-http-service-mittels-eines-generellen-basis-images-bauen)
- [Übung 02: Image-Shrinking](#übung-02-image-shrinking)
- [Aufgabe 02.1: Unnötige Dateien löschen](#aufgabe-021-unnötige-dateien-löschen)
- [Aufgabe 02.2: Image-Layer einsparen](#aufgabe-022-image-layer-einsparen)
- [Aufgabe 02.3: Kleinere Basis-Images nutzen](#aufgabe-023-kleinere-basis-images-nutzen)
- [Übung 03: Images in Registries bereitstellen](#übung-03-images-in-registries-bereitstellen)
- [Übung 04: Deployment-Pipeline zum Bau und Test eines Images](#übung-04-deployment-pipeline-zum-bau-und-test-eines-images)
- [Links](#links)
- [Was sollten Sie mitnehmen](#was-sollten-sie-mitnehmen)
## Vorbereitung
- [Installieren](https://docs.docker.com/engine/install/) Sie gem. den verlinkten Anweisungen Docker für Ihr System:
- [Mac](https://www.docker.com/products/docker-desktop)
......@@ -35,19 +34,17 @@ Die hier vorgestellten Prinzipien können Sie daher problemlos auf weitere Cloud
```
Docker version 19.03.8, build afacb8b
```
- Klonen Sie sich bitte ferner als Vorbereitung dieses Repository mittels:
```
git clone https://git.mylab.th-luebeck.de/cloud-native/lab-containerization.git
cd lab-containerization
```
## Übung 02: Erstellung von einem Image
## Übung 01: Erstellung von einem Image
Sie werden in diesem Teil sehen, wie man Images baut. Häufig benötigt man Images für spezfische Dienste, wie bspw. Datenbanken, Webserver, usw. Hierfür bieten die Hersteller meist vorkonfigurierte Images an, die man nur noch mit einer kleinen Konfiguration (z.B. Access Credentials, Dateipfade, etc.) auf die spezifischen Bedürfnisse anpassen muss. Es lohnt sich hierzu öffentliche Image Repositories wie [Dockerhub](https://hub.docker.com) zu durchsuchen. Man kann aber auch Images auf Basis einer Standard Linux-Distribution aufsetzen. Sie werden beides am Beispiel eines kleinen Webservers sehen.
Klonen Sie sich bitte hierzu als Vorbereitung dieses Repository mittels:
```
git clone https://git.mylab.th-luebeck.de/cloud-native/lab-containerization.git
cd lab-containerization
```
### Aufgabe 02.1 HTTP-Service mittels eines NGINX-Basisimages
### Aufgabe 01.1 HTTP-Service mittels eines NGINX-Basisimages
1. Öffnen Sie nun bitte die Datei `Dockerfile.nginx` (diese ist recht übersichtlich, versuchen Sie diese zu verstehen und nachzuvollziehen)
2. Erzeugen Sie aus dieser nun das für Docker erforderliche Dockerfile mittels `cp Dockerfile.nginx Dockerfile`.
......@@ -64,7 +61,7 @@ cd lab-containerization
Das war ja erstaunlich einfach.
### Aufgabe 03.2: HTTP-Service mittels eines generellen Basis-Images bauen
### Aufgabe 01.2: HTTP-Service mittels eines generellen Basis-Images bauen
In Fällen von weit verbreiteten Diensten und Produkten wie NGINX, Apache, Redis, Memcached, CouchDB, MySQL, usw. finden sich häufig solche Basisimages der entsprechenden Projekte. Diese kann man meist sehr schnell und unkompliziert aufsetzen und nutzen. Sie verlieren aber häufig auch etwas Kontrolle und Konfigurationsmöglichkeiten.
......@@ -84,7 +81,7 @@ Wir wollen nun denselben Service mit einem anderen Image bauen, um diesen genere
5. Starten Sie dieses Image nun bitte mittels `docker run -p 8080:80 web:ubuntu`.
6. Prüfen Sie, ob Ihre Website ausgeliefert wird, in dem Sie [http://localhost:8080](http://localhost:8080) aufrufen. Sie sollten wieder dieselbe Webpage sehen, wie bereits im vorherigen Teil.
## Übung 03: Vergleich von Imagegrößen
## Übung 02: Image-Shrinking
Sie haben in Übung 02 einen einfachen Webserver samt Inhalt als Docker-Image erzeugt.
......@@ -115,7 +112,7 @@ Sie sehen, Ihr selbst gebautes Ubuntu Image ist etwas größer. Das ist nicht wi
Die folgenden Aufgaben dienen dazu, Ihnen zu zeigen, was für Effekte diese drei Möglichkeiten auf die resultierenden Imagegrößen haben.
### Aufgabe 03.1: Unnötige Dateien löschen
### Aufgabe 02.1: Unnötige Dateien löschen
Wir gehen von unserem `web:ubuntu` Image aus.
......@@ -126,7 +123,7 @@ Wir gehen von unserem `web:ubuntu` Image aus.
Sie sehen, dass dadurch Ihr Image bereits etwas kleiner geworden ist, aber noch größer als das NGINX-Image ist.
### Aufgabe 03.2: Image Layer einsparen
### Aufgabe 02.2: Image-Layer einsparen
In Linux/UNIX Shells kann man, um zwei Kommandos nacheinander auszuführen, entweder dies
......@@ -162,7 +159,7 @@ web ubuntu 8032bb56c82d 57 minutes ago
web nginx ca0547d1d208 14 hours ago 133MB
```
### Aufgabe 03.3: Kleinere Basis Images nutzen
### Aufgabe 02.3: Kleinere Basis-Images nutzen
Alle Images haben bislang Größen, die deutlich die 100 MB sprengen. Das ist zwar kleiner als viele VM-Images, aber immer noch recht groß, um ein paar HTML-Seiten von wenigen KBs auszuliefern.
......@@ -210,7 +207,7 @@ docker run -p 8080:80 web:alpine-shrinked
und danach [http://localhost:8080](http://localhost:8080) aufrufen. Der erbrachte Dienst ist in allen Fällen derselbe.
## Übung 04: Push von einem Image in eine Registry
## Übung 03: Images in Registries bereitstellen
Bislang haben Sie Images lokal auf Ihrem Host erzeugt. Das ist für lokale Entwicklungszwecke meist vollkommen ausreichend. Aber Sie haben auch bereits gesehen, dass Images in Public oder Private Registries bereitgestellt werden können. Die bereits in diesem Lab von Ihnen genutzten NGINX, Ubuntu und Alpine Images sind bspw. aus dem öffentlichen [Dockerhub](https://hub.docker.com) bezogen worden (ohne das Sie dies vermutlich recht zur Kenntnis genommen haben).
......@@ -245,7 +242,7 @@ __Hinweis:__ Dieser Teil kann auch mit dem Public [Gitlab.com](https://gitlab.co
Mittels dieser Tool-Chain lassen sich also Images in Registries zentral bereitstellen und für Deployments nutzen.
## Übung 05: Deployment-Pipeline zum Bau und Test eines Images
## Übung 04: Deployment-Pipeline zum Bau und Test eines Images
Dieser Teil soll Ihnen zeigen, wie Sie mittels einer Deployment Pipeline Images automatisiert bauen können. Gitlab Deployment Pipelines haben Sie ja bereits in einem vorherigen Lab kennengelernt.
......@@ -265,7 +262,7 @@ Dieser Teil soll Ihnen zeigen, wie Sie mittels einer Deployment Pipeline Images
Auf diese Art und Weise können Sie nun auch automatisiert im Rahmen von Deployment Pipelines Images bauen und bereitstellen.
## Quellen und Referenzen
## Links
- [Docker Playground](https://labs.play-with-docker.com/) (Online Lab, Registration erforderlich)
- [Docker Get Started](https://docs.docker.com/get-started/)
......@@ -273,7 +270,7 @@ Auf diese Art und Weise können Sie nun auch automatisiert im Rahmen von Deploym
- [Best Practices for Writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
- [Building Docker images with GitLab CI/CD](https://docs.gitlab.com/ee/ci/docker/using_docker_build.html)
## Was sollten Sie mitnehmen ...
## Was sollten Sie mitnehmen
1. Mittels der den meisten Distributionen beiliegenden Package Managern ist es über `RUN`-Commands möglich in Basis-Images beliebige Software komfortabel und "non-interactive" zu installieren.
1. Eigener Code, Content oder Konfigurationen können mittels `ADD`-Commands dem Container-Image hinzugefügt werden (und danach mittels `RUN`-Commands auch kompiliert und installiert werden).
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment