Tworząc infrastrukturę opartą o kontenery Dockera wcześniej czy później (a raczej wcześniej) napotkamy problem dystrybucji prywatnych obrazów kontenerów w ramach klastra. Najprostszym rozwiązaniem jest wdrożenie własnego, lokalnego repozytorium dockera.
W tym wpisie pokażę jak to zrobić korzystając z gotowego obrazu i systemu CoreOS (choć w praktyce może być to dowolny system z zainstalowanym Dockerem).
Rozwiązanie opiera się o dostępny publicznie obraz kontenera o nazwie „registry”.
Obrazy będziemy przechowywać lokalnie, w folderze /data. W tym celu konieczne będzie skonfigurowanie kontenera poprzez przekazaniu mu zmiennej środowiskowej SETTINGS_FLAVOR=local oraz STORAGE_PATH=/data, a także podpięcie ścieżki z lokalnego dysku jako wolumenu Dockerowego.
Kompletne polecenie uruchamiające skonfigurowany kontener prezentuje się następująco:
docker run --name registry --rm -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/data -p 5000:5000 -v /data:/data registry
Aby zapewnić automatyczny start po uruchomieniu systemu powyższe możemy ubrać w plik unit celem deploymentu przy użyciu fleet (w przypadku CoreOS) lub po prostu poprzez systemd w innych niż CoreOS dystrybucjach:
[Unit] Description=registry [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker rm registry ExecStartPre=-/usr/bin/docker kill registry ExecStart=/usr/bin/docker run --name registry --rm -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/data -p 5000:5000 -v /data:/data registry ExecStop=/usr/bin/docker stop registry Restart=always [X-Fleet] Conflicts=registry@*.service
Gallar cze 23 , 2016 at 19:21 /
Czesc, dzięki wielkie za opis postawienia registry. Mam tylko pytanie jak z niego skorzystać. Mianowicie czy da się gdzieś podać ścieżkę z której ma korzystać podczas uruchamiania kontenera, czy trzeba się bawić w hosts systemu nosiciela?
Gallar cze 27 , 2016 at 12:15 /
Znalazłem odpowiedź:
Teraz na dowolnym innym serwerze instalujemy dockera i aktualizujemy konfigurację.
Umieszczamy certyfikat na odpowiedniej ścieżce:
1.# mkdir /etc/docker/certs.d/registry.my-company.local:5000/
2.# scp [email protected]:/etc/certs/self.crt /etc/docker/certs.d/registry.my-company.local:5000/ca.crt
Edytujemy plik /etc/sysconfig/docker, a nim modyfikujemy jedną linie:
1.ADD_REGISTRY=’–add-registry registry.my-company.local:5000′
Restartujemy usługę docker:
1.# systemctl restart docker
Sprawdzamy, czy działa:
1.# docker pull alpine:latest
2.# docker tag alpine:latest registry.my-company.local:5000/myalpine:latest
3.# docker push registry.my-company.local:5000/myalpine:latest
4.# docker rmi myalpine:latest
5.# docker rmi alpine:latest
6.# docker pull myalpine:latest
To oczywiście nie jest jedyny sposób na zbudowanie własnego registry. Bardziej zaawansowani administratorzy powinni zainteresować się instalację docker-registry z pakietów. Dodatkowo warto posłużyć się apache jako front-end i to na nim skonfigurować klucze SSL.
To z:
http://bel.pl/private-docker-registry/