This is an old revision of the document!
Docker Compose este un creat de catre Docker, folosit pentru centralizarea configurarii de rulare a containerelor in maniera declarativa.
In mod clasic, pentru rularea unor containere, este nevoie sa rulati comanda aferenta de rulare (docker run) si sa dati toti parametri necesari. Acest proces poate deveni anevoios daca este repetat pentru pornirea mai multor containere.
Un mod primitiv de a “salva” configuratia de rulare este sa va creati scripturi. Problema in rularea mai multor scripturi este pierderea consistentei in configurare (Ce container la ce retea se conecteaza, cu cine comunica, etc…).
Utilizand fisiere de configurare .yml, Docker Compose centralizeaza procesul de configurare intr-o maniera naturala, declarativa.
Mai mult de atat, formatul pentru fisiere compose este utilizat si in cadrul Docker Swarm, orchestratorul creat de Docker pentru gestiunea serviciilor Docker. Despre Swarm vom discuta la laboratorul urmator.
Fisierele YAML (Yet Another Markup Language), de obicei, sunt folosite pentru a scrie configurari declarativ. Formatul este unul foarte usor de inteles si folosit:
# docker-compose.yml version: '3.8' services: api: build: . # construieste imaginea dintr-un Dockerfile image: nume-imagine-registru:versiune # foloseste o imagine de pe registrul curent environment: NODE_ENV: development VARIABILA_DE_MEDIU: valoare ports: - "5000:80" networks: - network-laborator-3 postgres: image: postgres:12 environment: PGPASSWORD_FILE: /run/secrets/parola-mea-ultra-secreta volumes: - volum-laborator-3:/var/lib/postgresql/data - ./scripturi-initializare/init-db.sql:/docker-entrypoint-init.d/init-db.sql networks: - network-laborator-3 volumes: volum-laborator-3: networks: network-laborator-3: secrets: parola-mea-ultra-secreta: file: './parola-mea-nu-atat-de-secreta.txt'
Version descrie ce set de functionalitati va fi incarcat la rularea utilitarului Docker Compose
Services descrie serviciile/containerele ce vor rula dupa ce configuratia este pornita de catre compose. Fiecare serviciu reprezinta un container care va avea numele si configuratia serviciului. In exemplul de mai sus, containerele se vor numi api si postgres.
Volumes descrie NAMED VOLUMES utilizate in cadrul configuratiei.
Volumele se trec sub forma de obiecte. Daca nu se doreste schimbarea configuratiei default, valoarea este un camp gol. In laboratorul urmator vom lucra cu volume NFS, unde va trebui oferita o configuratie custom.
Networks descrie retelele utilizate in cadrul configuratiei.
Retelele se trec sub forma de obiecte. Daca nu se doreste schimbarea configuratiei default, valoarea este un camp gol. Un exemplu de configuratie de retea este atunci cand se foloseste o retea care deja exista, de exemplu:
networks: reteaua-mea-care-de-fapt-exista: external: true name: reteaua-originala-care-deja-exista
In cazul de mai sus, reteaua-mea-care-de-fapt-exista este doar o “redenumire” a unei retele deja existente.
Secrets descrie secretele utilizate in cadrul configuratiei.
Secretele retin informatii sensibile intr-o maniera securizata, criptata, in cadrul Swarm, despre care vom vorbi la laboratorul urmator. In compose nu sunt securizate, insa au fost introduse pentru a usura tranzitia catre Swarm.
In cadrul compose, secretele pot proveni doar din fisiere externe. Fisierele externe sunt mentionate pentru fiecare secret in parte.