docker-compose.yml에서 사용되는 Key(키)들의 의미를 정리한 것입니다.
✅ version
version: "3"
- docker-compose.yml의 버전을 지정.
- 버전 **"3"**은 최신 docker-compose의 표준 형식 중 하나.
✅ services
services:
backend:
frontend:
db:
- 각각의 컨테이너를 정의하는 서비스 그룹.
- backend, frontend, db는 각각 하나의 서비스(컨테이너) 역할을 수행.
✅ image
image: openjdk:latest
- 컨테이너 실행 시 사용할 Docker 이미지를 지정.
- openjdk:latest → 최신 버전의 OpenJDK 이미지 사용.
- nginx:latest → 최신 Nginx 이미지 사용.
- mariadb:latest → 최신 MariaDB 이미지 사용.
✅ container_name
container_name: backend
- (현재 설정에는 없음, 추가 가능)
- 컨테이너의 이름을 명시적으로 지정.
- 기본적으로 서비스명_숫자 형식(backend_1, db_1)으로 생성되지만, 직접 지정할 수 있음.
✅ ports
ports:
- "8080:8080"
- "80:80"
- "3306:3306"
- 호스트와 컨테이너의 포트를 연결.
- 형식: "호스트포트:컨테이너포트"
- "8080:8080" → 호스트의 8080 포트를 컨테이너의 8080 포트와 매핑
- "80:80" → Nginx 컨테이너의 80번 포트를 외부에 노출
- "3306:3306" → MariaDB의 3306 포트를 외부에 노출
✅ volumes
volumes:
- "./back/build/libs/back-0.0.1-SNAPSHOT.jar:/app.jar"
- "./nginx/dist:/usr/share/nginx/html"
- "./nginx/default.conf:/etc/nginx/conf.d/default.conf"
- "./db:/var/lib/data"
- 호스트 디렉토리(또는 파일)와 컨테이너 내부 디렉토리를 연결.
- "호스트경로:컨테이너경로" 형식.
- ./back/build/libs/back-0.0.1-SNAPSHOT.jar:/app.jar → Spring Boot JAR 파일을 컨테이너 내부 /app.jar로 마운트.
- ./nginx/dist:/usr/share/nginx/html → 정적 웹 파일을 Nginx 컨테이너에 마운트.
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf → Nginx 설정 파일 마운트.
- ./db:/var/lib/data → MariaDB 데이터 파일을 호스트에 저장하여 컨테이너 종료 후에도 데이터 유지.
✅ environment
environment:
- DB_URL=db:3306/web
- DB_ID=root
- DB_PASSWORD=qwer1234
- 컨테이너 내부에서 사용할 환경 변수 설정.
- 형식: - KEY=VALUE
- DB_URL=db:3306/web → 데이터베이스 주소 설정.
- DB_ID=root → 데이터베이스 사용자 ID.
- DB_PASSWORD=qwer1234 → 데이터베이스 비밀번호.
✅ command
command: ["java", "-jar", "/app.jar"]
- 컨테이너 실행 시 기본적으로 실행할 명령어를 지정.
- 위 설정에서는 java -jar /app.jar 명령어를 실행하여 Spring Boot 애플리케이션 실행.
✅ depends_on
depends_on:
- db
- 다른 서비스가 먼저 실행된 후 현재 서비스를 실행하도록 설정.
- depends_on: - db → db 서비스(MariaDB)가 실행된 후 backend 서비스 실행.
📌 주의
- depends_on은 단순히 실행 순서를 지정할 뿐, db가 완전히 준비될 때까지 기다리지 않음.
- DB가 정상적으로 실행된 후에 backend가 시작되도록 하려면 healthcheck을 추가해야 함.
🚀 최종 정리
Key설명
version | docker-compose.yml의 버전 지정 |
services | 여러 개의 컨테이너(서비스) 정의 |
image | 사용할 Docker 이미지 지정 |
container_name | 컨테이너 이름을 직접 지정 (현재 설정에는 없음) |
ports | 호스트와 컨테이너 간 포트 매핑 |
volumes | 호스트와 컨테이너 간 데이터 공유 |
environment | 컨테이너 내부에서 사용할 환경 변수 설정 |
command | 컨테이너 실행 시 기본 실행할 명령어 설정 |
depends_on | 특정 서비스가 먼저 실행된 후 현재 서비스 실행 |
이제 어디서든 복붙해서 사용해도 쉽게 이해할 수 있도록 정리되었습니다!
services: # 여러 개의 컨테이너(서비스)를 정의하는 최상위 키
backend: # 백엔드 서비스 정의 (Spring Boot 애플리케이션 실행)
image: # 사용할 Docker 이미지 지정
ports: # 호스트와 컨테이너 간 포트 매핑 (형식: "호스트포트:컨테이너포트")
volumes: # 호스트와 컨테이너 간 파일 또는 디렉토리 공유 (형식: "호스트경로:컨테이너경로")
environment: # 컨테이너 내부에서 사용할 환경 변수 설정 (형식: "KEY=VALUE")
command: # 컨테이너 실행 시 기본적으로 실행할 명령어 지정
depends_on: # 특정 서비스가 먼저 실행된 후 현재 서비스 실행
frontend: # 프론트엔드 서비스 정의 (Nginx 정적 웹 서버)
image: # 사용할 Docker 이미지 지정
ports: # 호스트와 컨테이너 간 포트 매핑
volumes: # 호스트의 정적 파일과 Nginx 컨테이너 내부 디렉토리를 연결
environment: # 컨테이너 내부에서 사용할 환경 변수 설정
db: # 데이터베이스 서비스 정의 (MariaDB 실행)
image: # 사용할 Docker 이미지 지정
ports: # 호스트와 컨테이너 간 포트 매핑
volumes: # MariaDB의 데이터를 호스트에 영구 저장
environment: # MariaDB 실행을 위한 환경 변수 설정 (예: 루트 비밀번호, 기본 DB 생성)
'Cloud' 카테고리의 다른 글
[ansible] ansible 사용해보기 (0) | 2025.03.20 |
---|---|
[Docker] Docker 란? (0) | 2025.03.10 |
Amazon S3 (0) | 2025.02.16 |
aws ec2 Ubuntu의 systemd에 Java application을 Service로 등록 (0) | 2023.08.02 |