Hvad er Docker Container? - Containerize din applikation ved hjælp af Docker



Docker Container er en let alternativ løsning til Virtual Machine til at oprette, implementere og køre applikationer inde i en container.

Jeg håber, du har læst mine tidligere blogs på Docker hvor jeg har dækket det grundlæggende i Docker. Her, i denne Docker Container-blog, vil jeg diskutere, hvad der er Docker Containers, og hvordan det fungerer. For det meste vil vi fokusere på hands-on og use-cases af Docker.

Jeg har listet emnerne til denne Docker Container-blog:





  • Hvorfor har vi brug for dockercontainere?
  • Hvordan fungerer Docker Containers?
  • Brugstilfælde af Docker Container

Hvorfor har vi brug for dockercontainere?

Jeg kan stadig huske det korrekt, jeg arbejdede på et projekt. I dette projekt fulgte vi mikroservicearkitekturen. For de af jer, der ikke ved, hvad der er mikroservice, skal du ikke bekymre dig, jeg giver dig en introduktion til det.

Ideen bag mikroservices er, at visse typer applikationer bliver lettere at bygge og vedligeholde, når de opdeles i mindre, komponerbare stykker, der arbejder sammen. Hver komponent udvikles separat, og applikationen er derefter simpelthen summen af ​​dens bestanddele.



Overvej eksemplet nedenfor:

Online shopping app - Docker Container - Edureka

I ovenstående diagram er der en onlinebutik med separate mikrotjenester til brugerkonto, produktkatalog, ordrebehandling og indkøbsvogne.



Nå, denne arkitektur har mange fordele:

  • Selvom en af ​​dine mikroservice mislykkes, er hele din applikation stort set upåvirket.
  • Det er lettere at styre

Der er også mange andre fordele, jeg vil ikke gå i detaljer om mikrotjenester i dette indlæg. Men snart kommer jeg også med et par blogs om mikrotjenester.

I denne arkitektur brugte vi CentOS Virtual Machines. Disse virtuelle maskiner blev konfigureret ved at skrive lange scripts. Det var ikke det eneste problem at konfigurere disse virtuelle maskiner.

Udvikling af sådanne applikationer kræver start af flere mikrotjenester i en maskine. Så hvis du starter fem af disse tjenester, har du brug for fem virtuelle computere på den maskine. Overvej nedenstående diagram:

Det andet problem er ret almindeligt, jeg ved, at mange af jer kan forholde sig til det. Applikationen fungerer i en udviklers bærbare computer, men ikke i test eller produktion. Dette kan skyldes, at man ikke holder et ensartet computermiljø. Overvej nedenstående diagram:

Der var også mange andre problemer bortset fra dette, men jeg føler, disse problemer er nok for mig til at forklare dig behovet for Docker Containers.

Lær hvordan dockercontainere er bedre end virtuelle maskiner

Så forestil dig, om jeg giver 8 GB RAM til alle mine virtuelle computere, og jeg har 5 mikrotjenester, der kører på forskellige virtuelle maskiner. I så fald vil disse virtuelle computere kræve 40 GB RAM. Nå, nu kræver jeg, at konfigurationen af ​​min værtsmaskine er meget høj, næsten 44 GB RAM skal være der i min værtsmaskine. Dette er åbenbart ikke en bæredygtig løsning til en sådan arkitektur, fordi jeg spilder mange ressourcer her.

Fint, jeg har mange ressourcer at spilde, men jeg har stadig et problem med inkonsekvens i min softwareleveringscyklus (SDLC). Jeg er nødt til at konfigurere disse VM'er i test såvel som i prod-miljø. Et eller andet sted i denne proces blev noget software ikke opdateret på testserveren, og Dev-teamet bruger den opdaterede version af softwaren. Dette fører til konflikter.

Hvad hvis jeg bruger 100 VM'er, så vil det tage meget tid at konfigurere hver VM, og det er samtidig også tilbøjeligt til fejl.

stak og bunke i java

Lad os nu forstå, hvad der er Docker Container, og hvordan det fungerer, og hvordan det løste mit problem.

Hvad er en Docker Container?

Docker er et værktøj designet til at gøre det lettere at oprette, implementere og køre applikationer ved hjælp af containere.

Du kan oprette Docker-containere, disse containere vil indeholde alle de binære filer og biblioteker, der kræves til din applikation eller mikroservice i mit tilfælde. Så din ansøgning er til stede i en container, eller du har containeriseret din ansøgning. Nu kan den samme container bruges i test- og produktionsmiljøet.

Docker Containers er en letvægtsløsning til virtuelle maskiner, og den bruger værts-OS. Den bedste del er, at du ikke behøver at forhåndsallocere noget RAM til Docker Container, det tager det efter behov. Så med Docker Container behøver jeg ikke bekymre mig om spild af ressourcer.

Lad os forstå nu, hvordan en Docker Container fungerer.

Hvordan fungerer en Docker Container?

Nedenstående diagram er dybest set en måde at bruge Docker på. Og jeg antager, at du har en idé om Docker Image og Dockerfile.

