Wat is Docker Container? - Containeriseer uw applicatie met Docker



Docker Container is een lichtgewicht alternatieve oplossing voor Virtual Machine om applicaties in een container te maken, te implementeren en uit te voeren.

Nou, ik hoop dat je mijn vorige blogs hebt gelezen Docker waar ik de basis van Docker heb behandeld. Hier, in dit Docker Container-blog, zal ik het hebben over wat Docker Containers zijn en hoe het werkt. Meestal zullen we ons concentreren op hands-on en use-cases van Docker.

Ik heb de onderwerpen voor deze Docker Container-blog op een rijtje gezet:





  • Waarom hebben we Docker-containers nodig?
  • Hoe Docker Containers werken?
  • Use-cases van Docker Container

Waarom hebben we Docker-containers nodig?

Ik herinner het me nog goed, ik was bezig met een project. In dat project volgden we de microservice-architectuur. Voor degenen onder u die niet weten wat microservice is, maakt u zich geen zorgen, ik zal u er een inleiding over geven.

Het idee achter microservices is dat bepaalde soorten applicaties gemakkelijker te bouwen en te onderhouden worden wanneer ze worden opgesplitst in kleinere, samen te stellen stukken die samenwerken. Elke component wordt afzonderlijk ontwikkeld en de applicatie is dan simpelweg de som van de samenstellende componenten.



Beschouw het onderstaande voorbeeld:

App voor online winkelen - Docker Container - Edureka

In het bovenstaande diagram is er een online winkel met aparte microservices voor gebruikersaccount, productcatalogus, orderverwerking en winkelwagentjes.



Welnu, deze architectuur heeft veel voordelen:

  • Zelfs als een van uw microservices uitvalt, blijft uw hele applicatie grotendeels onaangetast.
  • Het is gemakkelijker te beheren

Er zijn ook veel andere voordelen, ik zal in dit bericht niet veel in detail treden over microservices. Maar binnenkort kom ik ook met een paar blogs over microservices.

In deze architectuur gebruikten we CentOS Virtual Machines. Die virtuele machines zijn geconfigureerd door lange scripts te schrijven. Nou, het configureren van die VM's was niet het enige probleem.

Het ontwikkelen van dergelijke applicaties vereist het starten van verschillende microservices op één machine. Dus als u vijf van die services start, heeft u vijf VM's op die machine nodig. Beschouw het onderstaande diagram:

Het andere probleem komt vrij vaak voor, ik weet dat velen van u zich ermee kunnen identificeren. De applicatie werkt op de laptop van een ontwikkelaar, maar niet tijdens testen of productie. Dit kan komen doordat er geen consistente computeromgeving is. Beschouw het onderstaande diagram:

Afgezien hiervan waren er nog veel meer problemen, maar ik denk dat deze problemen voor mij voldoende zijn om u de behoefte van Docker Containers uit te leggen.

Ontdek hoe Docker-containers beter zijn dan virtuele machines

stapel en hoop in java

Stel je voor dat ik 8 GB RAM geef aan al mijn VM's, en ik heb 5 microservices die op verschillende virtuele machines draaien. In dat geval hebben deze VM's 40 GB RAM nodig. Welnu, nu moet ik dat de configuraties van mijn hostcomputer erg hoog zijn, er zou bijna 44 GB RAM in mijn hostmachine moeten zijn. Dit is natuurlijk geen duurzame oplossing voor zo'n architectuur, want ik verspil hier veel middelen.

Goed, ik heb veel middelen te verspillen, maar toch heb ik een probleem van inconsistentie in mijn levenscyclus van softwarelevering (SDLC). Ik moet deze VM's zowel in test- als in productomgeving configureren. Ergens in dat proces is sommige software niet bijgewerkt op de testserver en gebruikt het Dev-team de bijgewerkte versie van de software. Dit leidt tot conflicten.

Wat als ik 100 VM's gebruik, dan zal het configureren van elke VM veel tijd in beslag nemen en tegelijkertijd ook foutgevoelig zijn.

Laten we nu eens begrijpen wat Docker Container is en hoe het werkt, en hoe het mijn probleem heeft opgelost.

