Kratki uvod u Docker oznake

Ako ste čak neko vrijeme surađivali s Dockerom, kladim se da ste naišli na oznake. Često izgledaju poput "my_image_name: 1" gdje je dio nakon dvotačke poznat kao oznaka. Oznaka nije uvijek navedena prilikom označavanja slika, ali dno toga bit ćemo kasnije.

Otkad sam počeo koristiti Docker, jako sam zbunjen u vezi s oznakama. Dokumentacija ih ne objašnjava baš najbolje, a stvarno nema temeljitih objašnjenja na tu temu. Zbog toga sam odlučio napisati ovaj post.

Što su Docker oznake?

Pa, što su zapravo Dockerove oznake? Jednostavnim riječima, Dockerove oznake prenose korisne informacije o određenoj verziji / varijanti slike. Oni su nadimci na ID vaše slike koje se često izgledaju ovako: f1477ec11d12. To je samo način pozivanja na vašu sliku. Dobra je analogija kako se Git oznake odnose na određeni predaj u vašoj povijesti.

Dva najčešća slučaja kada oznake dolaze u obzir su:

  1. Prilikom izrade slike koristimo sljedeću naredbu:
docker build -t username/image_name:tag_name .

Pokušajmo malo raspakirati što ova naredba radi. Rečemo Docker demonu da preuzme Docker datoteku prisutnu u trenutnom direktoriju (to .čini kraj na kraju). Dalje, recimo Docker demonu da izgradi sliku i da joj navedenu oznaku. Ako pokrenete docker images, trebali biste vidjeti sliku čije je spremište username/image_namei oznaka tag_name.

username/image_name nije obvezni format za specificiranje naziva slike. Samo je korisna konvencija da izbjegnete ponovno označavanje slike kada je trebate gurnuti u registar.

Vaša slika može se imenovati kako god želite. Za javni Docker registar ograničeni ste na hijerarhiju na dvije razine dok imenujete slike. Na primjer, vaša slika ne može imati naziv a/b/c:1.Ovo ograničenje obično ne postoji u privatnim registrima. Kao što je ranije rečeno, nije obvezno navesti: tag_name.Uskoro ćemo vidjeti što će se dogoditi u tom slučaju.

2. Eksplicitno označavanje slike pomoću tagnaredbe.

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Ova naredba samo stvara alias (referencu) imenom tog TARGET_IMAGE koji se odnosi na SOURCE_IMAGE.To je sve što čini. To je kao da postojećoj slici dodijelite drugo ime kako bi se na nju odnosila. Primijetite kako je i ovdje oznaka neobavezna [:TAG].

Što se događa kada ne navedete oznaku?

U redu, hajde sada otkrijmo što se događa kada tijekom označavanja slike ne navedete oznaku. Ovdje latestoznaka dolazi na sliku. Kad god je slika označena bez eksplicitne oznake, zadana joj je latest oznaka. To je nesretni izbor imena koji uzrokuje veliku zabunu. Ali volim o tome razmišljati kao o zadanoj oznaci koja se daje slikama kad je ne navedete.

Mnogo zbrke latestnastaje zbog očekivanja da je to najnovija verzija slike, posebno u Dockerfilesu. Razmotrimo razne scenarije na primjeru:

Scenarij 1:

Pretpostavimo da je sljedeća izjava prisutna u našem Dockerfileu:

FROM debian

Budući da nismo naveli nijednu oznaku, Docker će dodati latestoznaku i pokušati povući sliku debian:latest.

Scenarij 2:

FROM debian:9.3

Budući da je ovdje izričito navedena oznaka, Docker će povući Debianovu sliku označenu 9.3

Treba imati na umu i to da ne postoji pravilo koje navodi da slika mora imati samo jednu oznaku. Slika može imati više oznaka i obično se koriste za određivanje glavnih i manjih verzija. Na primjer, uzmite u obzir ovo:

U vrijeme pisanja ovog posta je latestoznaka za Debian slika ukazuje na 9.3oslobađanje i za 9puštanje. To će se najvjerojatnije promijeniti u budućnosti kad god se glavna ili manja verzija naleti na sliku.

Imajte na umu da su oznake koje se koriste za semantičko određivanje verzija konvencija koja se slijedi, ali oznake nisu dizajnirane samo u tu svrhu.

Zaključno, najnovije nije posebna oznaka

Glavno izuzeće onoga što smo do sada pokrili jest da je i najnovije kao i svaka druga oznaka . Na razvojnom programeru je da pravilno označi slike tako da latestuvijek ukazuje na najnovije stabilno izdanje slike.

Stoga pri izvlačenju slika ne izričito navodimo oznaku u našim Docker datotekama, jer bismo mogli dobiti potpuno drugačiju verziju osnovne slike od one koju smo prije koristili. Ne postoje jamstva hoće li to biti velika ili manja neravnina. Čak se i staro izdanje može označiti kao latest.

PS Ako ste pronašli zablude / pogreške u postu, slobodno mi tvitnite @ScribbingOn.

Hvala Jérômeu Petazzoniju što mi je pomogao da shvatim nešto od ovoga.