Een praktische inleiding tot Docker Compose

Docker-containers openden een wereld van mogelijkheden voor de technische gemeenschap, gedoe bij het opzetten van nieuwe software werd verminderd in tegenstelling tot vroeger toen een puinhoop moest worden gesorteerd door een zwaar formaat, het verkortte de tijd om nieuwe software op te zetten en te gebruiken die uiteindelijk een een groot deel voor techneuten om nieuwe dingen te leren, het uit te rollen in een container en het weg te gooien als het klaar is. Het werd gemakkelijk, en het beste dat het open source is dat iedereen het kan gebruiken, komt met een kleine leercurve.

Een van de talloze mogelijkheden was de mogelijkheid om complexe technologiestacks te implementeren voor onze applicaties, die voorheen het domein van experts zouden zijn geweest. Met de hulp van containers die software-ingenieurs met een goed begrip van de onderliggende systemen een complexe stack kunnen implementeren en waarom niet het uur nodig is, kreeg de stijlfiguur "Manusje van alles" een mooie upgrade; "Meester van sommigen" gebaseerd op de behoeften van de leeftijd. Simpel gezegd "T" -vormige vaardigheden.

De mogelijkheid om een ​​complexe stapel in een bestand te definiëren en het uit te voeren met een enkele opdracht, behoorlijk verleidelijk he. De jongens van Docker Inc. kozen ervoor om het Docker compose te noemen.

In dit artikel zullen we Docker's voorbeeld-app voor stemmen gebruiken en deze implementeren met behulp van Docker-compose.

Docker Compose

In de woorden van Docker Inc.

Compose is een tool voor het definiëren en uitvoeren van Docker-applicaties met meerdere containers. Met Compose gebruikt u een YAML-bestand om de services van uw applicatie te configureren. Vervolgens maakt en start u met een enkele opdracht alle services vanuit uw configuratie.

De stemapp

Introductie van de meest favoriete demonstratie-app voor de Docker-community "The Voting App", alsof het überhaupt een introductie nodig heeft. Dit is een eenvoudige applicatie op basis van microservices-architectuur, bestaande uit 5 eenvoudige services.

  1. Stem-app : Frontend van de applicatie geschreven in Python, gebruikt door gebruikers om hun stem uit te brengen.
  2. Redis : In-memory database, gebruikt als tussenopslag.
  3. Werker : .Net-service, gebruikt om stemmen op te halen uit Redis en op te slaan in de Postres-database.
  4. DB : PostgreSQL-database, gebruikt als database.
  5. Resultaat-app : Frontend van de applicatie geschreven in Node.js, geeft de stemresultaten weer.

De stemopslagplaats heeft een bestand met de naam docker-compose.ymldit bestand bevat de configuratie voor het maken van de containers, het vrijgeven van poorten, het binden van volumes en het verbinden van containers via netwerken die nodig zijn om de stem-app te laten werken. Klinkt als een heleboel vrij lang docker runen docker network createcommando's anders, havenarbeider Compose stelt ons in staat om al die dingen in één havenarbeider-compose bestand in YAML formaat te zetten.

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 cloneen cdnaar de opslagplaats van de stemapp.

dockersamples / voorbeeld-stemmen-app

example-voting-app - Voorbeeld Docker Compose-app github.com

Componeer tijd

Met al onze applicaties gedefinieerd in een enkel opstelbestand, kunnen we opgelucht ademhalen, chillen en gewoon de applicatie starten. Het mooie van compose ligt in het feit dat een enkele opdracht alle services maakt, de netwerken (letterlijk) bedraadt, alle volumes koppelt en de poorten blootlegt. Het is tijd om het upcommando te verwelkomen , het voert alle bovengenoemde taken uit. $ Docker-compose up

Na veel "Pull complete", honderden megabytes en een paar minuten (misschien meer). . .

Voila, we hebben de stem-app in gebruik.

Command docker psgeeft een overzicht van alle actieve containers

$ 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

De bovenstaande opdracht toont alle actieve containers, respectieve afbeeldingen en de blootgestelde poortnummers.

De stemapp is toegankelijk via // localhost: 5000

Evenzo is de app voor stemresultaten toegankelijk via // localhost: 5001

Elke stem die in de Voting-app wordt uitgebracht, wordt eerst opgeslagen in de Redis-in-memory-database, de .Net-werkerservice haalt de stem op en slaat deze op in de Postgres DB, die toegankelijk is via de Node.js-frontend.

Componeer functies

Compose biedt de flexibiliteit om een ​​projectnaam te gebruiken om de omgevingen van elkaar te isoleren. De projectnaam is de basisnaam van de directory die het project bevat. In onze stem-app wordt dit aangeduid met de naam van de containers voting_worker_1waar votingde basisnaam van de directory is. We kunnen een aangepaste projectnaam instellen met behulp van de -pvlag gevolgd door de aangepaste naam.

Compose bewaart alle volumes die worden gebruikt door de services die zijn gedefinieerd in het compose-bestand, zodat er geen gegevens verloren gaan wanneer de containers opnieuw worden gemaakt met docker-compose up. Een ander cool kenmerk is dat alleen de containers die zijn veranderd, opnieuw worden gemaakt, de containers waarvan de staat niet is veranderd, blijven onaangeroerd.

Een andere leuke functie is de ondersteuning voor variabelen in het compose-bestand, we kunnen variabelen in een .envbestand definiëren en deze gebruiken in het docker-compose-bestand. Hier POSTGRES_VERSION=9.4kan de kan worden gedefinieerd in het omgevingsbestand of kan worden gedefinieerd in de shell. Het wordt op de volgende manier in het opstelbestand gebruikt:

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

Commando Cheat Sheet

Het is gemakkelijk om te starten, te stoppen en te spelen met componeren.

$ 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

Overzicht

Docker Compose is een geweldige tool om snel containers te implementeren en te schrappen, het compose-bestand kan naadloos worden uitgevoerd op elke machine die is geïnstalleerd met docker-compose. Experimenteer- en leertechnologieën zijn slechts een Compose-bestand verwijderd;).

Ik hoop dat dit artikel heeft geholpen bij het begrijpen van Docker Compose. Ik hoor graag hoe u Docker Compose in uw projecten gebruikt. Deel de kennis, help het om meer mensen te bereiken.