Dependency between services in Compose file
Hai semuanya, di materi kali ini kita akan membahas tentang Service Dependencies dalam Compose file.
Service Dependency adalah the most-common dalam pengembangan aplikasi, component paling basic atau minimal biasanya kita memerlukan database atau external service. Sebagai contoh misalnya klo kita menjalankan aplikasi tapi tanpa database maka akan terjadi failure.
Pada Compose file, ada depends_on
. Express dependency between services. Service dependencies cause the following behaviors:
docker-compose up
starts services in dependency order. In the following example,db
andmigrate-tool
are started beforeweb
.docker-compose up SERVICE
automatically includesSERVICE’s
dependencies. In the example below,docker-compose up web
also creates and startsdb
andmigrate-tool
.docker-compose stop
stops services in dependency order. In the following example,web
is stopped beforedb
.
version: '3.9' | |
services: | |
web: | |
image: nginx | |
ports: | |
- "80:80" | |
volumes: | |
- ./html:/usr/share/nginx/html | |
depends_on: | |
- postgres | |
- migrate-tools | |
postgres: | |
image: postgres:12.6 | |
ports: | |
- 5432:5432 | |
environment: | |
- POSTGRES_PASSWORD | |
- POSTGRES_USER | |
- POSTGRES_DB | |
volumes: | |
- pg_data:/var/lib/postgresql/data | |
migrate-tools: | |
image: flyway/flyway:latest-alpine | |
environment: | |
- FLYWAY_EDITION | |
command: ["-user=${POSTGRES_USER}", "-password=${POSTGRES_PASSWORD}", "-url=jdbc:postgresql://postgres:5432/${POSTGRES_DB}", "info"] | |
depends_on: | |
- postgres | |
volumes: | |
pg_data: { } |
Dan berikut adalah file .env
:
# database postgresql | |
POSTGRES_PASSWORD=secretPassword | |
POSTGRES_USER=bisnis_app | |
POSTGRES_DB=bisnis_app | |
# flyway migration tools | |
FLYWAY_EDITION=community |
Jika di jalankan maka hasilnya seperti berikut:
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml config
services:
migrate-tools:
command:
- -user=bisnis_app
- -password=secretPassword
- -url=jdbc:postgresql://postgres:5432/bisnis_app
- info
depends_on:
postgres:
condition: service_started
environment:
FLYWAY_EDITION: community
image: flyway/flyway:latest-alpine
postgres:
environment:
POSTGRES_DB: bisnis_app
POSTGRES_PASSWORD: secretPassword
POSTGRES_USER: bisnis_app
image: postgres:12.6
ports:
- published: 5432
target: 5432
volumes:
- pg_data:/var/lib/postgresql/data:rw
web:
depends_on:
migrate-tools:
condition: service_started
postgres:
condition: service_started
image: nginx
ports:
- published: 80
target: 80
volumes:
- C:\Users\dimasm93\Workspaces\youtube\docker\09-docker-compose\dependency\html:/usr/share/nginx/html:rw
version: '3.9'
volumes:
pg_data: {}
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency up -d
Creating network "dependency_default" with the default driver
Creating volume "dependency_pg_data" with default driver
Creating dependency_postgres_1 ... done
Creating dependency_migrate-tools_1 ... done
Creating dependency_web_1 ... done
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
dependency_migrate-tools_1 flyway -user=bisnis_app -p ... Exit 0
dependency_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp,:::5432->5432/tcp
dependency_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcp
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency logs migrate-tools
Attaching to dependency_migrate-tools_1
migrate-tools_1 | Flyway Community Edition 7.14.0 by Redgate
migrate-tools_1 | Database: jdbc:postgresql://postgres:5432/bisnis_app (PostgreSQL 12.6)
migrate-tools_1 | Schema version: << Empty Schema >>
migrate-tools_1 |
migrate-tools_1 | +----------+---------+-------------+------+--------------+-------+
migrate-tools_1 | | Category | Version | Description | Type | Installed On | State |
migrate-tools_1 | +----------+---------+-------------+------+--------------+-------+
migrate-tools_1 | | No migrations found |
migrate-tools_1 | +----------+---------+-------------+------+--------------+-------+
migrate-tools_1 |
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency down
Stopping dependency_web_1 ... done
Stopping dependency_postgres_1 ... done
Removing dependency_web_1 ... done
Removing dependency_migrate-tools_1 ... done
Removing dependency_postgres_1 ... done
Removing network dependency_default
# testing start from service name: migrate-tools
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency up -d migrate-tools
Creating network "dependency_default" with the default driver
Creating dependency_postgres_1 ... done
Creating dependency_migrate-tools_1 ... done
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency down
Stopping dependency_postgres_1 ... done
Removing dependency_migrate-tools_1 ... done
Removing dependency_postgres_1 ... done
Removing network dependency_default
# testing start from service name: web
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency up -d web
Creating network "dependency_default" with the default driver
Creating dependency_postgres_1 ... done
Creating dependency_migrate-tools_1 ... done
Creating dependency_web_1 ... done
➜ docker docker-compose -f .\09-docker-compose\dependency\docker-compose.yaml -p dependency down --volumes
Stopping dependency_web_1 ... done
Stopping dependency_postgres_1 ... done
Removing dependency_web_1 ... done
Removing dependency_migrate-tools_1 ... done
Removing dependency_postgres_1 ... done
Removing network dependency_default
Removing volume dependency_pg_data
There are several things to be aware of when using depends_on
:
depends_on
does not wait for db andmigrate-tools
to be “ready” before startingweb
- only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.- The
depends_on
option is ignored when deploying a stack in swarm mode with a version 3 Compose file.
Yuk simak juga videonya,
Dan jika temen-temen belajar hal baru kali ini jangan lupa buat Like, Subcribe, dan Share ke temen kalian. Terimakasih!!!