Skip to content

narumir/compose

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

compose

์šด์˜ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ๋กœ์ปฌ ์ธํ”„๋ผ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ Docker Compose ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๋…๋ฆฝ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ณต์šฉ Docker ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์Šคํƒ

๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑ ์šฉ๋„
postgres/ PostgreSQL Primary/Replica + ํ™•์žฅ ๊ด€๊ณ„ํ˜• DB, ๋ณต์ œ ํ…Œ์ŠคํŠธ
redis/ Redis 3๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ์บ์‹œ/์„ธ์…˜, ํด๋Ÿฌ์Šคํ„ฐ ํ…Œ์ŠคํŠธ
kafka/ Kafka KRaft 3๋ธŒ๋กœ์ปค + Kafka UI ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ
otel/ OTel Collector + OpenSearch + Data Prepper + Prometheus + Alertmanager + Pyroscope ๊ด€์ธก์„ฑ(Trace/Log/Metric/Profile)

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

  • Docker Engine / Docker Compose v2
  • OpenSearch ์‹คํ–‰์„ ์œ„ํ•œ ์ปค๋„ ์„ค์ •
sudo sysctl -w vm.max_map_count=262144

๋น ๋ฅธ ์‹œ์ž‘

1) ๊ณต์šฉ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ (์ตœ์ดˆ 1ํšŒ)

docker network create <shared_network_name>

๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์€ ๊ฐ compose ํŒŒ์ผ์—์„œ ํ™•์ธ/๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2) .env ํŒŒ์ผ ์ƒ์„ฑ

.env๋Š” git์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ .env.example์„ ๋ณต์‚ฌํ•ด .env๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.

cp postgres/.env.example postgres/.env
cp redis/.env.example redis/.env
cp kafka/.env.example kafka/.env
cp otel/.env.example otel/.env

3) ์Šคํƒ ๊ธฐ๋™

cd postgres && docker compose up -d
cd ../redis && docker compose up -d
cd ../kafka && docker compose up -d
cd ../otel && docker compose up -d

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ…œํ”Œ๋ฆฟ

์•„๋ž˜ ์˜ˆ์‹œ๋Š” ํ˜•ํƒœ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฐ’์€ ํŒ€ ์ •์ฑ…์— ๋งž๊ฒŒ ์ž…๋ ฅํ•˜์„ธ์š”.

postgres/.env

POSTGRES_USER=<postgres_user>
POSTGRES_PASSWORD=<postgres_password>
POSTGRES_DB=<postgres_database>
REPLICATION_USER=<replication_user>
REPLICATION_PASSWORD=<replication_password>

redis/.env

REDIS_PASSWORD=<redis_password>

kafka/.env

CLUSTER_ID=<kafka_kraft_cluster_id>
KAFKA_CLUSTERS_0_NAME=<kafka_ui_cluster_display_name>
KAFKA_CLIENT_USERNAME=<kafka_client_username>
KAFKA_CLIENT_PASSWORD=<kafka_client_password>

otel/.env

OPENSEARCH_PASSWORD=<opensearch_admin_password>
OTEL_CLUSTER_NAME=<opensearch_cluster_name>
OPENSEARCH_DASHBOARDS_USERNAME=<dashboards_system_username>
OPENSEARCH_DASHBOARDS_PASSWORD=<dashboards_system_password>
POSTGRES_USER=<postgres_user>
POSTGRES_PASSWORD=<postgres_password>
POSTGRES_DB=<postgres_database>
REDIS_PASSWORD=<redis_password>

postgres

PostgreSQL Primary/Replica ๊ตฌ์„ฑ์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ณต์ œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค/ํฌํŠธ

์ปจํ…Œ์ด๋„ˆ ํ˜ธ์ŠคํŠธ ํฌํŠธ ๋น„๊ณ 
postgres-primary <postgres_primary_port> ์ฝ๊ธฐ/์“ฐ๊ธฐ
postgres-replica <postgres_replica_port> ์ฝ๊ธฐ ์ „์šฉ

