‫Vereisten voor deze lezing zijn onder meer kennis van de basisprincipes van wat een container en
‫een afbeelding zijn in Docker en het begrijpen van
‫de lagen, of op zijn minst de basisprincipes van lagen. Weet een paar dingen over Docker Hub.
‫Deze lezing gaat helemaal over afbeeldingstags en hoe u deze kunt uploaden naar Docker Hub.
‫Er komt veel kijken bij tags, omdat ze niet zo intuïtief zijn als je zou denken
‫als je ze voor het eerst gaat gebruiken. Ze moeten een specifiek formaat hebben om met een register
‫te kunnen werken, met name met Docker Hub. Dan zal ik het met je hebben over de relatie
‫tussen de tags die aan je afbeeldingen zijn toegewezen en de ID's van die afbeeldingen.
‫Dus laten we beginnen.
‫Laten we het eerst hebben over taggen. docker-afbeeldingstag --help. Afbeeldingen hebben technisch gezien geen naam, ook al verwijzen we
‫er wel zo naar als we terloops praten.
‫Als we een
‫docker-afbeelding ls doen, merk je dat er geen naamkolom is.
‫Afgezien van het identiteitsbewijs, die niemand van ons gaat onthouden, toch?
‫We moeten ernaar verwijzen met drie verschillende stukjes informatie.
‫Op dit scherm voor het image ls-commando zien we er eigenlijk maar twee. Aan de linkerkant zien
‫we de repository,
‫dan zien we de tag. De repository bestaat eigenlijk uit de
‫gebruikersnaam of de organisatie-slash in de repository.
‫Hier hebben we alleen te maken met officiële repository-afbeeldingen,
‫dus we gaan alleen de daadwerkelijke repository-naam zien.
‫We hebben eerder vermeld dat de speciale afbeeldingen die als officieel worden beschouwd, de enige zijn die het recht
‫krijgen om gewoon hun naam van de repository te worden genoemd, niet de werkelijke naam van de slash-repository
‫van de organisatie.
‫Maar als we naar Docker Hub gaan en ik zoek gewoon op mysql, dan zullen we ontdekken dat er
‫eigenlijk een organisatie is, niet alleen de officiële mysql, die gewoon mysql wordt genoemd, maar
‫er is de SQL-organisatie met een mysql-server, die behoorlijk populair lijkt te zijn en, nou ja,
‫hij heeft meer dan een miljoen downloads. Het lijkt erop wat het hier is, dit is
‫eigenlijk dezelfde MySQL-server, maar het is eigenlijk gemaakt door het MySQL-team bij Oracle.
‫Als ik het echt wilde downloaden, zie je
‫hier aan de rechterkant, dat ik een docker pull mysql/mysql-server moet doen. Ik kan echt op de
‫kopieerknop klikken en ik kopieer dit naar binnen. Het zal deze unieke, op de organisatie gebaseerde afbeelding daadwerkelijk downloaden en als ik
‫opnieuw een docker-afbeelding ls doe, zult u merken dat de naam van de repository de naam van de organisatie bevat.
‫Op mijn account op Docker Hub sta ik bekend als bretfisher. Je kunt het vanaf de rechterbovenhoek zien.
‫Dus als ik naar mijn dashboard zou kijken en naar mijn afbeeldingen zou kijken die ik heb die
‫openbaar zijn, laten we eens kijken naar de nodemongoapp.
‫Als je dit zou
‫downloaden, zou ik docker pull bretfisher/nodemongoapp moeten doen.
‫Nu we begrijpen hoe de repository wordt genoemd, waar dient de tag voor?
‫De tag is niet echt een versie en het is niet echt een branch, maar het lijkt veel op Git-tags.
‫Dus het is een beetje van allebei.
‫Het is eigenlijk gewoon een verwijzing naar een specifieke image-commit, en kan echt van alles zijn, in die repository.
‫Als we even teruggaan naar Docker Hub, en we gaan naar de officiële mysql-afbeelding, dan zie je op de voorpagina dat
‫deze verschillende tags heeft. Wat ze hier proberen te zeggen is dat de 8. 0. 0
‫en de 8. 0 en de 8 zijn allemaal tags voor dezelfde afbeeldings-ID.
‫Als ik hier omhoog scrol en naar de tags-knop kijk, krijg ik een volledige gedetailleerde lijst van alle verschillende tags die
‫ze aan de mysql hebben gegeven.
‫Dus laten we naar Nginx gaan, waar we veel aan hebben gewerkt.
‫We zullen hier zien dat het niet alleen cijfers zijn, maar ook namen.
‫Het is belangrijk om erop te wijzen dat dit eigenlijk allemaal exact hetzelfde beeld is en
‫dat Docker slim genoeg is om dat te weten. Ik ga naar mijn opdrachtregel en ik zie dat ik de laatste nginx al heb gedownload.
‫Als ik naar de webpagina kijk, zie ik de nieuwste tag hier, maar deze wordt ook mainline genoemd.
‫Dus wat als ik een docker nginx:mainline trek? Wat dit ons vertelt, is dat het eigenlijk al wist dat op basis van de
‫afbeeldings-ID deze afbeelding zich al in mijn cache bevindt. Als ik nu opnieuw een docker-afbeelding
‫ls doe, zie ik twee verschillende nginx. Je zult merken dat ze exact dezelfde afbeeldings-ID hebben omdat ze niet echt twee keer in de cache worden
‫opgeslagen en, nogmaals, dit gaat terug op een groot deel van de besparingen. Deze tags zijn slechts labels
‫die verwijzen naar een daadwerkelijke afbeeldings-ID en we kunnen er veel van hebben die allemaal naar dezelfde
‫verwijzen.
‫Dus hoe maak ik nieuwe labels?
‫Nou, ik zou mijn eigen Dockerfile kunnen maken en mijn eigen aangepaste afbeelding kunnen
‫maken, maar we kunnen ook bestaande Docker-afbeeldingen opnieuw taggen, zodat ik gewoon
‫een docker-afbeeldingstag nginx bretfisher/nginx kan doen. Het formaat van deze opdracht is de afbeelding waaraan ik een nieuwe
‫tag ga geven, en dan de nieuwe tag die ik eraan wil geven.
‫Als ik een docker-afbeeldingstag heb gedaan --help opnieuw, om je geheugen op te frissen, toont het de SOURCE_IMAGE
‫en een
‫optionele tag en vervolgens de NEW_IMAGE een optionele tag.
‫Dus als u de tag niet opgeeft, wordt deze altijd standaard ingesteld op de laatste. Nieuwste betekent eigenlijk niet altijd de nieuwste omdat ik technisch
‫gezien wat oude software zou kunnen nemen en deze als laatste zou kunnen taggen.
‫Er is niets bijzonders aan, maar het is gewoon een soort standaard. Echt, ik wou dat ze
‫het gewoon standaard zouden noemen en niet de nieuwste.
‫Het is dus een
‫beetje verwarrend, maar over het algemeen op Docker Hub, vooral als je officiële afbeeldingen gebruikt, kun je erop
‫vertrouwen dat de nieuwste over het algemeen de nieuwste stabiele versie is van de software die je wilt gebruiken.
‫Dus laten we opnieuw een
‫docker-image ls doen. Let op wat er is gebeurd.
‫Ik heb een nieuwe tag toegevoegd aan een bestaande afbeelding die ik niet heb gemaakt.
‫Het toont dezelfde afbeeldings-ID en
‫nu is het gelabeld met mijn gebruikersnaam en een nieuwe repo die nog niet bestaat op Docker Hub.
‫Als we naar mijn dashboard
‫gingen kijken, heb ik niets dat bretfisher/nginx heet.
‫Dus wat als ik een docker-afbeelding zou pushen, vergelijkbaar met een Git-push, bretfisher/nginx?
‫geweigerd: gevraagde toegang tot de bron wordt geweigerd.
‫Dus het probeerde duidelijk te uploaden wat ik zojuist heb gemaakt, het probeerde die tag te uploaden, maar het gaf me
‫toegang geweigerd.
‫Dat komt omdat ik niet echt ingelogd ben.
‫Dus als je naar de docker --help kijkt, zie je een login en logout commando. Die hebben we nog niet gebruikt.
‫Dus als u eenmaal uw eigen gratis Docker Hub-account heeft, kunt u zich daadwerkelijk aanmelden vanaf de docker-login op de opdrachtregel.
‫Dus wat dit feitelijk deed, was dat dit naar een bestand schreef, dat standaard in mijn profiel staat onder cat . docker/config. json, en het heeft
‫feitelijk een authenticatiesleutel opgeslagen waarmee mijn lokale docker-CLI als ik toegang kan krijgen tot Docker
‫Hub.
‫Dit is een belangrijk punt waar we later in de productie meer over zullen leren,
‫namelijk dat waar je ook inlogt met de Docker CLI, deze standaard deze authenticatiesleutel voor je account opslaat in het
‫profiel van die gebruiker.
‫Wees je daar dus gewoon van bewust.
‫Als u een machine gebruikt die u niet vertrouwt, typt u gewoon docker logout als u klaar bent.
‫Dus nu we zijn ingelogd, ga ik op de pijl omhoog drukken om te proberen die afbeelding opnieuw te pushen.
‫OKE.
‫Het lijkt dus klaar te zijn.
‫Laten we naar Docker Hub gaan en op vernieuwen klikken. Daar
‫is het, bretfisher/nginx. Nogmaals, ik hoefde dit niet helemaal opnieuw te maken om het te uploaden.
‫Ik heb gewoon een nieuwe tag aan een bestaande afbeelding gegeven en toen ik deze uploadde, maakte deze automatisch
‫een nieuwe repo op basis van die tag.
‫Natuurlijk zou ik hier alle informatie kunnen invullen, en je zult zien dat het standaard
‫de laatste tagnaam is omdat ik er geen heb gespecificeerd. Dus ik zou eigenlijk terug kunnen gaan en het pijltje
‫omhoog doen totdat ik bij mijn tag kom en ik er een andere tag aan kan geven.
‫We gaan een extra tag toevoegen aan diezelfde afbeelding en ik noem het testen. Als we een docker-afbeelding ls doen,
‫zul
‫je zien dat ik er nu drie heb met allemaal dezelfde afbeeldings-ID.
‫Als ik een docker-image push bretfisher/nginx:testing, en deze keer heb ik testen gespecificeerd, merk dan op
‫dat er al lagen bestaan.
‫Dat maakt deel uit van onze geweldige spaarrente.
‫Wanneer we afbeeldingen downloaden en uploaden, dat er al lagen bestaan, zal het niet de moeite nemen om ze
‫opnieuw te uploaden.
‫Als we teruggaan en ik op vernieuwen klik, zul je zien dat ik nu een andere tag heb.
‫Maar natuurlijk, als ik zojuist een docker-afbeelding ls heb gemaakt, zien we net zoals we zagen dat het dezelfde afbeeldings-ID
‫is en beide kanten van deze verbinding weten het. Als ik wilde dat dit een privé-repository zou zijn, omdat
‫dat een ondersteunde functie van Docker Hub is, zou ik waarschijnlijk eerst de repository willen maken, en toen
‫ik het maakte, specificeerde ik dat het privé was.
‫Toen ik er vervolgens op drukte, zou de code nooit openbaar op internet komen.
‫Wauw, er zijn veel afbeeldingen en hun tags.
‫Dus laten we een snelle review doen.
‫Zoals je kunt zien, kun je vrijwel alles op afbeeldingen taggen, maar ze moeten een specifiek
‫formaat hebben om met Docker Hub te werken. Je kunt niet zomaar iets nginx noemen en het
‫dan uploaden omdat het niet gaat werken, tenzij het je account-ID of organisatie-ID vooraan heeft.
‫Toen heb ik het gehad over hoe je eigenlijk veel tags voor dezelfde afbeeldings-ID kunt hebben
‫en alleen omdat je een bestaande afbeelding opnieuw tagt of anders tagt, verandert dat niet echt die afbeeldings-ID.
‫Onthoud dat de nieuwste tag eigenlijk gewoon de standaardtag is.
‫Er is niets bijzonders aan, maar we gaan er wel van uit dat Docker Hub daar min
‫of meer een standaard is, dat mensen de nieuwste tag gebruiken als een manier om de nieuwste stabiele versie
‫van hun afbeelding aan te geven. Ik heb je laten zien hoe je snel in- en uitlogt bij Docker Hub vanuit de CLI. Onthoud dat dat een sessie-ID opslaat in
‫uw lokale configuratie als u zich op een Linux-machine bevindt en u ervoor zorgt dat u uitlogt om die te
‫verwijderen als u zich op een
‫gedeelde Linux-machine of een host bevindt, zoals een server. Dan, slechts een herinnering, als u een privé
‫Docker Hub-image wilt maken, moet u waarschijnlijk eerst de repository maken voordat u deze uploadt.