---
title: "Prywatny rejestr Docker w OKD na zasobie NFS"
url: https://michalasobczak.pl/pl/posts/okd-docker-private-registry-on-nfs-mount.html
author: "Michał Sobczak"
description: "Jeśli używasz OKD/OpenShift, najprawdopodobniej uruchamiasz też wewnętrzny, prywatny rejestr Docker dla swoich buildów. Klaster korzysta z niego, wyszukując obrazy kontenerów do dalszych wdrożeń. W podstawowej, domyślnej instalacji Docker Registry znajduje się w projekcie o nazwie default."
published: 2022-11-06T09:25:35.000Z
updated: 2022-11-06T09:26:46.000Z
language: pl
categories: ["Technology"]
tags: ["Storage", "OpenShift / OKD"]
license: CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/)
---
# Prywatny rejestr Docker w OKD na zasobie NFS

Jeśli używasz OKD/OpenShift, najprawdopodobniej uruchamiasz też wewnętrzny, prywatny rejestr Docker dla swoich buildów. Klaster korzysta z niego, wyszukując obrazy kontenerów do dalszych wdrożeń. W podstawowej, domyślnej instalacji Docker Registry znajduje się w projekcie o nazwie default. Używa on też quasi-trwałego magazynu, który przetrwa tylko do następnego ponownego wdrożenia kontenera (poda) rejestru. Istnieje jednak możliwość zamontowania wolumenu NFS w konfiguracji wdrożenia rejestru, dzięki czemu obrazy wypchnięte do rejestru nie znikną, gdy trzeba będzie ponownie wdrożyć sam rejestr. Taka potrzeba może się pojawić, jeśli uruchamiasz playbook Ansible do ponownego wdrażania certyfikatów. Przeglądając ten playbook, zobaczysz krok, w którym następuje ponowne wdrożenie rejestru, więc w takim scenariuszu potrzebujesz trwałego magazynu dla rejestru.

Najpierw zainstaluj serwer NFS na osobnej maszynie i skonfiguruj katalog oraz `/etc/exports`. Następnie zrestartuj serwer NFS (`service nfs-server restart`).

```bash
/opt/PVdirectory		*(rw,root_squash,no_wdelay)
```

Następnie trzeba utworzyć na masterze OKD konfigurację PV (czyli persistent volume):

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: PVname
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  nfs:
    path: /opt/PVdirectory
    server: 192.168.1.2
  persistentVolumeReclaimPolicy: Recycle
```

Zastosuj tę konfigurację:

```bash
oc create -f filename.yaml
```

Właśnie utworzyłeś definicję PV, która mówi OKD, by szukał wolumenu NFS na 192.168.1.2 w `/opt/PVdirectory` o pojemności 10GiB, który zostanie odzyskany (recycle), jeśli nie będzie powiązany. Następnie musisz skopiować bieżącą zawartość rejestru, czyli obrazy Docker. Nie ma `scp` do kopiowania plików, ale najpierw spakuj je za pomocą `tar`:

```bash
cd /registry
tar -cf docker.tar docker
```

Teraz przejdź na mastera i znajdź nazwę kontenera docker-registry (zastąp abcdefg właściwym ID):

```bash
oc rsync docker-registry-abcdefg:/registry/docker.tar .
```

Przenieś archiwum na serwer NFS i tam je rozpakuj. Główny folder ma właściciela nfsnobody, ale wewnętrzna zawartość taką samą jak oryginał:

```bash
sudo chown -R 1000000000:1000000000 docker
```

Teraz przejdź do webconsole OKD i wyłącz rejestr (przeskaluj do 0 podów). Przejdź do konfiguracji wdrożenia, usuń domyślny magazyn i dodaj w jego miejsce swój, podając /registry jako ścieżkę. Uruchom rejestr ponownie i przetestuj go. Teraz powinien korzystać z zasobu NFS i możesz swobodnie ponownie wdrażać rejestr, gdy zajdzie taka potrzeba.
