This is an old revision of the document!


Laboratorul 02 - Docker Compose

Introducere

În mod clasic, pentru rularea unor containere, este nevoie să rulați comanda aferentă de rulare (docker run) și să dați toți parametrii necesari. Acest proces poate deveni anevoios dacă este repetat pentru pornirea mai multor containere. Un mod de a „salva” configurația de rulare este să ne creăm scripturi. Problema în rularea mai multor scripturi este pierderea uniformității în configurare (ce container la ce rețea se conectează, cu cine comunică, etc.).

Docker Compose este un utilitar creat de către Docker folosit pentru centralizarea configurării de rulare a containerelor în manieră declarativă. Utilizând fișiere de configurare YAML (Yet Another Markup Language), Docker Compose centralizează procesul de configurare într-o manieră naturală, declarativă.

Mai mult decât atât, formatul pentru fișierele Compose este utilizat și în cadrul Docker Swarm, orchestratorul creat de Docker pentru gestiunea serviciilor Docker, despre care vom discuta în laboratorul 3.

Veți observa că, în acest laborator, folosim termenii de servicii și containere în mod interschimbabil. Acest lucru se întâmplă pentru că Docker Swarm lucrează cu servicii, în timp ce Docker Compose cu containere. Ne referim la ambii termeni în același context deoarece configurația este, în proporție de 90%, identică, indiferent de utilizarea Swarm sau Compose.

Instalare

Pentru sisteme Windows și MacOS, Docker Compose face parte din instalarea de Docker Desktop for Windows/Mac. Pentru Linux, instalarea se realizează conform ghidului oficial.

Elemente cheie

Formatul unui fișier YAML

Fișierele YAML sunt folosite de obicei pentru a scrie configurări în mod declarativ. Formatul este unul foarte ușor de înțeles și folosit, astfel:

  • se folosesc elemente de tip „cheie:valoare”
  • aliniatele indentate reprezintă proprietăți copii ale paragrafelor anterioare
  • listele se delimiteaza prin „-”.

Exemplu de fișier Docker Compose

# docker-compose.yml
version: "3.8"
services:
    api:
        build: . # construiește imaginea dintr-un Dockerfile
        image: nume-imagine-registru:versiune # folosește o imagine din registrul curent
        environment:
            NODE_ENV: development
            VARIABILA_DE_MEDIU: valoare
        ports:
            - "5000:80"
        networks:
            - network-laborator-2

    postgres:
        image: postgres:12
        environment:
            PGPASSWORD_FILE: /run/secrets/parola-mea-ultra-secreta
        volumes:
            - volum-laborator-2:/var/lib/postgresql/data
            - ./scripturi-initializare/init-db.sql:/docker-entrypoint-init.d/init-db.sql
        networks:
            - network-laborator-2

volumes:
    volum-laborator-2:

networks:
    network-laborator-2:

secrets:
    parola-mea-ultra-secreta:
        file: './parola-mea-nu-atat-de-secreta.txt'
Version

Descrie ce funcționalități vor fi încărcate la rularea utilitarului Docker Compose.

Este obligatoriu să treceți versiunea în orice fișier Docker Compose.

Services

Descrie serviciile/containerele ce vor rula după ce configurația este pornită de către Compose. Fiecare serviciu reprezintă un container care va avea numele și configurația serviciului. În exemplul de mai sus, containerele se vor numi api și postgres. Cele mai importante proprietăți ale services sunt următoarele:

  • build - specifică director unde se află Dockerfile-ul de la care se va efectua construirea containerului
  • image - specifică numele imaginii folosite pentru rularea containerului
  • ports - o listă de intrări de tipul „port_gazdă:port_serviciu” unde este realizată expunerea și maparea de porturi
  • volumes - o listă de intrări de tipul „volum_gazdă:cale_serviciu” unde sunt precizate mapările de volume; aceleași reguli care se aplică la rularea clasică sunt menținute și aici; „volum_gazdă” poate fi un volum standard sau un bind mount
  • networks - lista de rețele din care face parte serviciul/containerul
  • secrets - lista de secrete ce vor fi folosite în cadrul serviciului/containerului
  • environment - obiect cu intrări de tipul „nume_variabilă_mediu_servici:valoare” care injectează variabilele de mediu specificate la rularea serviciului/containerului.

TODO

idp/laboratoare/02.1615481634.txt.gz · Last modified: 2021/03/11 18:53 by radu.ciobanu
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