Vad är Docker Container? - Behåll din applikation med Docker



Docker Container är en lätt alternativ lösning till Virtual Machine för att skapa, distribuera och köra applikationer i en container.

Jag hoppas att du har läst mina tidigare bloggar på Hamnarbetare där jag har täckt grunderna i Docker. Här, i den här Docker Container-bloggen, kommer jag att diskutera vad som är Docker Containers och hur det fungerar. För det mesta kommer vi att fokusera på praktiska och användningsfall av Docker.

Jag har listat ämnena för denna Docker Container-blogg:





  • Varför behöver vi Docker-behållare?
  • Hur fungerar Docker Containers?
  • Användningsfall för Docker Container

Varför behöver vi Docker-behållare?

Jag kommer fortfarande ihåg det rätt, jag arbetade med ett projekt. I det projektet följde vi mikrotjänstarkitekturen. För dig som inte vet vad som är mikroservice, oroa dig inte, jag ger dig en introduktion till det.

Tanken bakom mikrotjänster är att vissa typer av applikationer blir lättare att bygga och underhålla när de bryts ner i mindre, komponerbara bitar som fungerar tillsammans. Varje komponent utvecklas separat, och applikationen är då helt enkelt summan av dess beståndsdelar.



Tänk på exemplet nedan:

hur man sammanställer ett Java-program

Online Shopping App - Docker Container - Edureka

I ovanstående diagram finns en onlinebutik med separata mikrotjänster för användarkonto, produktkatalog, orderhantering och kundvagnar.



Tja, den här arkitekturen har många fördelar:

  • Även om någon av dina mikrotjänster misslyckas påverkas inte hela din applikation.
  • Det är lättare att hantera

Det finns också många andra fördelar, jag kommer inte att gå in i detalj om mikrotjänster i det här inlägget. Men snart kommer jag med ett par bloggar på mikrotjänster också.

I den här arkitekturen använde vi CentOS Virtual Machines. Dessa virtuella maskiner konfigurerades genom att skriva långa skript. Att konfigurera dessa virtuella datorer var inte det enda problemet.

För att utveckla sådana applikationer krävs att flera mikrotjänster startas i en maskin. Så om du startar fem av dessa tjänster behöver du fem virtuella datorer på den maskinen. Tänk på diagrammet nedan:

Det andra problemet är ganska vanligt, jag vet att många av er kan relatera till det. Applikationen fungerar i en utvecklarens bärbara dator men inte i testning eller produktion. Detta kan bero på att inte ha en konsekvent datormiljö. Tänk på diagrammet nedan:

Det fanns många andra problem förutom detta också, men jag känner att dessa problem räcker för att jag ska kunna förklara behovet av Docker Containers.

Lär dig hur Docker-behållare är bättre än virtuella maskiner

Så tänk om jag ger 8 GB RAM-minne till alla mina virtuella datorer och jag har 5 mikrotjänster som körs på olika virtuella maskiner. I så fall kräver dessa virtuella datorer 40 GB RAM-minne. Nåväl, nu kräver jag att konfigurationerna på min värdmaskin är mycket höga, nästan 44 GB RAM borde finnas där i min värdmaskin. Uppenbarligen är detta inte en hållbar lösning för en sådan arkitektur, för jag slösar bort mycket resurser här.

Bra, jag har mycket resurser att slösa bort, men jag har fortfarande ett problem med inkonsekvens i min livscykel för leverans av programvara (SDLC). Jag måste konfigurera dessa virtuella datorer i test såväl som i prod-miljö. Någonstans i den processen uppdaterades inte någon programvara i testservern, och Dev-teamet använder den uppdaterade versionen av programvaran. Detta leder till konflikter.

Vad händer om jag använder 100 virtuella datorer, då kommer det att ta mycket tid att konfigurera varje virtuell dator, och samtidigt är det också benäget att göra fel.

Låt oss nu förstå vad som är Docker Container och hur det fungerar och hur det löste mitt problem.

Vad är en Docker Container?

Docker är ett verktyg som är utformat för att göra det lättare att skapa, distribuera och köra applikationer med hjälp av behållare.

Du kan skapa Docker Containers, dessa behållare kommer att innehålla alla binärer och bibliotek som krävs för din applikation eller mikroservice i mitt fall. Så din ansökan finns i en container, eller så har du containeriserat din ansökan. Nu kan samma behållare användas i test- och produktionsmiljön.

Docker Containers är en lätt lösning på virtuella maskiner och använder värd-operativsystemet. Det bästa är att du inte behöver tilldela något RAM till Docker Container, det tar det när och när det behövs. Så med Docker Container behöver jag inte oroa mig för slöseri med resurser.

Låt oss förstå nu hur en Docker Container fungerar.

Hur fungerar en Docker Container?

Nedanstående diagram är i princip ett sätt att använda Docker. Och jag antar att du har en idé om Docker Image och Dockerfile.