์ฃผ์š” ํŠน์ง•

  • env_file๋กœ ์ž๊ฒฉ์ •๋ณด ์ฃผ์ž…
  • replica-entrypoint.sh์—์„œ pg_basebackup ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ ๋™๊ธฐํ™”
  • init/00-replication.sh๋กœ replication user/slot ์ƒ์„ฑ
  • init/01-extensions.sql๋กœ ํ™•์žฅ ์ž๋™ ์„ค์น˜

ํฌํ•จ ํ™•์žฅ

  • pg_trgm
  • postgis, postgis_topology
  • pgaudit
  • pg_stat_statements
  • vector

์ ‘์† URI ํ˜•ํƒœ

  • Primary: postgresql://<user>:<password>@<host>:<port>/<database>
  • Replica: postgresql://<user>:<password>@<host>:<port>/<database>

redis

Redis 3๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค/ํฌํŠธ

์ปจํ…Œ์ด๋„ˆ ํ˜ธ์ŠคํŠธ ํฌํŠธ ๋น„๊ณ 
redis-node-1 <redis_node1_port> ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ
redis-node-2 <redis_node2_port> ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ
redis-node-3 <redis_node3_port> ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ
redis-cluster-init - 1ํšŒ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ

์ฃผ์š” ํŠน์ง•

  • ์ธ์ฆ์€ --requirepass, --masterauth๋กœ .env์—์„œ ์ฃผ์ž…
  • redis.conf๋Š” ์„ฑ๋Šฅ/์˜์†์„ฑ/ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ์ค‘์‹ฌ
  • redis-cluster-init๊ฐ€ ์ƒํƒœ ํ™•์ธ ํ›„ ํ•„์š” ์‹œ์—๋งŒ --cluster create ์‹คํ–‰

์ ‘์† URI ํ˜•ํƒœ

  • ๋‹จ์ผ ๋…ธ๋“œ: redis://:<password>@<host>:<port>
  • ํด๋Ÿฌ์Šคํ„ฐ ํด๋ผ์ด์–ธํŠธ: redis://:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>

kafka

Kafka KRaft 3๋ธŒ๋กœ์ปค ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค (ZooKeeper ์—†์Œ).

Listener ๊ตฌ์กฐ

๋ฆฌ์Šค๋„ˆ ์šฉ๋„ ๋ณด์•ˆ
PLAINTEXT ๋ธŒ๋กœ์ปค ๋‚ด๋ถ€ ํ†ต์‹  PLAINTEXT
CONTROLLER KRaft ์ปจํŠธ๋กค๋Ÿฌ ํ†ต์‹  PLAINTEXT
EXTERNAL ํ˜ธ์ŠคํŠธ/์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ ์ ‘์† SASL_PLAINTEXT + PLAIN

์„œ๋น„์Šค/ํฌํŠธ

์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€ ์ ‘์† ์ฃผ์†Œ ํ˜•ํƒœ
kafka-1 <host>:<kafka_broker1_external_port>
kafka-2 <host>:<kafka_broker2_external_port>
kafka-3 <host>:<kafka_broker3_external_port>
kafka-ui http://<host>:<kafka_ui_port>

ํด๋ผ์ด์–ธํŠธ ์„ค์ • ํ˜•ํƒœ

bootstrap.servers=<host>:<port>,<host>:<port>,<host>:<port>
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="<username>" password="<password>";

CLUSTER_ID๋Š” KRaft ๋‚ด๋ถ€ ์‹๋ณ„์ž์ด๊ณ , KAFKA_CLUSTERS_0_NAME์€ Kafka UI ํ‘œ์‹œ๋ช…์ž…๋‹ˆ๋‹ค.


otel

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OTLP๋กœ๋งŒ ์ „์†กํ•˜๊ณ , Collector๊ฐ€ ์‹ ํ˜ธ๋ณ„ ์ €์žฅ์†Œ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

Application (OTLP gRPC/HTTP)
  -> OTel Collector
     -> Traces   -> Data Prepper -> OpenSearch
     -> Logs     -> OpenSearch
     -> Metrics  -> Prometheus
     -> Profiles -> Pyroscope

AWS ๋Œ€์‘ ๊ฐœ๋…

