본문 바로가기
Cloud

[Docker-compose]

by Ahngyuho 2025. 3. 10.

 

 

 

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