Killar, jag vet att diagrammet ser lite komplicerat ut, men lita på att det inte är så komplicerat. Nedan följer förklaringen till diagrammet, även efter att du känner att det är svårt att förstå, kan du kommentera ditt tvivel, jag kommer att ta itu med dessa frågor ASAP.

  • En utvecklare skriver först projektkoden i en Docker-fil och bygger sedan en bild från den filen.
  • Den här bilden innehåller hela projektkoden.
  • Nu kan du köra denna Docker-bild för att skapa så många behållare som du vill.
  • Denna Docker-bild kan laddas upp på Docker-navet (det är i grunden ett molnförvar för dina Docker-bilder, du kan hålla det offentligt eller privat).
  • Denna Docker-bild på Docker-navet kan dras av andra lag som QA eller Prod.

Detta förhindrar inte bara slöseri med resurser, utan säkerställer också att den datormiljö som finns där i en utvecklare bärbar dator replikeras också i andra team. Jag känner mig nu, jag behöver inte berätta varför vi behöver Docker.

Det här var ett sätt att använda det, jag antar att ni måste vara nyfiken på hur jag använde Docker för att lösa mitt problem med mikrotjänster. Låt mig ge dig en översikt över samma.

Nedan följer förklaringen till diagrammet:

  • För det första skrev vi de komplexa kraven i en Dockerfile.
  • Sedan pressade vi på GitHub.
  • Därefter använde vi en CI-server (Jenkins).
  • Denna Jenkins-server drar ner den från Git och bygger den exakta miljön. Detta kommer att användas i produktionsservrar liksom i testservrar.
  • Vi distribuerade den till iscenesättning (Det hänvisar till att distribuera din programvara på servrar för teständamål, innan vi distribuerar dem helt i produktion.) Miljöer för testare.
  • I grund och botten rullade vi exakt vad vi hade inom utveckling, testning och iscensättning till produktion.

Det kommer att vara rättvist att säga att Docker gjorde mitt liv enkelt.

Det var berättelsen om mitt företag, låt oss titta på fallstudien från Indiana University. Hur Docker löste sina problem.

Indiana University Fallstudie:

Indiana University är ett offentligt universitetssystem med flera campus i delstaten Indiana, USA.

Problemförklaring

De använde anpassade skript för att distribuera applikationerna i den virtuella datorn.

Deras miljö optimerades för deras äldre Java-baserade applikationer. Deras växande miljö involverar nya produkter som inte enbart är baserade på java. För att ge sina studenter bästa möjliga upplevelse behövde universitetet börja modernisera applikationerna.

Universitetet ville förbättra hur de arkitekterar applikationer genom att flytta till en mikrotjänstbaserad arkitektur för sina applikationer.

Säkerhet behövdes för studentdata som SSN och studenthälsodata.

Lösning:

Alla problem åtgärdades av Docker Data Center (DDC), beakta diagrammet nedan:

Docker Trusted Registry - Den lagrar Docker Images.

UCP (Universal Control Plane) webbgränssnitt - Hjälper till att hantera hela kluster från en enda plats. Tjänster distribueras med UCP-webbgränssnittet med Docker-bilder som lagras i DTR (Docker Trusted Registry).

IT ops-team utnyttjar Universal Control Plane för att tillhandahålla Docker-installerad programvara på värdar och sedan distribuera sina applikationer utan att behöva göra en massa manuella steg för att ställa in all infrastruktur.

UCP och DTR integreras med sin LDAP-server för att snabbt tillhandahålla åtkomst till sina applikationer.

Jag hoppas att ni har läst de tidigare bloggarna för att lära dig grunderna i Docker.

Nu kommer jag att förklara hur vi kan använda Docker Compose för applikationer med flera behållare.

Docker Hands-On:

Jag antar att du har installerat Docker.Jag kommer att använda Docker Compose i det här inlägget, nedan har jag gett en liten introduktion till Docker Compose.

Docker Compose: Det är ett verktyg för att definiera och köra Docker-applikationer för flera containrar. Med Docker Compose kan du använda en Compose-fil för att konfigurera programmets tjänster. Med ett enda kommando kan du sedan skapa och starta alla tjänster från din konfiguration.

Anta att du har flera applikationer i olika behållare och alla dessa behållare är länkade ihop. Så du vill inte köra var och en av dessa containrar en efter en. Men du vill köra dessa containrar med ett enda kommando. Det är där Docker Compose kommer in på bilden. Med den kan du köra flera applikationer i olika behållare med ett enda kommando. dvs. docker-compose up.

Exempel: Tänk dig att du har olika behållare, en som kör en webbapp, en annan som kör en postgres och en annan som kör redis, i en YAML-fil. Det kallas docker compose-fil, därifrån kan du köra dessa behållare med ett enda kommando.

Låt oss ta ytterligare ett exempel:

Antag att du vill publicera en blogg, för det använder du CMS (Content Management System), och wordpress är det mest använda CMS. I grund och botten behöver du en behållare för WordPress och du behöver ytterligare en behållare som MySQL för baksidan, den MySQL-behållaren ska kopplas till wordpress-behållaren. Vi behöver också ytterligare en behållare för Php Myadmin som kommer att länkas till MySQL-databasen, i princip används den för att komma åt MySQL-databasen.

Vad sägs om att jag utför det ovan angivna exemplet praktiskt.

Steg involverade:

  1. Installera Docker Compose :
  2. Installera WordPress: Vi använder tjänstemannen WordPress och MariaDB Docker-bilder.
  3. Installera MariaDB: Det är en av de mest populära databasservrarna i världen. Den är gjord av de ursprungliga utvecklarna av MySQL. MariaDB är utvecklad som programvara med öppen källkod och som en relationsdatabas ger den ett SQL-gränssnitt för åtkomst till data.
  4. Installera PhpMyAdmin: Det är ett gratis mjukvaruverktyg skrivet i PHP, som är avsett att hantera administrationen av MySQL via webben.
  5. Skapa WordPress-webbplatsen:

Låt oss börja!

Installera Docker Compose:

Installera Python Pip först:

sudo apt-get install python-pip

hur man avslutar programmet Java

Nu kan du installera Docker Compose:

sudo pip installera docker-compose

Installera WordPress:

Skapa en wordpress-katalog:

mkdir wordpress

Ange den här wordpress-katalogen:

cd wordpress /

I den här katalogen skapar du en Docker Compose YAML-fil och redigerar den sedan med gedit:

sudo gedit docker-compose.yml

Klistra in nedanstående kodrader i den här yaml-filen:

wordpress: image: wordpress länkar: - wordpress_db: mysql-portar: - 8080: 80 wordpress_db: image: mariadb-miljö: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: corbinu / docker-phpmyadmin länkar: - wordpress_db: mysql-portar: - 8181: 80 MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Jag vet att du vill att jag ska förklara den här koden, så vad jag ska göra tar jag små delar av den här koden och förklarar vad som händer.

wordpress_db: ... miljö: MYSQL_ROOT_PASSWORD: edureka ...

Detta ställer in en miljövariabel inuti wordpress_db-behållaren som heter MYSQL_ROOT_PASSWORD med önskat lösenord. MariaDB Docker-avbildningen är konfigurerad för att söka efter den här miljövariabeln när den startar och tar hand om att ställa in DB: n med ett root-konto med lösenordet definierat som MYSQL_ROOT_PASSWORD.

wordpress: ... portar: - 8080: 80 ...

Det första portnumret är portnumret på värden och det andra portnumret är porten inuti behållaren. Så denna konfiguration vidarebefordrar förfrågningar på port 8080 i värden till standardwebbserverport 80 inuti behållaren.

phpmyadmin: image: corbinu / docker-phpmyadmin länkar: - wordpress_db: mysql portar: - 8181: 80 miljö: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Detta tar docker-phpmyadmin av communitymedlem corbinu, länkar det till vår wordpress_db-behållare med namnet mysql (vilket betyder inifrån phpmyadmin-behållaren referenser till värdnamnet mysql kommer att vidarebefordras till vår wordpress_db-behållare), exponerar port 80 på port 8181 i värdsystemet och ställer slutligen in ett par miljövariabler med vårt MariaDB-användarnamn och lösenord. Den här bilden hämtar inte automatiskt miljövariabeln MYSQL_ROOT_PASSWORD från wordpress_dbcontainerns miljö, så som wordpress-bilden gör. Vi måste faktiskt kopiera MYSQL_ROOT_PASSWORD: edureka-linjen från wordpress_db-behållaren och ställa in användarnamnet till root.

Starta nu applikationsgruppen:

docker-compose up -d

Det är allt du behöver göra. Du kan lägga till så många containrar som du vill på det här sättet och länka dem alla på vilket sätt du vill.

Gå nu till port 8080 i webbläsaren med ditt offentliga IP- eller värdnamn, som visas nedan:

lokal värd: 8080

Fyll i det här formuläret och klicka på Installera WordPress.

När den är klar kan du besöka serverns IP-adress igen (den här gången med port 8181, t.ex. localhost: 8181). Du hälsas av inloggningsskärmen phpMyAdmin:

Fortsätt och logga in med användarnamnets root och lösenord som du ställer in i YAML-filen så kan du bläddra i din databas. Du kommer att märka att servern innehåller en wordpress-databas som innehåller all information från din WordPress-installation.

Här avslutar jag min Docker Container-blogg. Jag hoppas att du har haft det här inlägget. Du kan kolla andra bloggar i serien också, som handlar om grunderna i Docker.

Om du tyckte att den här Docker Container-bloggen var relevant, kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edureka DevOps Certification Training-kursen hjälper eleverna att få expertis inom olika DevOps-processer och verktyg som Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack och GIT för att automatisera flera steg i SDLC.

Har du en fråga till mig? Vänligen nämna det i kommentarfältet så återkommer jag till dig.