-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
171 lines (157 loc) · 5.02 KB
/
docker-compose.yml
File metadata and controls
171 lines (157 loc) · 5.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
version: '3.8' # Docker Compose 파일 형식 버전 지정
services:
# 1. MySQL (관계형 데이터베이스)
mysql:
image: mysql:8.0
container_name: msa-mysql
restart: always
environment:
# 비밀번호 설정 (필수)
MYSQL_ROOT_PASSWORD: admin1234
ports:
# 호스트:컨테이너 포트 매핑
- "3306:3306"
volumes:
# 데이터 영속성을 위한 볼륨 설정
- mysql-data:/var/lib/mysql
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schemas.sql
networks:
- msa-network
# 2. Redis (인메모리 캐시/데이터 저장소)
redis:
image: redis:6.2-alpine
container_name: msa-redis
restart: always
ports:
- "6379:6379"
volumes:
# 데이터 영속성을 위한 볼륨 설정
- redis-data:/data
networks:
- msa-network
# 3. Kafka (메시지 브로커) 및 Zookeeper
# Kafka는 메타데이터 관리를 위해 Zookeeper에 의존합니다.
# 3-1. Zookeeper
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
container_name: msa-zookeeper
restart: always
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
networks:
- msa-network
# 3-2. Kafka
kafka:
image: confluentinc/cp-kafka:7.4.0
container_name: msa-kafka
restart: always
depends_on:
- zookeeper # Zookeeper가 먼저 시작되어야 함
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # 내부 네트워크 이름 사용
# 외부 접속을 위한 설정 (Host PC에서 접근 시 사용)
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
networks:
- msa-network
# 4. MongoDB (NoSQL 데이터베이스)
mongodb:
image: mongo:6.0
container_name: msa-mongodb
restart: always
environment:
# 사용자 인증을 위한 초기 설정 (선택 사항)
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin1234
MONGO_INITDB_DATABASE: msa_mongo_db
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
networks:
- msa-network
# Elasticsearch - 로그 저장 및 검색 엔진
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.18 # 7.x 버전 추천
container_name: elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
volumes:
- esdata:/usr/share/elasticsearch/data
networks:
- msa-network
# Kibana - 시각화 및 대시보드 도구
kibana:
image: docker.elastic.co/kibana/kibana:7.17.18
container_name: kibana
ports:
- 5601:5601
environment:
# Elasticsearch와 Kibana의 버전은 일치해야 합니다.
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- msa-network
# Logstash - 데이터 파이프라인 및 Kafka Consumer
logstash:
image: docker.elastic.co/logstash/logstash:7.17.18
container_name: logstash
volumes:
# 1단계에서 만든 설정 파일을 컨테이너 내부에 마운트합니다.
- ./logstash/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
ports:
- 5000:5000 # ← 호스트의 5000번 포트로 노출
- 9600:9600 # Logstash Monitoring API 포트
environment:
- "LS_JAVA_OPTS=-Xms512m -Xmx512m"
depends_on:
- elasticsearch
# **** 중요: 사용자 카프카 서비스 이름으로 변경하세요. ****
- kafka
networks:
- msa-network
# Filebeat - 로그 수집 및 Kafka 전송 (Log Shipper)
filebeat:
image: docker.elastic.co/beats/filebeat:7.17.18 # Logstash/ES와 동일 버전 7.17.18 사용
container_name: filebeat
user: root # 로그 파일 접근 권한 문제 방지를 위해 root로 실행
volumes:
# 1) Filebeat 설정 파일 마운트
- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
# 2) 도커 컨테이너 로그가 저장된 경로를 마운트 (Mac/Linux 기준)
# Filebeat가 이 경로를 통해 모든 컨테이너의 로그를 읽습니다.
- ${APP_LOGS_PATH}:/usr/share/filebeat/app_logs:ro
# 3) (선택) Docker 소켓 마운트: 메타데이터 추출에 사용될 수 있습니다.
- /var/run/docker.sock:/var/run/docker.sock:ro
depends_on:
- kafka # Kafka가 먼저 시작되어야 함
networks:
- msa-network
# 볼륨 정의 (데이터 영속성 확보)
volumes:
esdata:
driver: local
mysql-data:
redis-data:
mongo-data:
# 네트워크 정의 (컨테이너 간 통신)
networks:
msa-network:
driver: bridge