Dockerin tagit lyhyesti

 


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

Edellinen artikkeli
Docker multi-stage