W tym artykule dowiesz się jak skonfigurować swoje własne Docker Registry w mniej niż 7 minut.

Co ważne, nie potrzebujesz swojej infrastruktury! Użyjemy tutaj środowiska Play With Docker. Oczywiście, jeżeli chcesz wykonać to na własnej infrastrukturze – jest to jak najbardziej możliwe.

Uwaga: Decydując się na uruchomienie Docker Registry we własnej infrastrukturze, nie wszystkie polecenia będą kompatybilne z Windowsem.
Zalecam zatem by był to Linux – najlepiej Ubuntu/Debian.  Wymagane jest zainstalowanie Dockera (wystarczy wersja community) oraz dostęp do internetu.

Środowisko Play with Docker – Wprowadzenie

Jest to środowisko online, do którego dostęp ma każdy posiadacz konta na Docker Hub. Jeżeli nie masz jeszcze konta, utwórz je w 30 sekund TUTAJ.

PWD jest swego rodzaju piaskownicą do zabawy z Dockerem. Można śmiało określić je znakomitym miejscem do rozpoczęcia przygody z Dockerem.

Korzystając z PWD, otrzymujesz dostęp do wirtualnej maszyny Linux Alpine w przeglądarce (!), w której możesz budować, uruchamiać kontenery, a nawet tworzyć klastry z wykorzystaniem Docker Swarm.

Dzięki rozwiązaniu Docker-in-Docker jesteśmy w stanie uzyskać efekt wielu wirtualnych maszyn działających w jednej podsieci.

Jest to świetne rozwiązanie, gdy chcemy zacząć z Docker Swarm nie mając własnej infrastruktury. Co ważne, możemy podłączyć się do każdej z wirtualnych maszyn z środowiska PWD za pomocą SSH.

To tyle tytułem wstępu. Przejdźmy do uruchamiania własnego Docker Registry

1. Otwórz PWD w przeglądarce

https://labs.play-with-docker.com/

Jak wspominałem, potrzebujesz zalogować się za pomocą konta na Docker Hub. Jeżeli jeszcze go nie masz, utwórz je.

Po zalogowaniu, powinieneś zobaczyć podobny ekran

2. Utwórz nową wirtualną maszynę

Wystarczy kliknąć „Add New Instance”. Spowoduje to utworzenie nowej wirtualnej maszyny Linux Alpine, z zainstalowanym Dockerem.

3. (Opcjonalnie) Podłącz się do wirtualnej maszyny przez SSH

Możesz pominąć ten krok i przejść dalej. Jednak dla własnej wygody, możesz podłączyć się do wirtualnej maszyny za pomocą SSH. 
Osobiście polecam 🙂

TIP: Możesz mieć problem z certyfikatami. Wystarczy użyć ssh-keygen by wygenerować parę publicznego i prywatnego klucza. Następnie jeszcze raz spróbować użyć polecenie SSH. Przykład znajdziesz poniżej.

ssh ip172-18-0-59-boe453jjagq000fum410@direct.labs.play-with-docker.com
Connecting to 13.90.56.106:8022
Connecting to 13.90.56.106:8022
###############################################################
#                          WARNING!!!!                        #
# This is a sandbox environment. Using personal credentials   #
# is HIGHLY! discouraged. Any consequences of doing so are    #
# completely the user's responsibilites.                      #
#                                                             #
# The PWD team.                                               #
###############################################################
[node1] (local) root@192.168.0.23 ~

4. Utwórz katalog do przechowania obrazów

$ mkdir -p /etc/myregistry/data

Jako, że uruchomimy Docker Registry jako kontener, potrzebujemy persystencji danych. Więcej o przechowywaniu danych możesz przeczytać TUTAJ.

Krótko mówiąc, chodzi o miejsce gdzie będą przechowywane obrazy po wykonaniu komendy docker push.

5. Uruchom Docker Registry

Istnieje oficjalny obraz na Docker Hubie o nazwie registry, z którego skorzystamy by uruchomić lokalnie Docker Registry.

$ docker container run -d \
-p 5000:5000 \
--name registry \
-v /etc/myregistry/data:/var/lib/registry \
--restart always \
registry:2

Za pomocą parametru -v /etc/myregistry/data:/var/lib/registry dodajemy volumen, w którym będą przechowywane obrazy lokalnie na dysku. Dodatkowo, chcemy by registry było uruchamiane automatycznie, nawet po restarcie systemu. Służy do tego parametr --restart always. Registry będzie dostępne pod adresem localhost:5000

6. Wyświetl działające kontenery

Sprawdźmy zatem czy kontener z Docker Registry wystartował poprawnie. Powinien mieć status „Up”.

$ docker container run -d -p 5000:5000 --name registry -v /etc/myregistry/data:/var/lib/registry --restart always registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
c429863f6703aac23b1c2cb015f98294126f9a30a07f000b482b010f9a56c67d
[node1] (local) root@192.168.0.23 ~
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
c429863f6703        registry:2          "/entrypoint.sh /etc…"   7 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   registry

