O introducere practică la Docker Compose

Containerele Docker au deschis o lume de posibilități pentru comunitatea tehnologică, problemele legate de configurarea unui nou software au scăzut, spre deosebire de vremurile vechi, când o mizerie trebuia sortată după un format grav, a redus timpul de configurare și utilizare a unui nou software, care în cele din urmă a jucat un o parte importantă pentru tehnicieni să învețe lucruri noi, să o desfășoare într-un container și să o arunce la final. Lucrurile au devenit ușoare, iar cel mai bun lucru pe care îl poate folosi oricine și toată lumea, vine cu o mică curbă de învățare.

Din nenumăratele posibilități a fost posibilitatea de a implementa stive tehnologice complexe pentru aplicațiile noastre, care anterior ar fi fost domeniul experților. Astăzi, cu ajutorul inginerilor de software pentru containere, cu o înțelegere solidă a sistemelor care stau la baza lor, pot implementa o stivă complexă și de ce nu este nevoia orei, figura de vorbire „Jack of all trades” a primit un upgrade elegant; „Stăpânul unora” pe baza nevoilor epocii. Pur și simplu puneți abilități în formă de „T”.

Posibilitatea de a defini o stivă complexă într-un fișier și de a o rula cu o singură comandă, destul de tentant huh. Băieții de la Docker Inc. aleg să o numească Docker compose.

În acest articol, vom folosi exemplul Docker Voting App și îl vom implementa folosind Docker compose.

Docker Compose

În cuvintele Docker Inc.

Compune este un instrument pentru definirea și rularea aplicațiilor Docker cu mai multe containere. Cu Compose, utilizați un fișier YAML pentru a configura serviciile aplicației dvs. Apoi, cu o singură comandă, creați și porniți toate serviciile din configurația dvs.

Aplicația de vot

Vă prezentăm cea mai preferată aplicație demonstrativă pentru comunitatea Docker „The Voting App”, de parcă ar avea nevoie de o introducere. Aceasta este o aplicație simplă bazată pe arhitectura micro-servicii, formată din 5 servicii simple.

  1. Voting-App : Frontend-ul aplicației scrise în Python, utilizat de utilizatori pentru a-și exprima votul.
  2. Redis : bază de date în memorie, utilizată ca stocare intermediară.
  3. Lucrător : serviciu .Net, folosit pentru a prelua voturi de la Redis și pentru a le stoca în baza de date Postres.
  4. DB : baza de date PostgreSQL, utilizată ca bază de date.
  5. Rezultat-aplicație : Frontend-ul aplicației scrise în Node.js, afișează rezultatele votului.

Depozitul Voting are un fișier numit docker-compose.ymlacest fișier conține configurația pentru crearea containerelor, expunerea porturilor, legarea volumelor și conectarea containerelor prin rețelele necesare pentru ca aplicația de vot să funcționeze. Sună ca o mulțime de comenzi destul de lungi docker runși docker network createaltfel, docker compose ne permite să punem toate acele lucruri într-un singur fișier docker-compose în format yaml.

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 cloneși cdîn repo-ul aplicației de votare.

dockersamples / example-vote-app

example-vote-app - Exemplu de aplicație Docker Compose github.com

Compuneți timpul

Cu toate aplicațiile noastre definite într-un singur fișier de compunere, putem oferi ușurință, răcire și pur și simplu rulați aplicația. Frumusețea compunerii constă în faptul că o singură comandă creează toate serviciile, conectează rețelele (literalmente), montează toate volumele și expune porturile. Este timpul să accepte upcomanda, îndeplinește toate sarcinile menționate mai sus. $ Docker-compose up

După o mulțime de „Extragere completă”, sute de megaocteți și câteva minute (poate mai multe). . .

Voila, avem aplicația de vot activată.

Comanda docker pslistează toate containerele care rulează

$ 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

Comanda de mai sus afișează toate containerele care rulează, imaginile respective și numerele de port expuse.

Aplicația Voting poate fi accesată pe // localhost: 5000

De asemenea, aplicația pentru rezultatele votului poate fi accesată pe // localhost: 5001

Fiecare vot exprimat în aplicația Voting este stocat mai întâi în baza de date Redis in-memory, serviciul de lucrător .Net preluează votul și îl stochează în baza de date Postgres accesată de frontendul Node.js.

Caracteristici de compunere

Compunerea oferă flexibilitatea de a utiliza un nume de proiect pentru a izola mediile unul de celălalt, numele proiectului este numele de bază al directorului care conține proiectul. În aplicația noastră de vot, aceasta este semnificată de numele containerelor voting_worker_1unde votingeste numele de bază al directorului. Putem seta un nume de proiect personalizat folosind -psteagul urmat de numele personalizat.

Compunerea păstrează toate volumele utilizate de serviciile definite în fișierul de compunere, astfel nu se pierd date atunci când containerele sunt recreate folosind docker-compose up. O altă caracteristică interesantă este că doar containerele care s-au schimbat sunt recreate, containerele a căror stare nu s-a modificat rămân neatinse.

O altă caracteristică interesantă este suportul pentru variabilele din fișierul compune, putem defini variabile într-un .envfișier și le putem folosi în fișierul docker-compune. Aici POSTGRES_VERSION=9.4poate fi definit în fișierul de mediu sau poate fi definit în shell. Este utilizat în fișierul compune în modul următor:

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

Foaie de trișare comandă

Este ușor ca briza să începi, să te oprești și să te joci cu compunerea.

$ 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

rezumat

Docker Compose este un instrument excelent pentru implementarea rapidă și resturile containerelor, fișierul compose poate rula perfect pe orice mașină instalată cu docker-compose. Experimentarea și tehnologiile de învățare sunt la doar un fișier Compose;).

Sper că acest articol a ajutat la înțelegerea Docker Compose. Mi-ar plăcea să aud despre cum folosești Docker Compose în proiectele tale. Împărtășiți cunoștințele, ajutați-le să ajungă la mai mulți oameni.