Wat is een Docker-container?

Docker is een tool die is ontworpen om het maken, implementeren en uitvoeren van applicaties gemakkelijker te maken met behulp van containers.

U kunt Docker-containers maken, deze containers bevatten in mijn geval alle binaire bestanden en bibliotheken die nodig zijn voor uw toepassing of microservice. Dus uw applicatie staat in een container, of u heeft uw applicatie gecontaineriseerd. Nu kan diezelfde container worden gebruikt in de Test- en Prod-omgeving.

Docker-containers zijn een lichtgewicht oplossing voor virtuele machines en gebruiken het host-besturingssysteem. Het beste is dat u geen RAM vooraf aan de Docker-container hoeft toe te wijzen, het zal het gebruiken wanneer dat nodig is. Met Docker Container hoef ik me dus geen zorgen te maken over verspilling van middelen.

Laten we nu eens kijken hoe een Docker-container werkt.

Hoe werkt een Docker-container?

Het onderstaande diagram is in feite een manier om Docker te gebruiken. En ik neem aan dat je een idee hebt over Docker Image en Dockerfile.

Jongens, ik weet dat het diagram er een beetje ingewikkeld uitziet, maar geloof me, het is niet zo ingewikkeld. Hieronder vindt u de uitleg van het diagram, zelfs nadat u vindt dat het moeilijk te begrijpen is, kunt u uw twijfel becommentariëren, ik zal die vragen zo snel mogelijk behandelen.

  • Een ontwikkelaar schrijft eerst de projectcode in een Docker-bestand en bouwt vervolgens een afbeelding van dat bestand.
  • Deze afbeelding bevat de volledige projectcode.
  • Nu kunt u deze Docker-afbeelding uitvoeren om zoveel containers te maken als u wilt.
  • Deze Docker-afbeelding kan worden geüpload naar de Docker-hub (het is in feite een cloudrepository voor uw Docker-afbeeldingen, u kunt deze openbaar of privé houden).
  • Deze Docker-afbeelding op de Docker-hub kan worden getrokken door andere teams, zoals QA of Prod.

Dit voorkomt niet alleen de verspilling van bronnen, maar zorgt er ook voor dat de computeromgeving die aanwezig is op de laptop van een ontwikkelaar, ook wordt gerepliceerd in andere teams. Ik voel nu dat ik je niet hoef te vertellen waarom we Docker nodig hebben.

Dit was een manier om het te gebruiken, ik neem aan dat jullie nieuwsgierig moeten zijn om te weten hoe ik Docker heb gebruikt om mijn probleem van microservices op te lossen. Ik zal u hiervan een overzicht geven.

Hieronder staat de uitleg van het diagram:

  • Ten eerste schreven we de complexe vereisten binnen een Dockerfile.
  • Vervolgens hebben we het op GitHub gepusht.
  • Daarna hebben we een CI-server (Jenkins) gebruikt.
  • Deze Jenkins-server haalt het uit Git en bouwt de exacte omgeving. Dit wordt zowel in productieservers als in testservers gebruikt.
  • We hebben het geïmplementeerd voor enscenering (het verwijst naar het implementeren van uw software op servers voor testdoeleinden, voordat ze volledig in productie worden geïmplementeerd.) Omgevingen voor testers.
  • Kortom, we hebben precies wat we hadden in ontwikkeling, testen en enscenering in productie gebracht.

Het is eerlijk om te zeggen dat Docker mijn leven gemakkelijk heeft gemaakt.

Dat was het verhaal van mijn bedrijf, laten we eens kijken naar de casestudy van de Indiana University. Hoe Docker hun problemen oploste.

Casestudy Indiana University:

Indiana University is een openbaar universitair systeem met meerdere campussen in de staat Indiana, Verenigde Staten.

Probleemstelling

Ze gebruikten aangepaste scripts om de applicaties in de VM te implementeren.

Hun omgeving is geoptimaliseerd voor hun legacy op Java gebaseerde applicaties. Hun groeiende omgeving omvat nieuwe producten die niet alleen op Java zijn gebaseerd. Om hun studenten de best mogelijke ervaring te bieden, moest de universiteit beginnen met het moderniseren van de applicaties.

De universiteit wilde de manier waarop ze applicaties ontwerpen, verbeteren door over te gaan op een op microservices gebaseerde architectuur voor hun applicaties.

Er was beveiliging nodig voor de gegevens van studenten, zoals SSN's en gezondheidsgegevens van studenten.

Oplossing:

Alle problemen zijn aangepakt door Docker Data Center (DDC), bekijk het onderstaande diagram:

Docker Trusted Registry - Het slaat de Docker-afbeeldingen op.

UCP (Universal Control Plane) webinterface - Helpt bij het beheren van het hele cluster vanaf één plek. Services worden geïmplementeerd met behulp van de UCP-webinterface, met behulp van Docker-images die zijn opgeslagen in DTR (Docker Trusted Registry).

IT-teams gebruiken Universal Control Plane om door Docker geïnstalleerde software op hosts te leveren en vervolgens hun applicaties te implementeren zonder een heleboel handmatige stappen te hoeven doen om al hun infrastructuur op te zetten.

UCP en DTR kunnen worden geïntegreerd met hun LDAP-server om snel toegang tot hun applicaties te bieden.

Ik hoop dat jullie de vorige blogs hebben gelezen om de basisprincipes van Docker te leren.

Nu zal ik u uitleggen hoe we Docker Compose kunnen gebruiken voor toepassingen met meerdere containers.

Docker Hands-On:

Ik neem aan dat je Docker hebt geïnstalleerd.Ik zal Docker Compose in dit bericht gebruiken, hieronder heb ik een korte inleiding gegeven tot Docker Compose.

Docker opstellen: Het is een tool voor het definiëren en uitvoeren van Docker-applicaties met meerdere containers. Met Docker Compose kunt u een Compose-bestand gebruiken om de services van uw applicatie te configureren. Vervolgens kunt u met een enkele opdracht alle services vanuit uw configuratie maken en starten.

Stel, je hebt meerdere applicaties in verschillende containers en al die containers zijn aan elkaar gekoppeld. U wilt dus niet elk van die containers één voor één uitvoeren. Maar u wilt die containers uitvoeren met een enkele opdracht. Dat is waar Docker Compose in beeld komt. Hiermee kunt u met één opdracht meerdere applicaties in verschillende containers uitvoeren. d.w.z. docker-compose-up.

Voorbeeld: stel je voor dat je verschillende containers hebt, een met een webapp, een andere met een postgres en een andere met redis, in een YAML-bestand. Dat heet docker compose-bestand, van daaruit kunt u deze containers met een enkele opdracht uitvoeren.

overbelasting versus overschrijven van c ++

Laten we nog een voorbeeld nemen:

Stel dat u een blog wilt publiceren, daarvoor gebruikt u CMS (Content Management System) en is WordPress het meest gebruikte CMS. Kortom, je hebt één container nodig voor WordPress en je hebt nog een container nodig als MySQL voor back-end, die MySQL-container moet worden gekoppeld aan de wordpress-container. We hebben ook nog een container nodig voor Php Myadmin die zal worden gekoppeld aan de MySQL-database, die in feite wordt gebruikt om toegang te krijgen tot de MySQL-database.

Hoe zit het met het uitvoeren van het bovenstaande voorbeeld praktisch.

Betrokken stappen:

  1. Installeer Docker Compose :
  2. Installeer WordPress: We gebruiken de officiële WordPress en MariaDB Docker-afbeeldingen.
  3. MariaDB installeren: Het is een van de meest populaire databaseservers ter wereld. Het is gemaakt door de oorspronkelijke ontwikkelaars van MySQL. MariaDB is ontwikkeld als open source software en biedt als relationele database een SQL-interface voor toegang tot gegevens.
  4. Installeer PhpMyAdmin: Het is een gratis softwaretool geschreven in PHP, bedoeld om het beheer van MySQL via het web af te handelen.
  5. Maak de WordPress-site:

Laten we beginnen!

Installeer Docker Compose:

Installeer eerst Python Pip:

sudo apt-get install python-pip

hoe je double converteren naar int in java