Gutter, jeg ved, at diagrammet ser lidt komplekst ud, men stol på mig, det er ikke så kompliceret. Nedenfor er forklaringen på diagrammet, selv efter at du føler, at det er svært at forstå, kan du kommentere din tvivl, jeg vil behandle disse spørgsmål ASAP.

  • En udvikler skriver først projektkoden i en Docker-fil og bygger derefter et billede fra den fil.
  • Dette billede indeholder hele projektkoden.
  • Nu kan du køre dette Docker-billede for at oprette så mange containere, som du vil.
  • Dette Docker-billede kan uploades på Docker-hub (det er dybest set et skyopbevaringssted til dine Docker-billeder, du kan holde det offentligt eller privat).
  • Dette Docker-billede på Docker-hubben kan trækkes af andre hold som QA eller Prod.

Dette forhindrer ikke kun spild af ressourcer, men sørger også for, at computermiljøet, der er der i en udviklers bærbare computer, også replikeres i andre teams. Jeg føler nu, jeg behøver ikke fortælle dig, hvorfor vi har brug for Docker.

Dette var en måde at bruge det på, jeg gætter på, at jer skal være nysgerrige efter at vide, hvordan jeg brugte Docker til at løse mit problem med mikrotjenester. Lad mig give dig et overblik over det samme.

hvad er datavidenskab?

Nedenfor er forklaringen på diagrammet:

  • For det første skrev vi de komplekse krav i en Dockerfile.
  • Derefter skubbede vi det på GitHub.
  • Derefter brugte vi en CI-server (Jenkins).
  • Denne Jenkins-server trækker den ned fra Git og bygger det nøjagtige miljø. Dette vil blive brugt i produktionsservere såvel som i testservere.
  • Vi distribuerede det til iscenesættelse (det henviser til implementering af din software på servere til testformål, inden de implementeres fuldt ud i produktion.) Miljøer til testere.
  • Dybest set rullede vi nøjagtigt det, vi havde inden for udvikling, test og iscenesættelse til produktion.

Det vil faktisk være rimeligt at sige det, Docker gjorde mit liv let.

Nå, det var historien om mit firma, lad os se på casestudiet fra Indiana University. Hvordan Docker løste deres problemer.

Indiana University Case-Study:

Indiana University er et offentligt universitetssystem med flere campus i staten Indiana, USA.

Problemformulering

De brugte brugerdefinerede scripts til at implementere applikationerne i VM.

Deres miljø blev optimeret til deres ældre Java-baserede applikationer. Deres voksende miljø involverer nye produkter, der ikke kun er java-baserede. For at give deres studerende den bedst mulige oplevelse, måtte universitetet begynde at modernisere applikationerne.

Universitetet ønskede at forbedre den måde, de arkitekterer applikationer på, ved at flytte til en mikrotjenestebaseret arkitektur til deres applikationer.

Der var behov for sikkerhed for studerendes data, såsom SSN'er og studenters sundhedsdata.

Løsning:

Alle problemer blev løst af Docker Data Center (DDC), se nedenstående diagram:

Docker Trusted Registry - Det gemmer Docker Images.

UCP (Universal Control Plane) Web UI - Hjælper med at styre hele klyngen fra et enkelt sted. Tjenesterne distribueres ved hjælp af UCP-webgrænsefladen ved hjælp af Docker-billeder, der er gemt i DTR (Docker Trusted Registry).

IT ops teams udnytter Universal Control Plane til at levere Docker installeret software på værter og derefter implementere deres applikationer uden at skulle udføre en masse manuelle trin for at opsætte al deres infrastruktur.

UCP og DTR integreres med deres LDAP-server for hurtigt at give adgang til deres applikationer.

Jeg håber, I har læst de tidligere blogs for at lære det grundlæggende i Docker.

Nu vil jeg forklare dig, hvordan vi kan bruge Docker Compose til applikation til flere containere.

Docker Hands-On:

Jeg antager, at du har installeret Docker.Jeg bruger Docker Compose i dette indlæg, nedenfor har jeg givet en lille introduktion til Docker Compose.

Docker komponere: Det er et værktøj til at definere og køre Docker-applikationer med flere containere. Med Docker Compose kan du bruge en Compose-fil til at konfigurere applikationens tjenester. Derefter kan du ved hjælp af en enkelt kommando oprette og starte alle tjenester fra din konfiguration.

Antag at du har flere applikationer i forskellige containere, og alle disse containere er knyttet sammen. Så du vil ikke udføre hver af disse containere en efter en. Men du vil køre disse containere med en enkelt kommando. Det er her, Docker Compose kommer ind på billedet. Med det kan du køre flere applikationer i forskellige containere med en enkelt kommando. dvs. docker-komponere op.

Eksempel: Forestil dig, at du har forskellige containere, en der kører en webapp, en anden kører en postgres og en anden kører redis i en YAML-fil. Det kaldes docker compose-fil, derfra kan du køre disse containere med en enkelt kommando.

Lad os tage endnu et eksempel:

