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) [email protected] ~
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) [email protected] ~ $ 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!