๋กœ์ปฌ ๊ตฌ์„ฑ AWS ๋Œ€์‘ ์„œ๋น„์Šค
OpenSearch Amazon OpenSearch Service
OpenSearch Dashboards OpenSearch Dashboards
Data Prepper Amazon OpenSearch Ingestion
Prometheus Amazon Managed Prometheus
OTel Collector ADOT
Pyroscope Pyroscope (self-managed)

์„œ๋น„์Šค ๋ชฉ๋ก

์„œ๋น„์Šค ์ด๋ฏธ์ง€ ํฌํŠธ
opensearch opensearch-nori:<version> <opensearch_http_port>, <opensearch_transport_port>
opensearch-dashboards opensearchproject/opensearch-dashboards:<version> <dashboards_port>
otel-collector otel/opentelemetry-collector-contrib:<version> <otlp_grpc_port>, <otlp_http_port>, <collector_metrics_port>
data-prepper opensearchproject/data-prepper:<version> <data_prepper_otel_trace_port>, <data_prepper_health_port>
prometheus prom/prometheus:<version> <prometheus_port>
alertmanager prom/alertmanager:<version> <alertmanager_port>
pyroscope grafana/pyroscope:<version> <pyroscope_port>
postgres-exporter prometheuscommunity/postgres-exporter:<version> <postgres_exporter_port>
redis-exporter oliver006/redis_exporter:<version> <redis_exporter_port>

์„ค์ • ํŒŒ์ผ

ํŒŒ์ผ ์„ค๋ช…
otel/docker-compose.yaml OTel ์Šคํƒ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
otel/Dockerfile OpenSearch ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
otel/otel-collector.yaml Collector ํŒŒ์ดํ”„๋ผ์ธ (์ˆ˜์ง‘/์ฒ˜๋ฆฌ/๋‚ด๋ณด๋‚ด๊ธฐ)
otel/data-prepper-pipelines.yaml Trace ํŒŒ์ดํ”„๋ผ์ธ ์ •์˜
otel/data-prepper-config.yaml Data Prepper ๋Ÿฐํƒ€์ž„ ์„ค์ •
otel/data-prepper-entrypoint.sh Data Prepper ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜ ์น˜ํ™˜
otel/opensearch_dashboards.yml Dashboards ์„ค์ •
otel/prometheus.yml Prometheus scrape/alert ์„ค์ •
otel/alertmanager.yml Alertmanager ๋ผ์šฐํŒ… ์„ค์ •
otel/rules/alerts.yml ์•Œ๋ฆผ ๊ทœ์น™

์„œ๋น„์Šค ์—”๋“œํฌ์ธํŠธ ํ˜•ํƒœ

์„œ๋น„์Šค URI ํ˜•ํƒœ
OpenSearch Dashboards http://<host>:<dashboards_port>
OpenSearch http://<host>:<opensearch_port>
Prometheus http://<host>:<prometheus_port>
Alertmanager http://<host>:<alertmanager_port>
Pyroscope http://<host>:<pyroscope_port>
OTel Collector gRPC <host>:<otlp_grpc_port>
OTel Collector HTTP http://<host>:<otlp_http_port>
OTel Collector Metrics http://<host>:<collector_metrics_port>

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ OTel ์„ค์ • ํ˜•ํƒœ

export OTEL_EXPORTER_OTLP_ENDPOINT=<otlp_endpoint_uri>
export OTEL_EXPORTER_OTLP_PROTOCOL=<grpc_or_http/protobuf>
export OTEL_RESOURCE_ATTRIBUTES="service.name=<service_name>,deployment.environment=<environment>"

์ดˆ๊ธฐ ์„ค์ • ์ ˆ์ฐจ (์ค‘์š”, ์ˆœ์„œ ๊ถŒ์žฅ)

  1. otel ์Šคํƒ ๊ธฐ๋™ ํ›„ OpenSearch health ํ™•์ธ
  2. ์„œ๋น„์Šค๋งต ์ธ๋ฑ์Šค ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ
  4. Dashboards Workspace/Data Source/Dataset ์—ฐ๊ฒฐ

์„œ๋น„์Šค๋งต ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ ์˜ˆ์‹œ (ํ˜•ํƒœ)

