docker tag tworzy dodatkową nazwę (referencję) dla obrazu, który już masz lokalnie. Nie kopiuje warstw, nie buduje niczego od nowa, nie zajmuje dodatkowego miejsca na dysku — robi po prostu kolejny „wskaźnik” na ten sam obraz, identyfikowany tym samym ID. Używasz tego głównie po to, żeby przygotować obraz do wypchnięcia do rejestru (np. Docker Hub, GitHub Container Registry albo prywatnego rejestru firmowego), bo docker push wymaga nazwy w formacie rejestr/repozytorium:tag. Drugi częsty powód to wersjonowanie: ten sam obraz chcesz mieć dostępny i jako :1.4.2, i jako :latest.
Składnia i najważniejsze opcje
Podstawowa forma to: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Komenda docker tag nie ma żadnych flag — to czysto pozycyjne polecenie. Cała „konfiguracja” siedzi w strukturze nazwy obrazu, więc warto ją rozumieć:
SOURCE_IMAGE— obraz źródłowy. Możesz podać nazwę z tagiem albo skrótowe ID obrazu (zdocker images).:TAG— opcjonalny tag. Gdy go pominiesz, Docker przyjmuje:latest(uwaga: to nie jest „najnowszy”, tylko domyślna etykieta).TARGET_IMAGE— docelowa nazwa repozytorium, np.twojanazwa/aplikacja.rejestr/— prefiks hosta rejestru, np.ghcr.io/lubregistry.firma.pl:5000/. Brak prefiksu = domyślnie Docker Hub.namespace/— przestrzeń nazw użytkownika lub organizacji, np.biblioteka/.
Przykłady użycia
docker tag myapp:latest pavelzin/myapp:1.0.0— nadaje lokalnemu obrazowi nazwę pod Twoje konto na Docker Hubie z konkretną wersją.docker tag myapp pavelzin/myapp— wersja minimalna: oba tagi domyślają do:latest.docker tag a1b2c3d4e5f6 ghcr.io/firma/api:nightly— taguje obraz po jego ID, gotowy do wypchnięcia do GitHub Container Registry.docker tag pavelzin/myapp:1.0.0 pavelzin/myapp:latest— ten sam obraz dostaje drugi tag, więc:latesti:1.0.0wskazują na to samo.docker tag myapp:1.0.0 registry.firma.pl:5000/zespol/myapp:1.0.0— przygotowanie pod prywatny rejestr z własnym portem.
Częste błędy i pułapki
Najczęstsza wpadka: ludzie myślą, że docker tag coś kopiuje albo zmienia obraz. Nie — to tylko alias. Skasowanie tagu przez docker rmi nie usuwa obrazu, dopóki istnieje choć jedna inna referencja. Druga pułapka: docker push bez prefiksu rejestru poleci na Docker Hub, więc jeśli celujesz w prywatny rejestr, host musi być częścią nazwy docelowej. Pamiętaj też, że tag to ruchoma etykieta — przetagowanie :latest na nowy obraz po cichu „przesuwa” tę nazwę, a stary obraz zostaje bez nazwy (dangling). Nazwy repozytoriów muszą być pisane małymi literami; wielkie litery wywalą błąd. I nie myl docker tag z budowaniem — żeby nadać tag podczas budowy, użyj docker build -t.
Powiązane komendy: docker build, docker push, docker pull, docker images, docker rmi.