En praktisk introduktion til Docker Compose

Docker-containere åbnede en verden af ​​muligheder for tech-samfundet, besværet med at opsætte ny software blev reduceret i modsætning til gamle tider, da et rod skulle sorteres efter et alvorligt format, det reducerede tiden til at opsætte og bruge ny software, som til sidst spillede en stor del for teknikere at lære nye ting, rulle den ud i en container og skrotte den, når den er færdig. Ting blev lette, og det bedste, det er open source, alle og enhver kan bruge det, kommer dog med en lille indlæringskurve.

Ud af de utallige muligheder var muligheden for at implementere komplekse teknologiestakke til vores applikationer, som tidligere ville have været domænet for eksperter. I dag ved hjælp af containere kan softwareingeniører med god forståelse af de underliggende systemer implementere en kompleks stak, og hvorfor ikke det er timens behov, taletallet "Jack of all trades" fik en fin opgradering; ”Mester i nogle” baseret på alderens behov. Kort sagt “T” formede færdigheder.

Muligheden for at definere en kompleks stak i en fil og køre den med en enkelt kommando, temmelig fristende hej. Fyrene hos Docker Inc. vælger at kalde det Docker komponere.

I denne artikel bruger vi Dockers eksempel på afstemningsapp og distribuerer den ved hjælp af Docker compose.

Docker komponere

Med ordene fra Docker Inc.

Compose er et værktøj til at definere og køre Docker-applikationer med flere containere. Med Compose bruger du en YAML-fil til at konfigurere applikationens tjenester. Derefter opretter og starter du alle tjenesterne fra din konfiguration med en enkelt kommando.

Stemmeappen

Vi introducerer den mest foretrukne demonstrationsapp til Docker-samfundet "The Voting App", som om det overhovedet har brug for en introduktion. Dette er en simpel applikation baseret på mikrotjenestearkitektur, der består af 5 enkle tjenester.

  1. Voting-App : Frontend af applikationen skrevet i Python, brugt af brugere til at afgive deres stemmer.
  2. Redis : In-memory database, der bruges som mellemlagring.
  3. Arbejdstager : .Net-tjeneste, bruges til at hente stemmer fra Redis og gemme i Postres database.
  4. DB : PostgreSQL-database, der bruges som database.
  5. Resultat-app : Frontend af applikationen skrevet i Node.js, viser stemmeresultaterne.

Voting repo har en fil, der hedder docker-compose.ymldenne fil, indeholder konfigurationen til oprettelse af containere, eksponering af porte, bindingsvolumener og tilslutning af containere gennem netværk, der kræves for, at stemmeappen fungerer. Lyder som mange ret lange docker runog docker network createkommandoer ellers giver docker compose os mulighed for at sætte alle de ting i en enkelt docker-compose-fil i yaml-format.

version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker depends_on: - "redis" networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:

Git cloneog cdind i stemmeappens repo.

dockersamples / eksempel-stemmeapp

eksempel-stemmeapp - Eksempel på Docker Compose-app github.com

Komponér tid

Med al vores applikation defineret i en enkelt komponentfil kan vi tage et lettelsens suk, slappe af og simpelthen køre applikationen. Skønheden ved at komponere ligger i det faktum, at en enkelt kommando opretter alle tjenester, tilslutter netværkene (bogstaveligt talt), monterer alle diskenheder og udsætter havnene. Det er tid til at byde upkommandoen velkommen , den udfører alle de ovennævnte opgaver. $ Docker-compose up

Efter masser af "Pull complete", hundreder af megabyte og få minutter (måske mere). . .

Voila, vi har stemmeappen i gang.

Kommando docker pslister alle kørende containere

$ docker ps -a --format="table {{.Names}}\t{{.Image}}\t{{.Ports}}" NAMES IMAGE PORTS voting_worker_1 voting_worker db postgres:9.4 5432/tcp voting_vote_1 voting_vote 0.0.0.0:5000->80/tcp voting_result_1 voting_result 0.0.0.0:5858->5858/tcp, 0.0.0.0:5001->80/tcp redis redis:alpine 0.0.0.0:32768->6379/tcp

Ovenstående kommando viser alle kørende containere, respektive billeder og de eksponerede portnumre.

Stemmeappen kan tilgås på // localhost: 5000

Ligeledes kan du få adgang til appen Stemmeresultater på // localhost: 5001

Hver afstemning i afstemningsappen gemmes først i Redis-hukommelsesdatabasen. Net-arbejdstjenesten henter afstemningen og gemmer den i Postgres-DB'en, som er tilgængelig via Node.js-frontend.

Komponere funktioner

Komponer giver fleksibiliteten til at bruge et projektnavn til at isolere miljøerne fra hinanden, projektnavnet er basisnavnet på den mappe, der indeholder projektet. I vores stemmeapp er dette betegnet med navnet på containerne, voting_worker_1hvor votinger katalognavnet. Vi kan indstille et brugerdefineret projektnavn ved hjælp af -pflaget efterfulgt af det brugerdefinerede navn.

Compose bevarer alle volumener, der bruges af de tjenester, der er defineret i compose-filen, så der går ingen data tabt, når containerne gendannes ved hjælp af docker-compose up. En anden sej funktion er, at kun de beholdere, der er ændret, genskabes, containerne, hvis tilstand ikke ændrede sig, forbliver uberørt.

En anden sej funktion er understøttelsen af ​​variabler i komponentfilen, vi kan definere variabler i en .envfil og bruge dem i docker-compose-filen. Her kan POSTGRES_VERSION=9.4dåsen defineres i miljøfilen eller kan defineres i skallen. Det bruges i komponentfilen på følgende måde:

db: image: "postgres:${POSTGRES_VERSION}"

Command Cheat Sheet

Det er let som brise at starte, stoppe og lege med at komponere.

$ docker-compose up -d $ docker-compose down $ docker-compose start $ docker-compose stop $ docker-compose build $ docker-compose logs -f db $ docker-compose scale db=4 $ docker-compose events $ docker-compose exec db bash

Resumé

Docker Compose er et fantastisk værktøj til hurtigt at implementere og skrotte containere. Compose-filen kan køre problemfrit på enhver maskine installeret med docker-compose. Eksperimentering og læringsteknologier er kun en komponentfil væk;).

Jeg håber, at denne artikel hjalp med at forstå Docker Compose. Jeg vil meget gerne høre om, hvordan du bruger Docker Compose i dine projekter. Del viden, hjælp den til at nå ud til flere mennesker.