Site Loader

Docker compose možete posmatrati kao set instrukcija koji će dati vašem imidžuu neki dodatni set funkcionalnosti a koji ne mogu da se definišu unutar Dockerfajla. Uz njega možete izbeći sve one komplikacije gde morate u dugaćkim kobasicama navoditi šta želite da vaš kontejner ima otvoreno od portova, koje mount pointe da koristi, kako da mu bude ime definisano.

Neki od vas su sigurno bar jednom otkuali docker-compose up , možda baš u laradocku, i naveli šta sve žele da se startuje od usluga. E ovde ću pokušati da vam prikažem kroz objašnjenje jednog nasumičnog yaml fajla sa interneta, šta sve docker-compose može.

Podizanje wordpressa


Version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

NAPOMENA: Kod yaml kodiranja, jako su bitni indenti. Ako tu omašite za jedan razmak, yaml fajl neće raditi.

Komentar je isti kao u većini programskih jezika, počinje sa znakom # . Sada ću kopirati kod od iznad, i iskomentarisati vam u kodu i inline šta znači šta.


Version: '3.3' #Verzija zavisi od toga koji docker engine koristite. Može se desiti da sintaksa koju koristite ne bude podržana na starijim enginima.  

services: #Ovde navodimo koje servise želimo da podignemo i definišemo imena
   db: #Definišemo ime servisa koji će gurati bazu podataka
     image: mysql:5.7 #Ovde navodimo od kog imidža sa docker huba se ovaj kontejner/servis spawnuje
     volumes: #ovde definišemo persistentnu memoriju kontejnera. 
       - db_data:/var/lib/mysql # lokalni_dir:/lokacija/u/kontejneru
     restart: always # U slučaju da nešto krene naopako pokrećemo ga opet
     environment: #Definišemo globalne promenljive ovog kontejnera
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress: #Ime jednog od servisa, obratite pažnju da je u istom indentu kao i db gore
     depends_on: #Ovde možemo da kažemo ovom kontejneru da čeka dok se ne podigne neki kontejner
       - db  #U stvari čekamo bazu, ili php ima da kaže da ne vidi bazu, i srušiće se kontejner
     image: wordpress:latest #Opet navodimo koji image želimo da podginemo
     ports: #Definišemo koje portove želimo da prosledimo lokalnoj mašini sa dockera
       - "8000:80"
     restart: always #Isti uslov kao i za bazu
     environment: 
       WORDPRESS_DB_HOST: db:3306 #Obratite pažnju, ovde gađamo ime servisa:kroz port u docker networku
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {} #Ovde mountujemo db_data iz meni nepoznatog razloga u okviru wordpressa :)

Ovaj fajl sačuvajte kao docker-compose.yml i napravie direktoriju db_data. Nakon što ispalite dokcer-compose up. DIžu se se DVA kontejnera/servisa. Kontejner koji se zove db i kontejner koji se zoba wordpress. I oni komuniciraju bezbedno kroz docker mrežu. Ali to je već priča za sebe. O tome drugi put.

Ako budete imali pitanja, postavite ih u komentaru na fejsbuk stranici. A ja ću dopisati odgovore u okviru ovog članka.

Ludi Sitemaš

Sarkastičan, skoro pismen Sistem Administrator koji svoje radno vreme provodi kao DevOps.