[Docker] 1일차 실습 - docker-compose.yml + 설정 문법

2025. 3. 12. 03:35·BEYOND SW [4] DevOps

 

🤓도커 첫걸음✏️

도커를 공부한 첫날의 내용을 개념과 실습으로 나누어 정리하는 중이다. 개념편은 🔗링크로...

이번 글은 🔗실습1편에서 이어지는 실습2 편이다!!

7. [실습] Docker Compose로 프론트엔드, 백엔드, DB 3계층 서버 구성하기

이번 장에서는 Docker Compose를 이용해서 여러 개의 서비스Container를 한 번에 띄우는 실습을 진행한다.

Vue.js 프론트엔드, Spring Boot 백엔드, MariaDB를 연동하여 전체 풀스택 프로젝트 환경을 손쉽게 관리할 수 있게 만든다.


7-1. 프로젝트 폴더 구조 설정

아래와 같이 프로젝트를 한꺼번에 관리하기 편하게 설정해둔다.

fullstack/
├── backend/
│   ├── build/libs/demo-0.0.1-SNAPSHOT.jar
│   └── db/ (MariaDB 데이터 저장소)
├── frontend/
│   ├── nginx/dist/ (Vue 빌드 결과물)
│   └── nginx/default.conf (NGINX 설정 파일)
└── docker-compose.yml

7-2. docker-compose.yml 파일 작성

작성한 docker-compose.yml 내용⤵️

version: "3"

services:
  frontend:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./frontend/nginx/dist:/usr/share/nginx/html
      - ./frontend/nginx/default.conf:/etc/nginx/conf.d/default.conf

  backend:
    image: openjdk:17-ea-slim-buster
    ports:
      - 8080:8080
    volumes:
      - ./backend/build/libs/demo-0.0.1-SNAPSHOT.jar:/app.jar
    command: ["java", "-jar", "/app.jar"]

  db:
    image: mariadb:latest
    ports:
      - 3306:3306
    volumes:
      - ./backend/db:/var/lib/mysql
    environment:
      - MARIADB_ROOT_PASSWORD=qwer1234
      - MARIADB_DATABASE=web

docker-compose.yml 구성 요소 설명 (문법)

항목 설명
version Compose 파일의 버전. 일반적으로 "3" 또는 "3.x" 사용.
services 컨테이너 서비스를 정의. frontend, backend, db 세 가지 서비스가 정의됨.
그 아래 들여쓰기하고 {컨테이너의 이름}: 으로 시작해서 각각의 docker run 설정을 해주면 된다.

 

🖥️ frontend 서비스

  frontend:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./frontend/nginx/dist:/usr/share/nginx/html
      - ./frontend/nginx/default.conf:/etc/nginx/conf.d/default.conf
항목 설명
image nginx 최신 버전 이미지 사용
ports 호스트 80포트를 컨테이너의 80포트와 연결
volumes (왼쪽) 로컬 환경 현재 프로젝트의 dist 폴더를 : (오른쪽) /usr/share/nginx/html에 연결해 정적 파일 서비스
default.conf를 NGINX 설정으로 연결

 


💻 backend 서비스

 backend:
    image: openjdk:17-ea-slim-buster
    ports:
      - 8080:8080
    volumes:
      - ./backend/build/libs/demo-0.0.1-SNAPSHOT.jar:/app.jar
    command: ["java", "-jar", "/app.jar"]
항목 설명
image 말그대로 OpenJDK 17-ea-slim-buster 버전의 이미지를 사용한다는 뜻
ports 호스트 8080포트를 컨테이너 8080포트로 연결
volumes (왼쪽)빌드된 JAR 파일을 : (오른쪽)컨테이너 내부 /app.jar로 마운트
command Spring Boot 애플리케이션을 실행하는 명령어 java -jar /app.jar

 


🗄️ db 서비스 (MariaDB)

  db:
    image: mariadb:latest
    ports:
      - 3306:3306
    volumes:
      - ./backend/db:/var/lib/mysql
    environment:
      - MARIADB_ROOT_PASSWORD=qwer1234
      - MARIADB_DATABASE=web
항목 설명
image mariadb 최신 버전 이미지
ports 호스트 3306포트를 컨테이너 3306포트로 연결
volumes MariaDB 데이터 저장소를 ./backend/db와 연결
environment DB 초기 설정 (root 비밀번호, 기본 DB 생성 등)

 


7-3. Docker Compose 실행하기

docker-compose up -d
  • -d: 백그라운드 실행 옵션
  • 명령어 실행 후 모든 서비스(frontend, backend, db)가 함께 실행됨.
  • Docker Desktop 에 가서도 확인할 수 있다!