7. Pobierz obraz Ubuntu

Aby przetestować, czy Docker Registry działa poprawnie, pobierzemy obraz Ubuntu a następnie dodamy go do naszego Docker Registry.

$ docker image pull ubuntu:18.04
18.04: Pulling from library/ubuntu
2746a4a261c9: Pull complete 
4c1d20cdee96: Pull complete 
0d3160e1d0de: Pull complete 
c8e37668deea: Pull complete 
Digest: sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

8. Dodaj tag do obrazu Ubuntu

Jako, że nasze Docker Registry jest dostępne pod adresem localhost:5000, musimy dodać odpowiedni tag do pobranego obrazu Ubuntu.

$ docker image tag ubuntu:18.04 localhost:5000/ubuntu:18.04

9. Wyczekiwany Docker Push

Teraz nie zostaje nic innego, jak dodanie nowego obrazu do naszego Docker Registry.

$ docker image push localhost:5000/ubuntu:18.04
The push refers to repository [localhost:5000/ubuntu]
918efb8f161b: Pushed 
27dd43ea46a8: Pushed 
9f3bfcc4a1a8: Pushed 
2dc9f76fb25b: Pushed 
18.04: digest: sha256:2695d3e10e69cc500a16eae6d6629c803c43ab075fa5ce60813a0fc49c47e859 size: 1152

10. Docker Pull – pobieranie obrazu z lokalnego Docker Registry

Usuniemy wcześniej pobrane obrazy, aby mieć 100% pewności, że nasze Docker Registry działa poprawnie. W tym celu należy użyć komendy docker image rm localhost:5000/ubuntu:18.04 oraz docker image rm ubuntu:18.04

$ docker image rm localhost:5000/ubuntu:18.04
Untagged: localhost:5000/ubuntu:18.04
Untagged: localhost:5000/ubuntu@sha256:2695d3e10e69cc500a16eae6d6629c803c43ab075fa5ce60813a0fc49c47e859

$ docker image rm ubuntu:18.04
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
Deleted: sha256:549b9b86cb8d75a2b668c21c50ee092716d070f129fd1493f95ab7e43767eab8
Deleted: sha256:7c52cdc1e32d67e3d5d9f83c95ebe18a58857e68bb6985b0381ebdcec73ff303
Deleted: sha256:a3c2e83788e20188bb7d720f36ebeef2f111c7b939f1b19aa1b4756791beece0
Deleted: sha256:61199b56f34827cbab596c63fd6e0ac0c448faa7e026e330994818190852d479
Deleted: sha256:2dc9f76fb25b31e0ae9d36adce713364c682ba0d2fa70756486e5cedfaf40012

Wpisując polecenie docker image pull localhost:5000/ubuntu:18.04 obraz zostanie pobrany już z lokalnego Docker Registry.

$ docker image pull localhost:5000/ubuntu:18.04
18.04: Pulling from ubuntu
2746a4a261c9: Pull complete 
4c1d20cdee96: Pull complete 
0d3160e1d0de: Pull complete 
c8e37668deea: Pull complete 
Digest: sha256:2695d3e10e69cc500a16eae6d6629c803c43ab075fa5ce60813a0fc49c47e859
Status: Downloaded newer image for localhost:5000/ubuntu:18.04
localhost:5000/ubuntu:18.04

Uwaga: Jest to tylko przykład pokazujący w jaki sposób, możemy szybko uruchomić własne Docker Registry.
Absolutnie, nie polecam stosować tego na produkcji.
Być może, wkrótce pojawi się artykuł przedstawiający sposób na skonfigurowanie Docker Registry On-premise dla rozwiązań produkcyjnych.
Mam tutaj na myśli uwierzytelnianie oraz komunikacje z wykorzystaniem TLS.
Jeśli jesteś zainteresowany tym tematem, dołącz do newslettera. Zapisać możesz się poniżej!

Dołącz do newslettera

Już ponad 600 osób zapisało się na mój newsletter (zero spamu! - tylko informacje o nowych artykułach oraz ciekawe nowinki ze świata konteneryzacji).

Zapisując się, jako bonus prześlę Ci "21 Praktycznych Przykładów Użycia Dockera Dla Developerów" oraz zbiór "10 Najlepszych Praktyk Tworzenia Dockerfile"


Kategorie: Registry

Damian Naprawa

Praktykujący pasjonat konteneryzacji. Lubi dzielić się wiedzą, prowadząc warsztaty i szkolenia. Uczestnik globalnego programu partnerskiego Docker Enablement. Pracuje z Dockerem na co dzień od kilku lat. Odpowiedzialny za tworzenie i utrzymanie systemów działających w oparciu o kontenery. Fan automatyzacji oraz podejścia "As a Code".

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *