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