7-4. 상태 확인 및 컨테이너 관리

컨테이너 상태 확인

docker-compose ps

개별 서비스 로그 보기

docker-compose logs -f backend

컨테이너 중지 및 삭제

docker-compose down

7-5. Docker Desktop UI에서 Compose 프로젝트 확인하기

  1. Docker Desktop 실행 → Containers 메뉴 클릭
  2. fullstack라는 이름으로 Compose 프로젝트가 그룹화되어 표시됨
  3. 각 서비스 컨테이너를 선택해서 로그 확인, 시작/중지 등 관리 가능

7-6. 확인할 것들..

서비스 확인할 것
frontend (Vue + NGINX) localhost:80 접속 후 Vue 화면이 정상적으로 뜨는지
backend (Spring Boot) localhost:8080 접속 후 API가 정상 응답하는지
db (MariaDB) DB 접속 및 초기 데이터베이스 생성 여부 확인 (root/qwer1234)

 


다음 실습 내용... to be continued

  • Dockerfile 작성 후 직접 이미지 빌드
  • MariaDB Master-Slave 복제
  • 아마도... CI/CD 파이프라인 연동 (GitHub Actions, Jenkins 등)

 

'BEYOND SW [4] DevOps' 카테고리의 다른 글

[Docker] 2일차 - 도커 네트워크의 이해 실습  (2) 2025.03.12
[Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지  (1) 2025.03.12
[Docker] 🐋Docker run 명령어 + ⌨️주요 옵션들  (1) 2025.03.10
[Docker] 1일차 실습 - 프론트엔드(Vue.js), 백엔드(Spring Boot)  (2) 2025.03.10
[Docker] Windows11 에서 Docker Desktop 사용하기 (WSL update 오류 해결 방법)  (0) 2025.03.10
'BEYOND SW [4] DevOps' 카테고리의 다른 글
  • [Docker] 2일차 - 도커 네트워크의 이해 실습
  • [Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지
  • [Docker] 🐋Docker run 명령어 + ⌨️주요 옵션들
  • [Docker] 1일차 실습 - 프론트엔드(Vue.js), 백엔드(Spring Boot)
알파카1234
알파카1234
기대와는 다른 현실에 실망하고, 대신 생각지도 않던 어떤 것을 얻고, 그로 인해 인생의 행로가 미묘하게 달라지고, 한참의 세월을 지나 오래전에 겪은 멀미의 기억과 파장을 떠올리고, 그러다 문득 자신이 어떤 사람인지 조금 더 알게 되는 것. 생각해보면 나에게 여행은 언제나 그런 것이었다. - 김영하 『여행의 이유』 p. 51.
  • 알파카1234
    알파카 로그
    알파카1234
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • BEYOND SW [1] 기반기술 (20)
        • 강의 메모 (2)
        • 리눅스 & 네트워크 (8)
        • SQL & DB (6)
        • 소프트웨어공학 아키텍처 (4)
      • BEYOND SW [2] 프론트엔드 (0)
        • HTML CSS (0)
      • BEYOND SW [3] 백엔드 (28)
      • BEYOND SW [4] DevOps (14)
      • BEYOND SW [5] 최종프로젝트 (4)
      • WEB front-end 개념정리 (4)
        • 웹 동작 원리와 개념 (0)
        • 웹퍼블리싱을 위한 HTML + CSS (2)
        • 웹퍼블리싱을 위한 Javascript (2)
      • 딥러닝 AI 공부 (4)
      • 2021-가을학기 (16)
        • 프로그래밍개론 (8)
        • 심리통계분석 I (8)
        • 데이터베이스설계와질의 (0)
      • 2024-봄학기 (0)
        • 프로그래밍언어론 (0)
        • 현대사회와심리학 (심리학개론) (0)
        • 현대사회와언어심리학 (언어심리학개론) (0)
      • 잡담 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    명령프롬프트 장고 명령어
    django rest framework 객체 저장되는 곳
    리눅스 도커 설치
    파이썬
    docker desktop 무한대기
    작문
    Django
    파이썬 접근제어자
    도커 허브에 이미지 업로드
    도커 이미지 pull
    db.sqlite3
    wsl update failed
    django db
    django rest framework 모델
    명령프롬프트 django 명령어
    django 모델 객체가 저장되는 곳
    (wsl update 오류 해결 방법)
    도커 이미지 push
    django 백엔드
    ubuntu docker 설치 명령어
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
알파카1234
[Docker] 1일차 실습 - docker-compose.yml + 설정 문법
상단으로

티스토리툴바