Dockerin tagit tuntuvat ajoittain aiheuttavan sekaannusta. Yritän seuraavassa vähän selventää perusasioita esimerkkien avulla.
Lyhyesti sanottuna, näköistiedoston (image) tagi ei ole pakollinen, mutta erittäin suositeltava. Jos antaa nimen, mutta ei tagia, tagiksi tulee automaattisesti “latest”. Tämä kuitenkaan ei tarkoita välttämättä tuotteen uusinta versiota. Tagi “latest” on oikeastaan enemmänkin mukavuustekijä, jota käytetään automaattisesti niissä Dockerin komennoissa, jotka olettavat saavansa tagin vastaan, mutta se jätetään komentoa kutsuttaessa pois.
Esimerkkinä Debian Linux -jakelupaketti:
Kuvassa jokainen rivi edustaa eri Docker-näköistiedostoa. Tagi “latest” on annettu bullseye-versiolle, joka on versio 11. Listalta löytyy myös näköistiedosto bookworm, jonka versio tulee olemaan 12. Jos käyttäjä komentaa docker run debian
tai docker run debian:latest
, ei käyttäjä saakaan käyttöönsä uusinta uutta Debiania (12 tai bookworm), vaan viimeisimmän virallisesti julkaistun version 11 eli bullseye.
Nimi ja tagi eivät kumpikaan ole välttämättömiä. Komentamalla esimerkiksi docker build .
, tulee tulokseksi nimetön ja tagiton näköistiedosto:
REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 6b6da5366a5e 26 seconds ago 752MB
Docker nimeää kaikki aihiot IMAGE ID:llä. ID näyttää tällaiselta merkkijonolta: “6b6da5366a5e” ja se on yksilöllinen jokaiselle aihiolle. Eli vaikkei nimeä antaisikaan, voi tiedostoon viitata ID:llä.
Jos antaa nimen, voi tagin siltä jättää pois, jolloin Docker automaattisesti leimaa mukaan “latest”-tagin. Esimerkiksi docker build -t testimage .
:
REPOSITORY TAG IMAGE ID CREATED SIZE testimage latest 6b6da5366a5e 5 minutes ago 752MB
Tagien avulla aihioille voidaan antaa nimiä, jotka kuvaavat paremmin aihion sisältöä. Lisäksi tageilla voidaan kertoa aihioiden versiotietoja.
Jos tagin antaa nimen mukana, ei “latest”-tagia laiteta mukaan ollenkaan. Esimerkiksi, docker build -t testimage:v1 .
:
REPOSITORY TAG IMAGE ID CREATED SIZE testimage v1 6b6da5366a5e 14 minutes ago 752MB
Muun muassa tämän takia ei kannata luottaa siihen, että “latest” aina viittaisi viimeisimpään tiedoston käännökseen tai versioon.
Tageja voi myös lisätä ja poistaa. Komentamalla docker tag --help
saadaan lyhyt ohjeistus:
Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Ohjeistus, joka ei ole ehkä se selkein, kertoo meille, että tagi on itse asiassa näköistiedoston nimen ja mahdollisen lisämääreen yhdistelmä, oli se sitten versionumero, tarkentava nimi tai jotain muuta. Lisäksi se on vain viittaus varsinaiseen tiedostoon.
Tagin voi lisätä komentamalla docker tag testimage:v1 testimage:firstversion
:
REPOSITORY TAG IMAGE ID CREATED SIZE testimage firstversion 6b6da5366a5e 31 minutes ago 752MB testimage v1 6b6da5366a5e 31 minutes ago 752MB
Tagin poistaminen näyttää pelottavalta, docker image rm testimage:firstversion
:
Untagged: testimage:firstversion
Komennosta huolimatta Docker ei tuhoa itse näköistiedostoa vaan poistaa vain tagin, edellyttäen että tiedostolla vielä on nimi ja/tai toinen tagi olemassa. Jos komennon ajaa tilanteessa, jossa Dockerilla on vain yksi viittaus olemassa näköistiedostoon, poistetaan koko tiedosto. Käytös johtuu taustalla olevasta Dockerin arkkitehtuurista.
Toivottavasti yllä olevat esimerkit hieman selvensivät Dockerin tagien toimintaa. Lisätietoa voi lukea täältä: Docker Reference: docker tag
Kirjoittaja on Ouron Senior Developer Matti Kärki