Diskussion:Docker
- Motivation CI/CD: WFM (''Works For Me'')
Auf dem CI-Server muss man eine Arbeitsumgebung konfigurieren und bereitstellen, für Java-basierte Projekte muss beispielsweise ein JDK existieren und man benötigt Tools wie Maven oder Gradle, um die Buildskripte auszuführen
- Je nach Projekt braucht man dann noch weitere Tools und Bibliotheken
- Diese Konfigurationen sind unabhängig vom CI-Server und werden üblicherweise nicht direkt installiert, sondern über eine Virtualisierung bereitgestellt
Selbst wenn man keine CI-Pipelines einsetzt, hat man in Projekten mit mehreren beteiligten Personen häufig das Problem "WFM" ("works for me")
- Jeder Entwickler hat sich auf ihrem Rechner eine Entwicklungsumgebung aufgesetzt und nutzt in der Regel seine bevorzugte IDE oder sogar unterschiedliche JDK-Versionen
- Dadurch kann es schnell passieren, dass Probleme oder Fehler auftreten, die sich nicht von allen Beteiligten immer nachvollziehen lassen
- Hier wäre eine einheitliche Entwicklungsumgebung sinnvoll, die in einer "schlanken" Virtualisierung bereitgestellt wird
Als Entwickler kann man zeitgleich in verschiedenen Projekten beteiligt sein, die unterschiedliche Anforderungen an die Entwicklungstools mit sich bringen
- Es könnte beispielsweise passieren, dass man zeitgleich drei bestimmte Python-Versionen benötigt
- In den meisten Fällen schafft man es (mit ein wenig Aufwand), diese Tools nebeneinander zu installieren
- Oft ist das in der Praxis aber schwierig und fehleranfällig
In diesen Fällen kann eine Virtualisierung helfen
Link-Sammlung
- Wikipedia: Docker
- Wikipedia: Virtuelle Maschinen
- Docker: Überblick, Container
- Docker: HowTo
- DockerHub: Suche nach fertigen Images
- Docker und Java
- Dockerfiles: Best Practices
- Gitlab, Docker
- VSCode: Entwickeln in Docker-Containern
- [DockerInAction] und [DockerInPractice]
- VSCode
VSCode kann über das Remote-Plugin sich (u.a.) mit Containern verbinden und dann im Container arbeiten (editieren, compilieren, debuggen, testen, ...)
In dieser kurzen Einheit kann ich Ihnen nur einen ersten Einstieg in das Thema geben
- Wir haben uns beispielsweise nicht Docker Compose oder Kubernetes angeschaut, und auch die Themen Netzwerk (zwischen Containern oder zwischen Containern und anderen Rechnern) und Volumnes habe ich außen vor gelassen
- Dennoch kommt man in der Praxis bereits mit den hier vermittelten Basiskenntnissen erstaunlich weit
- Videos (YouTube)
- VL Einführung in Docker
- Demo Container in der Konsole
- Demo GitLab CI/CD und Docker
- Demo GitHub Actions und Docker
- Demo VSCode und Docker
- Videos (HSBI-Medienportal)
- VL Einführung in Docker
- Lernziele
- (K2) Unterschied zwischen Containern und VMs
- (K2) Einsatzgebiete für Container
- (K2) Container laufen als abgeschottete Prozesse auf dem Host - kein Sandbox-Effekt
- (K3) Container von DockerHub ziehen
- (K3) Container starten
- (K3) Eigene Container definieren und bauen
- (K3) Einsatz von Containern in GitLab CI/CD und GitHub Actions
- (K3) Einsatz von VSCode und Containern
Wrap-Up
- Schlanke Virtualisierung mit Containern (kein eigenes OS)
- Kein Sandbox-Effekt
- Begriffe: Docker-File vs. Image vs. Container
- Ziehen von vordefinierten Images
- Definition eines eigenen Images
- Arbeiten mit Containern: lokal, CI/CD, VSCode
Quizzes
- Quiz Docker (ILIAS)
Quellen
- [DockerInAction] Docker in Action Nickoloff, D., Manning Publications, 2019. ISBN 978-1-6172-9476-1
- [DockerInPractice] Docker in Practice Miell, I. und Sayers, A. H., Manning Publications, 2019. ISBN 978-1-6172-9480-8
- [Inden2013] Der Weg zum Java-Profi Inden, M., dpunkt.verlag, 2013. ISBN 978-3-8649-1245-0