-
Notifications
You must be signed in to change notification settings - Fork 39
SS2019: Technologierecherche – Docker
Docker ist eine inzwischen weit verbreitete Software für Containervirtualisierung. Dabei werden einzelne Anwendungen mit allen Abhängigkeiten als Container gepackt und isoliert voneinander ausgeführt. So lassen sich Anwendungen in der selben Umgebung lokal, in einer Testumgebung und auf dem Produktiv-Server ausführen. Eine wichtige Eigenschaft von Docker Containern ist, dass diese bei jedem (Neu-)Start eine identische Umgebung bereitstellen, d.h. es werden keine Daten persitent in den Containern gespeichert.
Eine Dockerfile beschreibt die Schritte, die ausgeführt werden, um ein Docker-Image zu erstellen, das dann zum Starten von Containern verwendet werden kann.
Beispiel: Dockerfile
FROM ubuntu
RUN apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]
Mit Docker Compose lassen sich Multi-Container Docker Applikationen definieren und ausführen. Beispielsweise Anwendungen, die neben einem Webserver noch eine zugehörige Datenbank benötigen, wie WordPress.
Beispiel: docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Continuous Integration (CI) und Continuous Deployment (CD) beschreiben Konzepte, die genutzt werden, um Software zu entwickeln, zu testen, auszuliefern und zu überwachen. In diesem Bereich wird auch häufig der Begriff DevOps verwendet, um den veränderten Software-Entwicklungszyklus von Entwicklung (Development, kurz: Dev) zur Ausführung (Operations, kurz: Ops) zu beschreiben.
Eingesetzt wird CI/CD in der Regel zusammen mit dem Versionskontrollsystem Git, wobei ein Commit in einem entsprechenden Repository automatisch das Builden, Testen und ggf. Deployment der Anwendung startet. Beliebte Tools für das Umsetzen sind beispielsweise GitLab CI, Travis CI und Azure Pipelines (Teil von Azure DevOps). Nachfolgend wird auf GitLab CI weiter eingegangen.
GitLab CI ist ein Teil von GitLab und ermöglicht die Nutzung von Pipelines zum Builden, Testen und Deployen von Anwendungen. Diese Pipelines werden in der Regel als Docker Container auf eigenen Servern mit der Software GitLab Runner ausgeführt. In einer gitlab-ci.yml
-Datei werden die verschiedenen Stufen einer Pipeline definiert.
Beispiel: gitlab-ci.yml
image: node
stages:
- test
- build
- deploy
test:
stage: test
cache:
paths:
- node_modules/
before_script:
- npm install
script:
- npm test
build:
stage: build
script:
- npm build
artifacts:
paths:
- public
only:
- master
deploy:
stage: deploy
script:
- npm deploy
only:
- master
- Wie lassen sich Docker Container im Projekt nutzen und ausführen?
- Wie funktioniert das Networking mit Docker?
- Wie funktioniert die persistente Speicherung von Daten mit Docker?
- Wie lässt sich CI/CD in Kombination mit Docker einsetzen?
- Welche Tools eigenen sich für die Nutzung von CI und Docker (im Projekt)?