oder
$ mvn -o package
$ java -jar target/rest-microservice-1.0.0.jar server
$ sensible-browser "http://localhost:8080/hello-world"
$ docker build -t my/microservice .
$ docker run -d --name web1 my/microservice
$ docker run -d --name web2 my/microservice
$ docker run -d --name web3 my/microservice
$ docker pull haproxy:lts
$ docker run -d --name balancer \
--link web1:web1 --link web2:web2 --link web3:web3 \
-p 80:80 \
-v (pwd)/etc:/usr/local/etc/haproxy:ro \
haproxy:lts
$ sensible-browser "http://localhost:8080/hello-world"
Image: Paketierte Zusammenstellung von Dateien. Damit eine schreibgeschützte Blaupause für eine Systemumgebung.
Container: Eine unabhängige Systemumgebung basierend auf einem Image
Repository: Ein Sammlung von Images auf dem lokalen Docker oder zentralen Registry Server
1. **Manuell:** *Commit* eines Containers 2. **Automatisiert:** via `Dockerfile`
In der Regel: Automatisiert, aufbauend auf einem via `docker pull` bezogenem Base-Image
Dockerfile
FROM openjdk:slim
MAINTAINER Inspector Gadget
# Kommando im Container ausführen
RUN apt-get update && apt-get install unzip -y && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# JAR und Config-File in Image aufnehmen
WORKDIR /opt
ADD target/rest-microservice-1.0.0.jar app.jar
ADD src/main/resources/example.yml app.yml
# announce exported port 8080 and 8081
EXPOSE 8080 8081
# Wichtig: Separate Volumes für Daten
VOLUME ["/srv/"]
# JAR ausführen beim Start des Containers
ENTRYPOINT java -jar app.jar server
Datenhaltung unabhängig vom Container-Lebenszyklus.
Überlebt: Löschen & Updates.
Erlaubt: Sharing.
docker build -t my/microservice
docker run -d --name web1 my/microservice
docker run -d --name web2 my/microservice
docker run -d --name web3 my/microservice
docker run -d --name balancer \
--link web1:web1 --link web2:web2 --link web3:web3 \
-p 80:80 \
-v (pwd)/etc:/usr/local/etc/haproxy:ro \
haproxy:lts
haproxy:
image: haproxy:lts
ports:
- 8080:80
volumes:
- ./etc/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
links:
- web1
- web2
- web3
web1:
image: exxcellent/docker_talk
Automatisierung Provisioning, Config, Delivery
Immutability
Umgebung = Code. Disposable
Serverkonsolidierung
System-agnostisch
Deployment
Einfach; Container als Einheit