[41] Podstawowe operacje na obrazach kontenerów (Docker/DockerHub)

Po napisaniu pliku Dockerfile (wcześniejszy post) podstawowe operacje na kontenerach to:

  • zalogowanie na zdalnej maszynie (docker-machine)
  • utworzenie obrazu
  • otagowanie obrazu
  • umieszczenie obrazu w zdalnym repozytorium DockerHub

Obrazy można też tworzyć lokalnie bez docker-machine i wtedy tworzone są na maszynie na której jesteśmy bezpośrednio zalogowani. Nie jest też konieczne korzystanie z dockerhub i można przechowywać obrazy lokalnie na maszynie na której są uruchamiane lub umieszczać w prywatnym repozytorium. Dla publicznie dostępnych obrazów dockerhub jest jednak rozwiązaniem najbardziej wygodnym.

Zalogowanie na zdalnej maszynie (docker-machine)

Docker-machine umożliwia wykonywanie na zdalnym hoście obrazów dockera.

Podstawowa instrukcja to:

eval $(docker-machine env nazwa_hosta)

Nazwę dostępnych hostów można otrzymać przez:

docker-machine ls

Tworzenie kontenera

Komenda tworząca obraz:

docker build -t "KONTO_NA_DOCKERHUB/NAZWA_OBRAZU:TAG_PODSTAWOWY" LOKALIZACJA_DOCKERFILE

czyli dla przykładu:

docker build -t "piotrczaja/pyramid:1.7.3-R6" .

tworzy obraz pyramid docelowo umieszczany na dockerhub na koncie piotrczaja i otagowany jako wersja 1.7.3-R6. Zgodnie z przyjętą konwencją 1.7.3 to wersja pakietu pyramid a R6 to numer wydania tego obrazu.

Otagowanie kontenera

Pierwotne tagi obrazu najczęściej odnoszą się do wersji. Istnieje też tag specjalny: latest, który umożliwia brak podania tagu przy pobieraniu. Docker nie pobiera automatycznie najnowszej wersji, lecz tag ten trzeba utworzyć i aktualizować ręcznie by wskazywał na najnowszą wersję obrazu.

Tworzenie taga:

docker tag ID_OBRAZU KONTO_NA_DOCKERHUB/NAZWA_OBRAZU:TAG

Argument -t polecenia build pozwala na jednoczesne oznaczenie wieloma tagami jednego obrazu ale jest to w praktyce rzadko stosowane bo dodatkowe tagi dodaje się dopiero po sprawdzeniu obrazu.

Dla latest było by:

docker tag ID_OBRAZU piotrczaja/pyramid:latest

W ten sposób wiele tagów wskazuje na jeden obraz i aby go usunąć trzeba dodać opcję --force.

Umieszczenie obrazu na DockerHub

Logowanie na dockerhub następuje przez:

docker login

bez podania dodatkowych argumentów.

Aktualizację wszystkich wersji danego obrazu umieszczonych lokalnie na dockerhub wykonać można przez:

docker push KONTO_NA_DOCKERHUB/NAZWA_OBRAZU

czyli dla podanego przykładu:

docker push piotrczaja/pyramid

Wyśle to wszystkie lokalne obrazy pyramid na dockerhub. Dodanie tagów spowoduje, że wysłany zostanie tylko wybrany obraz, np.:

docker push piotrczaja/pyramid:latest