Nu kunt u Docker Compose installeren:

sudo pip install docker-compose

WordPress installeren:

Maak een wordpress-map:

mkdir wordpress

Voer deze WordPress-directory in:

cd wordpress /

Maak in deze map een Docker Compose YAML-bestand en bewerk het met gedit:

sudo gedit docker-compose.yml

Plak de onderstaande regels code in dat yaml-bestand:

wordpress: afbeelding: wordpress koppelingen: - wordpress_db: mysql poorten: - 8080: 80 wordpress_db: afbeelding: mariadb omgeving: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: afbeelding: corbinu / docker-phpmyadmin koppelingen: - wordpress_db: mysql poorten: - 8181: 80 MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Ik weet dat je wilt dat ik deze code uitleg, dus wat ik zal doen, ik zal kleine delen van deze code nemen en je uitleggen wat er gebeurt.

wordpress_db: ... omgeving: MYSQL_ROOT_PASSWORD: edureka ...

Dit zal een omgevingsvariabele instellen in de wordpress_db container genaamd MYSQL_ROOT_PASSWORD met je gewenste wachtwoord. De MariaDB Docker-afbeelding is geconfigureerd om te controleren op deze omgevingsvariabele wanneer deze wordt opgestart en zorgt voor het opzetten van de DB met een root-account met het wachtwoord gedefinieerd als MYSQL_ROOT_PASSWORD.

wordpress: ... poorten: - 8080: 80 ...

Het eerste poortnummer is het poortnummer op de host en het tweede poortnummer is de poort in de container. Deze configuratie stuurt dus verzoeken op poort 8080 van de host door naar de standaardwebserverpoort 80 in de container.

phpmyadmin: afbeelding: corbinu / docker-phpmyadmin links: - wordpress_db: mysql poorten: - 8181: 80 omgeving: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Dit pakt docker-phpmyadmin door corbinu-lid van de community, koppelt het aan onze wordpress_db-container met de naam mysql (wat betekent dat vanuit de phpmyadmin-container verwijzingen naar de hostnaam mysql worden doorgestuurd naar onze wordpress_db-container), stelt zijn poort 80 op poort 8181 van de hostsysteem en stelt tenslotte een aantal omgevingsvariabelen in met onze MariaDB-gebruikersnaam en wachtwoord. Deze afbeelding haalt niet automatisch de MYSQL_ROOT_PASSWORD omgevingsvariabele uit de wordpress_dbcontainer's omgeving, zoals de wordpress afbeelding dat doet. We moeten eigenlijk de MYSQL_ROOT_PASSWORD: edureka-regel uit de wordpress_db-container kopiëren en de gebruikersnaam op root zetten.

Start nu de applicatiegroep:

docker-compose up -d

Dat is alles wat u hoeft te doen. U kunt op deze manier zoveel containers toevoegen als u wilt, en ze allemaal op elke gewenste manier koppelen.

Ga nu in de browser naar poort 8080 met uw openbare IP- of hostnaam, zoals hieronder weergegeven:

localhost: 8080

Vul dit formulier in en klik op WordPress installeren.

Als het klaar is, gaat u opnieuw naar het IP-adres van uw server (dit keer via poort 8181, bijvoorbeeld localhost: 8181). U wordt begroet door het inlogscherm van phpMyAdmin:

Ga je gang en log in met de gebruikersnaam root en het wachtwoord dat je in het YAML-bestand hebt ingesteld, en je kunt door je database bladeren. U zult zien dat de server een wordpress-database bevat, die alle gegevens van uw WordPress-installatie bevat.

Hier beëindig ik mijn Docker Container-blog. Ik hoop dat je van dit bericht genoten hebt. Je kunt controleren andere blogs ook in de serie, die de basisprincipes van Docker behandelen.

Als je deze Docker Container-blog relevant vond, bekijk dan het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka DevOps Certification Training-cursus helpt leerlingen expertise op te doen in verschillende DevOps-processen en tools zoals Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack en GIT voor het automatiseren van meerdere stappen in SDLC.

Heeft u een vraag voor mij? Vermeld het in het opmerkingengedeelte en ik neem contact met u op.