This is an old revision of the document!


Sesiuna 7 - Docker Compose

Concepte atinse:

  • Organizarea containerelor folosind Docker Compose
  • Intelegerea formatului YAML
  • Intelegerea continutului unui fisier docker-compose.yml
  • Configurarea unui cluster de containere utilizand docker-compose.yml

Resurse teoretice:

Puteti accesa inregistrarea video si slide-urile teoretice aici

Structura de foldere

Strategie de Deployment

Asa cum am propus in workshopurile trecute, vom avea 3 medii de lucru:

  • local
  • testing
  • production

Deoarece lucram cu microservicii care vor fi deployate utilizand tehnologii Docker (Docker Compose pentru local si Docker Swarm in rest) este util sa pastram configuratia de deployment centralizat, sub forma fisierlor .yml de configurare.

Monorepo

Vom folosi conceptul de monorepo bazat pe soft links (submodule), foarte des intalnit in lucrul cu microserviciile.

Un monorepo pe baza de submodule tine referinta altor repository-uri, fara acces direct asupra lor. Actiunile din interiorul repository-ulor adiacente se realizeaza la nivel invidiual. Un monorepo este util pentru a tine configuratii centralizate legate de deployment si pentru a tine referinta celoralte servicii din cadrul unei aplicatii mai mare.

Pentru a crea un monorepo trebuie sa urmati urmatorii pasi:

  1. creati-va un repository nou
  2. clonati repository-ul local
  3. adaugati, folosind urmatoarea comanda, referinte catre fiecare repository ce contine codul serviciilor voastre:
git submodule add LINK_REPOSITORY

Daca operatia a decurs cu succes, o sa observati un fisier .gitmodules in monorepo

[submodule "library-microservice"]
	path = library-microservice
	url = https://gitlab.com/mobyworkshop/library-microservice.git
[submodule "notification-service"]
	path = notification-service
	url = https://gitlab.com/mobyworkshop/notification-service.git
[submodule "auth-microservice"]
	path = auth-microservice
	url = https://gitlab.com/mobyworkshop/auth-microservice.git
[submodule "mailing-service"]
	path = mailing-service
	url = https://gitlab.com/mobyworkshop/mailing-service.git

Configuratia Deployment

In monorepo, pe langa legatura catre celelalte servicii, vom tine si configuratia clusterului, pentru fiecare mediu. Asadar, va fi nevoie de un folder Deployment care sa aiba, la randul lui, 3 foldere (Local, Testing, Production).

In Local va fi configuratia folosind Docker Compose In Testing si Production va fi configuratia folosind Docker Swarm

Docker Compose

Desi Docker Compose, ca orice alta componenta a Docker, este complexa si va recomandam sa consultati mereu https://docs.docker.com/compose/ documentatia, mai jos aveti un minim de informatii care va pot ajuta sa incepeti sa utilizati Docker Compose:

Exemplu de fisier docker-compose.yml

# docker-compose.yml
version: '3.8'
services:
  web:
    # construieste imaginea dintr-un Dockerfile
    build: .
    context: ./Path (optional)
    dockerfile: Dockerfile (optional)
    ports:
     - "5000:80"
  redis:
    image: postgres

Exemplu de comenzi Docker Compose

# Porneste containerele
docker-compose start
# Opreste containerele
docker-compose stop
# Pune in stare de pauza conainerele unui serviciu. Diferenta fata de stop e ca la procesul din container se trimite SIGPAUSE
docker-compose pause
# Scoate din stare de pauza containerele
docker-compose unpause
# Listeaza containerele active
docker-compose ps
# Face build, recreaza, porneste si ataseaza containere la un serviciu
docker-compose up
# Serviciile ruleaza in background detasat de terminalul care le-a initializat
docker-compose up -d
# Creaza imaginile inainte de pornire unde a fost declarata calea pentru un Dockerfile pentru un container
docker-compose up --build
# Se foloseste fisierul de docker-compose specificat in loc de cel implicit
docker-compose -f my-docker-compose.yml up
# Opreste containerele si le sterge pe acestea impreuna cu retelele, volumele si imagine create la up.
docker-compose down
# Sterge toate containerele oprite (se poate specifica la sfarsit si numele containerului care trebuie sters)
docker-compose rm
# Cu -s se opresc toate containerele si cu -v se sterg si volumele anonime atasate
docker-compose rm -s -v 

Proprietati in cadrul unui fisier docker-compose.yml

### Exemple de build pentru imagini
web:
  # Build de la un Dockerfile in folderul curent
  build: .
  # Build de la un Dockerfile specific din subdirectorul 'dir'
  build:
    context: ./dir
    dockerfile: Dockerfile.dev
  # Pornire de la o image
  image: example-registry:4000/postgresql
 
### Asignare de porturi
 
ports:
  - "3000" # se specifica portul intern expus, portul extern (din sistemul gazda) este fie acesta fie in caz de conflic unul alocat aleator
  - "8000:80"  # port gazda : port container
 
### Comenzi de pornire
# Specificarea comenzii de pornire
command: my_exec arg_1 arg_2
command: [my_exec arg_1 arg_2]
# sau
entrypoint: my_exec arg_1 arg_2
entrypoint: [my_exec arg_1 arg_2]
 
### Variabile de mediu
# Variabilele pot fi declarate direct
environment:
  WORK_ENVIRONMENT: development
environment:
  - WORK_ENVIRONMENT=development
env_file: .env
env_file: [.env, .development.env]
 
### Dependente
# Serviciul respectiv sa fie mapat la un alt hostname (implica depends_on)
links:
  - db:database
  - redis
# se asteapta pornirea acelui container inainte
depends_on:
  - db
 
### Declarere de volume
volumes:
  - ./data:/var/lib/mysql  # Se mapeaza fisierul sau folderul local la ce din container
  - named_volume:/var/lib/mysql
  - 
### Network
 
# Se creaza o noua retea
networks:
  - frontend
 
### External network
 
# Se adauga la o retea externa
networks:
  frontend:
    external: true
    name: external-frontend
moby/backend/07.1597234713.txt.gz · Last modified: 2020/08/12 15:18 by alexandru.hogea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0