# Eigenen Docker Registry auf einem Raspberry Pi hosten im lokalen Netzwerk
### - Docker auf dem Raspberry installieren
Update und Upgrade ausführen:
```shell
sudo apt-get update && sudo apt-get upgrade
```
Anschließend wurde ein Docker Installationsskript zur verfügung gestellt, welches wir nun
herunterladen und ausführen.
```shell
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
```
Nun noch optional den User in der Docker-Gruppe hinzufügen:
```shell
sudo usermod -aG docker $USER
```
Installation überprüfen:
```shell
docker --version
```
Nachdem nun Docker erfolgreich auf dem Raspberry Pi installiert worden ist, können wir uns nun um die
eigentliche Aufgabe kümmern: __das Aufsetzen eines Registries im lokalen Netzwerk.__
### - Registry Container starten und weitere Befehle
Mit diesem Befehl können wir nun den registry container starten:
(Dieser wird natürlich zuerst heruntergeladen werden müssen.)
```shell
docker run -d -p 5000:5000 --restart=always --name registry registry:2
```
#### Stoppe die lokale Registry:
```shell
docker container stop registry
```
#### Entfernen des Containers mithilfe von:
```shell
docker container stop registry && docker container rm -v registry
```
#### Automatisches starten des Containers nach einem Neustart:
```shell
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
registry:2
```
### - Eigenes Image in die Registry hochladen
In diesem Beispiel wird das ubuntu image von Docker Hub heruntergeladen, unbenannt und in die lokale Registry hochgeladen.
1. Ziehen des Images von Docker Hub. (Auf einem anderen Rechner.)
```shell
docker pull ubuntu:16.04
```
2. Taggen des images. Anstatt localhost muss hier die interne IP oder der Hostname eingetragen werden!
```shell
docker tag ubuntu:16.04 IpVomRaspberry:5000/my-ubuntu:latest
```
3. Nun Push das Image in die registry.
```shell
docker push IpVomRaspberry:5000/my-ubuntu:latest
```
Falls nun solch eine Rückmeldung kommt;
```shell
PS C:\Users\User> docker push IpVomRaspberry:5000/my-ubuntu:latest
The push refers to repository [IpVomRaspberry:5000/my-ubuntu]
Get "https://IpVomRaspberry:5000/v2/": http: server gave HTTP response to HTTPS client
```
müssen wir entweder HTTPS auf dem Raspberry Pi verwenden (z.B. selber signierte Zertifikate: [docs.docker.com](https://docs.docker.com/registry/insecure/)) oder wir nutzen HTTP anstelle von HTTPS.
Da wir dies nur im lokalen Netzwerk zu *testzwecken* betreiben, werden wir die *IpVomRaspberry*
zur Liste der "unsicheren" Registries in der Docker-Konfiguration hinzufügen.
Dies muss lokal auf dem Gerät, welches die Images pushen/pullen will geschehen.
Hier ein Link für die möglichen Konfigurationen [docs.docker.com](https://docs.docker.com/engine/reference/commandline/dockerd/)
Unter Linux:
1. Erstellen oder bearbeiten Sie die Datei daemon.json im Verzeichnis /etc/docker/ (normalerweise benötigen Sie Root-Berechtigungen).
2. Fügen Sie folgenden Inhalt hinzu, wobei Sie IpVomRaspberry durch die tatsächliche IP-Adresse ersetzen:
```shell
{
"insecure-registries": ["IpVomRaspberry:5000"]
}
```
3. Docker neustarten:
```shell
sudo systemctl restart docker
```
Unter Windows:
Einstellungen -> Docker Engine
```json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"insecure-registries": [
"IpVomRaspberry:5000"
]
}
```
-> Apply & restart
Nun sollte man die Images pushen und pullen können.
Wichtig: Es hat beim Testen nur mit der IP funktioniert, NICHT mit dem Hostnamen!
Bei der Erstellung wurde sich an die Anleitung von Docker gehalten für das deployen einer Registry.
[docs.docker.com](https://docs.docker.com/registry/deploying/)
### Bonus: Zeige alle verfügbaren Images an
Rufe folgende URL auf: ```http://IpVomRaspberry:5000/v2/_catalog```
Als Antwort bekommt man als .json Format eine Liste aller verfügbaren Images.