Antag at du vil udgive en blog, for at du vil bruge CMS (Content Management System), og wordpress er det mest anvendte CMS. Dybest set har du brug for en container til WordPress, og du har brug for en container til som MySQL til back-end, at MySQL-containeren skal være knyttet til wordpress-containeren. Vi har også brug for endnu en container til Php Myadmin, der vil være linket til MySQL-databasen, grundlæggende bruges den til at få adgang til MySQL-databasen.

Hvad med at jeg udfører ovennævnte eksempel praktisk.

Involverede trin:

  1. Installer Docker Compose :
  2. Installer WordPress: Vi bruger tjenestemanden WordPress og MariaDB Docker-billeder.
  3. Installer MariaDB: Det er en af ​​de mest populære databaseservere i verden. Det er lavet af de oprindelige udviklere af MySQL. MariaDB er udviklet som open source-software og som en relationsdatabase giver den en SQL-grænseflade til adgang til data.
  4. Installer PhpMyAdmin: Det er et gratis softwareværktøj skrevet i PHP, der er beregnet til at håndtere administrationen af ​​MySQL via internettet.
  5. Opret WordPress-webstedet:

Lad os komme igang!

Installer Docker Compose:

Installer Python Pip først:

sudo apt-get install python-pip

Nu kan du installere Docker Compose:

sudo pip installer docker-compose

Installer WordPress:

Opret en wordpress-mappe:

mkdir wordpress

Indtast denne wordpress-mappe:

cd wordpress /

Opret en Docker Compose YAML-fil i denne mappe, og rediger den derefter ved hjælp af gedit:

sudo gedit docker-compose.yml

Indsæt nedenstående kodelinjer i den yaml-fil:

wordpress: image: wordpress links: - wordpress_db: mysql porte: - 8080: 80 wordpress_db: image: mariadb miljø: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql porte: - 8181: 80 MYSQL_USERNAME: rod MYSQL_ROOT_PASSWORD: edureka

Jeg ved, du vil have mig til at forklare denne kode, så hvad jeg vil gøre, jeg tager små sektioner af denne kode og forklarer dig, hvad der sker.

wordpress_db: ... miljø: MYSQL_ROOT_PASSWORD: edureka ...

Dette indstiller en miljøvariabel inde i wordpress_db-containeren kaldet MYSQL_ROOT_PASSWORD med din ønskede adgangskode. MariaDB Docker-billedet er konfigureret til at kontrollere denne miljøvariabel, når det starter, og det tager sig af opsætningen af ​​DB med en rodkonto med adgangskoden defineret som MYSQL_ROOT_PASSWORD.

wordpress: ... porte: - 8080: 80 ...

Det første portnummer er portnummeret på værten, og det andet portnummer er porten inde i containeren. Så denne konfiguration videresender anmodninger på port 8080 af værten til standard webserverport 80 inde i containeren.

phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql porte: - 8181: 80 miljø: MYSQL_USERNAME: rod MYSQL_ROOT_PASSWORD: edureka

Dette griber docker-phpmyadmin af community-medlem corbinu, linker det til vores wordpress_db container med navnet mysql (hvilket betyder indefra phpmyadmin container referencer til værtsnavnet mysql vil blive videresendt til vores wordpress_db container), udsætter sin port 80 i port 8181 i værtssystem, og til sidst indstiller et par miljøvariabler med vores MariaDB brugernavn og adgangskode. Dette billede henter ikke automatisk miljøvariablen MYSQL_ROOT_PASSWORD fra wordpress_dbcontainers miljø, sådan som wordpress-billedet gør. Vi er faktisk nødt til at kopiere MYSQL_ROOT_PASSWORD: edureka-linjen fra wordpress_db-containeren og indstille brugernavnet til root.

Start nu ansøgningsgruppen:

docker-komponere op -d

Det er alt hvad du skal gøre. Du kan tilføje så mange containere, som du vil, på denne måde og linke dem alle sammen på den måde, du vil.

begrænsninger i sql med eksempel

Gå nu til port 8080 i browseren ved hjælp af din offentlige IP eller værtsnavn, som vist nedenfor:

lokal vært: 8080

Udfyld denne formular og klik på installer WordPress.

Når den er færdig, skal du besøge din servers IP-adresse igen (denne gang ved hjælp af port 8181, f.eks. Localhost: 8181). Du bliver mødt af phpMyAdmin-loginskærmen:

Gå videre og log ind med brugernavnsrod og adgangskode, du har angivet i YAML-filen, og du kan gennemse din database. Du vil bemærke, at serveren indeholder en wordpress-database, der indeholder alle data fra din WordPress-installation.

Her slutter jeg min Docker Container-blog. Jeg håber, du har nydt dette indlæg. Du kan tjekke andre blogs også i serien, der beskæftiger sig med det grundlæggende i Docker.

Hvis du fandt denne Docker Container-blog relevant, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edureka DevOps-certificeringstræningskurset hjælper eleverne med at få ekspertise i forskellige DevOps-processer og -værktøjer som Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack og GIT til automatisering af flere trin i SDLC.

Har du et spørgsmål til mig? Nævn det i kommentarfeltet, og jeg vender tilbage til dig.