‫Deze lezing gaat helemaal over het toevoegen van afbeeldingen aan je Compose-bestanden, zodat het er automatisch
‫voor zorgt dat je een afbeelding klaar
‫hebt staan wanneer je compositie-commando's uitvoert. Net als andere docenten
‫in deze sectie, moet je echt een goed gevoel hebben voor Docker-container- en Docker-afbeeldingsopdrachtregelfunctionaliteit.
‫Een ander ding dat Compose voor u kan doen, is uw afbeeldingen tijdens runtime bouwen. Het zal daadwerkelijk in de cache zoeken
‫naar afbeeldingen, en als het build-opties bevat, zal het die afbeelding bouwen als je het up-commando gebruikt.
‫Het zal niet elke keer het beeld opbouwen.
‫Het zal het alleen bouwen als het het niet vindt.
‫U moet ofwel de docker compose build gebruiken om uw afbeeldingen opnieuw op te bouwen als
‫u ze wijzigt, of u kunt docker compose up --build gebruiken.
‫Dat zullen we zo zien.
‫Dit is echt geweldig als je Compose lokaal gebruikt en je afbeeldingen hebt die je wilt bouwen. Misschien wil je volume mount
‫niet gebruiken. U wilt eigenlijk bestanden in, of zoiets, in de afbeelding kopiëren.
‫Uw build-opdracht kan behoorlijk complex zijn. Het kan enkele aangepaste omgevingsvariabelen of
‫build-argumenten hebben.
‫Trouwens, argumenten opbouwen, daar hebben we het nog niet over gehad. Dat zijn eigenlijk gewoon omgevingsvariabelen die
‫alleen beschikbaar zijn tijdens builds. U kunt de documenten bekijken. havenarbeider. com documentatie over
‫Dockerfiles en het zal diepgaand ingaan op bouwargumenten.
‫Hier gaan we kijken naar een voorbeeld van hoe u dat lokaal zou kunnen gebruiken.
‫Ik ben in de map voor het samenstellen van voorbeeld 3. Je kunt hier zien dat ik hier een vooraf gebouwd Docker
‫Compose-bestand heb.
‫Ik heb eigenlijk een Dockerfile genaamd nginx. Dockerbestand. Dan een vergelijkbare nginx-configuratie als die
‫we eerder hadden, waar we Nginx eigenlijk gebruiken als een omgekeerde proxy voor onze website.
‫Als we ingaan op de Docker Compose, kun je zien hoe ik deze oplossing heb ontworpen.
‫Ik heb eigenlijk twee diensten.
‫Een daarvan is de Nginx-proxy zoals voorheen, en een is de Apache-webserver zoals voorheen.
‫Maar een paar dingen zijn anders.
‫In plaats van dat ik de standaardafbeelding voor Nginx specificeer, bouw ik eigenlijk een aangepaste afbeelding.
‫Je kunt hier zien dat ik het een aantal argumenten heb gegeven waarbij ik zeg dat het
‫Docker-bestand dat het moet gebruiken een speciaal genoemd Docker-bestand is.
‫Ik wil dat het dat Dockerfile bouwt in de huidige map waarin het zich bevindt. Ik wil dat het die afbeelding een naam
‫geeft wanneer het wordt
‫gebouwd, nginx -custom. Het gaat dat opslaan in mijn lokale cache. Daar beneden hebben we een
‫webserver waarop Apache draait.
‫Wat ik hier heb gedaan, is dat ik een aantal HTML-bronbestanden heb gemount die ik heb op de Apache-server.
‫Dus het scenario hier is dat ik misschien een webontwikkelaar
‫ben, ik heb hier een statische website, onder
‫deze HTML-directory waar ik me niet al te veel zorgen over hoef te maken.
‫Het gebruikt gewoon een kleine bootstrap-sjabloon.
‫Ik ga dat lokaal bewerken, in mijn editor hier, maar ik weet dat wanneer ik hiermee naar de
‫productie ga, het achter een Nginx-proxy zal zitten.
‫Dus ik wil die productieomgeving zoveel mogelijk lokaal nabootsen om er zeker van te zijn dat ik alle
‫bugs of problemen heb verwijderd. In dit geval wil
‫ik deze Nginx, en ik weet dat deze Nginx-configuratie degene is die ze op
‫de productieserver gaan gebruiken, dus ik ga die hier gewoon gebruiken.
‫Dit is eigenlijk dezelfde Nginx-configuratie als voorheen.
‫Wanneer ik de opdracht docker componeren uitvoer, wordt eerst gecontroleerd op de naam
‫van deze afbeelding in mijn cache. Als het het niet vindt, zal het deze build-commando's hier gebruiken om het
‫Docker-bestand op te zoeken en vervolgens mijn afbeelding te bouwen. Je kunt aan deze Dockerfile zien dat het eigenlijk vrij eenvoudig is.
‫Het gaat gewoon een specifieke versie van Nginx gebruiken en dan gaat het gewoon een bestand kopiëren.
‫Het haalt de rest van zijn informatie uit die Nginx-configuratie van Docker Hub en
‫kopieert het vervolgens in mijn Nginx-configuratie.
‫Als je je in een eerder voorbeeld herinnert, hebben we eigenlijk een bind-mount gedaan om deze Nginx-configuratie binnen te
‫krijgen via ons samenstellingsbestand.
‫In dit geval willen we gewoon dat het de hele afbeelding opbouwt.
‫We hoeven deze proxyconfiguratie niet echt te wijzigen, dus ik hoef hem niet echt te mounten zodat ik
‫hem altijd kan veranderen.
‫Ik wil gewoon dat het draait. Rechts? Dus ik ga het bouwen. Laat het in de afbeeldingscache zitten. Als het de eerste
‫keer is gebouwd, hoeft het niet vaak opnieuw te worden opgebouwd.
‫Dus ik ga daar maar weg.
‫Als ik mijn website aan het bewerken en ontwikkelen ben, heb ik deze configuratie
‫zodat ik live bewerkingen kan uitvoeren. Als we hier teruggaan en ik een havenarbeider opstellen, laten
‫we doornemen wat er is gebeurd.
‫Het creëerde eerst het netwerk.
‫Dat is een normale zaak. Het doet dat.
‫Dan wordt feitelijk gezien dat de proxy-service niet de afbeelding heeft waarnaar hij op zoek is. Dus dat gaat het
‫bouwen.
‫Dus het haalt het Dockerfile eruit en bouwt het op zoals het een normaal docker-buildcommando zou doen.
‫Dan geeft het me deze handige tip om me te laten weten dat het deze keer de afbeelding heeft gemaakt omdat het het
‫niet kon vinden.
‫Maar als ik in de toekomst die afbeelding moet veranderen, zal ik de commando's docker compose build
‫of docker compose up --build moeten gebruiken. Nu het de afbeelding
‫heeft, kan het de containers daadwerkelijk maken. Dan begint het mijn webserver en mijn proxyserver.
‫Als alles correct werkte, zou ik een localhost moeten kunnen krijgen. Het heeft hier mijn standaardsjabloon opgehaald, wat
‫eigenlijk een bootstrap-sjabloon is.
‫Het lijkt alsof alles werkt.
‫Eigenlijk ga ik hierheen en ik zie al mijn logs verschijnen en er zijn duidelijk veel activa. Er is een logboekinvoer voor
‫elk en het gaat door de proxy en door de webserver.
‫Omdat ik die map heb aangekoppeld om te bewerken, kan ik eigenlijk teruggaan naar mijn editor. Als webontwikkelaar zou ik naar binnen kunnen gaan
‫en misschien iets op de website bewerken. Misschien ga ik in
‫op de start-bootstrap-titel, die deze kleine titel hier bovenaan zou moeten zijn.
‫Ik sla dat bestand gewoon op. Als ik dan ververs, wordt mijn website opnieuw bijgewerkt vanwege die bind-mount.
‫Dit is een goed voorbeeld van een veel voorkomende ontwikkelaarsconfiguratie waarbij u lokaal een aantal aangepaste
‫afbeeldingen moet bouwen.
‫U moet ook enkele bestanden in uw toepassing koppelen, zodat u ze tijdens runtime kunt bewerken.
‫En natuurlijk, als dit een door een database ondersteunde toepassing moest zijn, zou ik hier gewoon
‫een derde service toevoegen voor de databaseserver. Dan ga ik terug en doe mijn opruiming.
‫U zult merken dat het die afbeelding standaard niet daadwerkelijk verwijdert.
‫Je zult hier bovenaan zien dat we de nginx-custom hebben die het heeft gebouwd. Maar er is een opdracht voor het samenstellen van
‫een docker.
‫Als je naar de help kijkt, zie je dat er een rmi-optie is die afbeeldingen verwijdert die het
‫mogelijk heeft gemaakt of gebruikt.
‫Er is een daadwerkelijke optie hier die zegt: 'verwijder alleen afbeeldingen die geen aangepaste tag hebben die is ingesteld door het
‫afbeeldingsveld. ' Eén
‫ding dat ik hier zou kunnen doen als ik dit een beetje meer geautomatiseerd wilde maken, is dat ik dat afbeeldingscommando
‫daar gewoon zou kunnen uitschakelen. Laten we dat maar verwijderen. Dan wil ik heel snel opruimen. Ik
‫ga gewoon mijn afbeelding verwijderen. docker-afbeelding rm aangepast. Zoals je kunt zien, is het daar weg.
‫Oke. Ik wil Docker opnieuw doen.
‫En deze keer doen we een -d.
‫U zult in deze voorbeelden van Compose opmerken dat het containers, volumes en netwerken in feite benoemt
‫met de naam van de map als de projectnaam.
‫Dat is eigenlijk iets in Compose waar, om naamconflicten te voorkomen, het
‫eigenlijk altijd de directorynaam aan het begin van alle activa zal toevoegen, zodat ze niet in conflict komen
‫met andere.
‫U kunt die proxynaam daadwerkelijk wijzigen via de opdrachtregel.
‫Als je gaat, bekijk dan de Compose-documentatie.
‫Maar het punt dat ik hier wilde maken, is dat als ik hier een docker-afbeelding maak, je zult zien dat het mijn afbeelding naar
‫mij heeft genoemd.
‫Dus technisch gezien hoef ik die afbeeldingsoptie niet te gebruiken.
‫Maar als ik er een specifieke naam voor wilde hebben, zodat ik het later misschien zou kunnen identificeren, dan zou ik dat kunnen.
‫De reden dat ik dat naar voren bracht, is dat dit eigenlijk een beetje schoner is, want wat
‫ik dan kan doen, is docker opstellen, en onthoud in de help dat het zei dat ik een rmi-type kon gebruiken. Dus als ik het opruim en ik
‫mijn Docker-omgeving graag schoon houd, kan ik lokaal rmi doen.
‫Wat dat zal doen, is die afbeeldingen ook daadwerkelijk verwijderen.
‫Je ziet hier onderaan dat het de afbeelding heeft verwijderd.
‫Niet iets dat ik de hele tijd doe, maar misschien als ik een groot project heb met veel aangepaste afbeeldingen en ik
‫niet wil dat het mijn systeem opblaast als ik niet aan dat project aan het ontwikkelen ben, zal ik
‫de rmi local gebruiken , en het houdt altijd de aangepaste afbeeldingen bij die het moest maken.
‫Natuurlijk, als ik hier alles gebruik, zal het eigenlijk elke afbeelding verwijderen die in dit project is gebruikt, wat
‫je misschien niet wilt doen, omdat het in dit geval de httpd Apache-webserver zou kunnen verwijderen, en je zou die afbeelding misschien
‫willen een tijdje in de buurt blijven. OKE.
‫In dit gedeelte heb je veel geleerd over Compose.
‫We gaan Compose gedurende de rest van deze cursus gebruiken.
‫We blijven op deze vaardigheden voortbouwen.