curl -s -u '<opensearch_admin_user>:<opensearch_admin_password>' \
  -X PUT 'http://<host>:<opensearch_port>/_index_template/otel-v2-apm-service-map-template' \
  -H 'Content-Type: application/json' \
  -d '{
  "index_patterns": ["otel-v2-apm-service-map*"],
  "priority": <priority_number>,
  "template": {
    "mappings": {
      "properties": {
        "sourceNode": { "properties": { "type": { "type": "keyword" }, "keyAttributes": { "properties": { "name": { "type": "keyword" }, "environment": { "type": "keyword" } } }, "groupByAttributes": { "type": "object" } } },
        "targetNode": { "properties": { "type": { "type": "keyword" }, "keyAttributes": { "properties": { "name": { "type": "keyword" }, "environment": { "type": "keyword" } } }, "groupByAttributes": { "type": "object" } } },
        "sourceOperation": { "properties": { "name": { "type": "keyword" }, "attributes": { "type": "object" } } },
        "targetOperation": { "properties": { "name": { "type": "keyword" }, "attributes": { "type": "object" } } },
        "nodeConnectionHash": { "type": "keyword" },
        "operationConnectionHash": { "type": "keyword" },
        "timestamp": { "type": "date" }
      }
    }
  }
}'

๋‹จ์ผ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ํ…œํ”Œ๋ฆฟ์ด ์—†์œผ๋ฉด ์„œ๋น„์Šค๋งต์—์„œ targetNode ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dashboards ์„ค์ • ์ ˆ์ฐจ

  1. http://<host>:<dashboards_port> ์ ‘์† ํ›„ ๋กœ๊ทธ์ธ
  2. Workspace ์ƒ์„ฑ
  3. Dashboards Management์—์„œ Data Source ์ƒ์„ฑ
  4. Workspace์— Data Source ์—ฐ๊ฒฐ
  5. Discover์—์„œ Logs/Traces Dataset ์ƒ์„ฑ

Data Source ๋“ฑ๋ก ์‹œ ๊ฐ’ ํ˜•ํƒœ:

  • Title: <data_source_name>
  • Endpoint URL: http://<opensearch_container_name>:<opensearch_http_port>
  • Authentication: Username/Password

Traces Dataset ์ƒ์„ฑ ์‹œ:

  • Index: <traces_index_pattern>
  • Time field: startTime (์ผ๋ถ€ ํ™˜๊ฒฝ์—์„œ @timestamp ์ด์Šˆ ํšŒํ”ผ)

Logs Dataset ์ƒ์„ฑ ์‹œ:

  • Index: <logs_index_pattern>
  • Time field: @timestamp ๋˜๋Š” observedTimestamp

๋ฐ์ดํ„ฐ ์œ ์ž… ํ™•์ธ

# Collector ์ˆ˜์‹ /์†ก์‹  ํ™•์ธ
curl -s http://<host>:<collector_metrics_port>/metrics | rg 'receiver_accepted|exporter_sent'

# OpenSearch ์ธ๋ฑ์Šค ์ƒ์„ฑ ํ™•์ธ
curl -s -u '<opensearch_admin_user>:<opensearch_admin_password>' \
  'http://<host>:<opensearch_port>/_cat/indices?v'

์˜ˆ์ƒ ์ธ๋ฑ์Šค ํ˜•ํƒœ:

  • ss4o_logs-*
  • otel-v1-apm-span-*
  • otel-v2-apm-service-map*

Alerting

  • ๊ทœ์น™ ํŒŒ์ผ: otel/rules/alerts.yml
  • ๋ผ์šฐํŒ… ํŒŒ์ผ: otel/alertmanager.yml
  • receivers.default.webhook_configs.url์„ ์‹ค์ œ webhook URI๋กœ ๊ต์ฒด ํ›„ ์‚ฌ์šฉ

Webhook URI ํ˜•ํƒœ ์˜ˆ์‹œ:

  • https://<webhook_host>/<path>

์•Œ๋ ค์ง„ ์ œ์•ฝ/์ด์Šˆ

ํ•ญ๋ชฉ ์˜ํ–ฅ ์šฐํšŒ/๋Œ€์‘
@timestamp๊ฐ€ ๊ธฐ๋Œ€์™€ ๋‹ค๋ฅด๊ฒŒ ์ €์žฅ๋จ Traces ์กฐํšŒ ์‹œ ์‹œ๊ฐ„์ถ• ๋ฌธ์ œ ๊ฐ€๋Šฅ Traces Dataset์˜ time field๋ฅผ startTime์œผ๋กœ ์ง€์ •
durationInNanos ์Šคํ‚ค๋งˆ ๋ถˆ์ผ์น˜ ์ผ๋ถ€ Trace ํŒจ๋„ ์—๋Ÿฌ ๊ฐ€๋Šฅ Spans/๊ธฐ๋ณธ ์กฐํšŒ ์ค‘์‹ฌ์œผ๋กœ ํ™•์ธ
targetNode.keyAttributes ๋ˆ„๋ฝ ์„œ๋น„์Šค๋งต ํŒจ๋„ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ ์„œ๋น„์Šค๋งต ์ธ๋ฑ์Šค ํ…œํ”Œ๋ฆฟ ์„ ์ƒ์„ฑ
Metrics UI ์ œ์•ฝ Dashboards ๋‚ด Metrics ์—ฐ๋™ ์ œํ•œ Prometheus UI ์ง์ ‘ ์กฐํšŒ
HTTP ๋น„TLS ๋กœ์ปฌ ๊ฐœ๋ฐœ ์™ธ ํ™˜๊ฒฝ์— ๋ถ€์ ํ•ฉ ์šด์˜์—์„œ๋Š” HTTPS/TLS ์ ์šฉ

์ฐธ๊ณ 

  • OpenSearch ์ปค์Šคํ…€ ๋นŒ๋“œ์— analysis-nori, analysis-icu ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ•จ
  • Data Prepper๋Š” ํŒŒ์ดํ”„๋ผ์ธ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•ด entrypoint์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์น˜ํ™˜ ์ˆ˜ํ–‰
  • Profiles๋Š” Collector feature gate(service.profilesSupport) ํ™œ์„ฑ ์‹œ ์‚ฌ์šฉ

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • network ... not found
    • ๊ณต์šฉ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๋ฅผ ๋จผ์ € ์ƒ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธ
  • OpenSearch ๋ถ€ํŒ… ์‹คํŒจ
    • vm.max_map_count ๊ฐ’ ํ™•์ธ
  • Redis ํด๋Ÿฌ์Šคํ„ฐ ๋ฏธ๊ตฌ์„ฑ
    • redis-cluster-init ๋กœ๊ทธ ํ™•์ธ (cluster_state:ok ์—ฌ๋ถ€)
  • Postgres replica ๋ฏธ๊ธฐ๋™
    • primary health ์ƒํƒœ/๋ณต์ œ ๊ณ„์ • ์„ค์ •/๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ ์ดˆ๊ธฐํ™” ์—ฌ๋ถ€ ํ™•์ธ
  • Kafka ์™ธ๋ถ€ ์ ‘์† ์‹คํŒจ
    • EXTERNAL ํฌํŠธ, SASL_PLAINTEXT ์„ค์ •, username/password ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
  • OTel ๋ฐ์ดํ„ฐ๊ฐ€ UI์— ์•ˆ ๋ณด์ž„
    • Collector metrics ์ฆ๊ฐ€ ์—ฌ๋ถ€
    • OpenSearch ์ธ๋ฑ์Šค ์ƒ์„ฑ ์—ฌ๋ถ€
    • Dashboards Data Source/Dataset/time field ์„ค์ • ํ™•์ธ

์šด์˜ ๋ช…๋ น

์Šคํƒ ์ •์ง€

cd <stack_directory>
docker compose down

๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ๊นŒ์ง€ ์ดˆ๊ธฐํ™”

cd <stack_directory>
docker compose down -v

์ „์ฒด ์ •๋ฆฌ

docker network rm <shared_network_name>

About

A production-like Docker Compose setup for local development.

Topics

Resources

Stars

Watchers

Forks

Contributors