본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

[실습] Docker Compose로 백엔드(Spring Boot) 실행시키기

by jint 2026. 5. 29.

1. Docker Compose로 백엔드(Spring Boot) 실행
1) 프로젝트 셋팅
Spring initializr : https://start.spring.io/


Project: Gradle - Groovy
Language: Java
Spring Boot: 4.0.6
Project Metadata)
Group: com.example (보통 기업 도메인 들어감)
Artifact: compose-spring-boot-server (빌드 결과물, 프로젝트명)
Package name: com.example.compose-spring-boot-server
Packaging: Jar
Configuration: Properties
Java: 17
Dependencies(사용할 라이브러리): Spring Web(웹 프로젝트), Spring Boot DevTools

Java 17 버전을 선택

2) 간단한 코드 작성
- src/main/java/com/example/compose_spring_boot_server/AppController.java

package com.example.compose_spring_boot_server;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AppController {

    @GetMapping("/")
    public String home() {
        return "Hello, World!";
    }

}


3) Dockerfile 작성
- Dockerfile

# FROM openjdk:17-jdk
FROM eclipse-temurin:17-jdk

COPY build/libs/*SNAPSHOT.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app.jar"]


컨테이너 경로를 상대 경로로 써도, 컨테이너의 루트 경로로 복사가 되지만, 절대 경로 사용

4) Spring Boot 프로젝트 빌드
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> ./gradlew clean build

Welcome to Gradle 9.5.1!

Here are the highlights of this release:
 - Task provenance in reports and failure messages
 - Type-safe accessors for precompiled Kotlin Settings plugins

For more details see https://docs.gradle.org/9.5.1/release-notes.html

Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

BUILD SUCCESSFUL in 16s
8 actionable tasks: 7 executed, 1 up-to-date
Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.5.1/userguide/configuration_cache_enabling.html


5) compose 파일 작성
compose.yml 작성하지 않고 Docker CLI 로 실행시킬 때)

$ docker build -t hello-server .
$ docker run -d -p 8080:8080 hello-server


- compose.yml

services:
  my-server:
    # compose.yml 이 존재하는 디렉토리(.)에 있는 Dockerfile 로 이미지를 생성
    build: .
    ports:
      - 8080:8080


#1 build: compose.yml 파일 기준으로 Dockerfile 위치 경로
compose.yml 이 존재하는 경로에 있는 Dockerfile 로 이미지 생성

6) compose 파일 실행
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker compose up --build -d
#1 [internal] load local bake definitions
#1 reading from stdin 619B 0.0s done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile:
#2 transferring dockerfile: 189B 0.0s done
#2 DONE 0.1s

#3 [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk
#3 ...

#4 [auth] library/eclipse-temurin:pull token for registry-1.docker.io
#4 DONE 0.0s

#3 [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk
#3 DONE 1.4s

#5 [internal] load .dockerignore
#5 transferring context: 2B done
#5 DONE 0.1s

#6 [internal] load build context
#6 ...

#7 [1/2] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23
#7 resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23 0.1s done
#7 DONE 0.1s

#6 [internal] load build context
#6 transferring context: 19.81MB 1.5s done
#6 DONE 1.6s

#7 [1/2] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23
#7 CACHED

#8 [2/2] COPY build/libs/*SNAPSHOT.jar /app.jar
#8 DONE 0.1s

#9 exporting to image
#9 exporting layers
#9 exporting layers 0.6s done
#9 exporting manifest sha256:04227154cafdc31cfeb5335613e8175c7e12d2830cf685fcf60b3e089f362e97 0.0s done
#9 exporting config sha256:f9c9f4f13d2afd09f0c54eef23b930503ac60b9a191a0b8ce980a86529d610bb 0.0s done
#9 exporting attestation manifest sha256:ac97f520c236be8792bfc04c0681b514bc2bc6116ed55c2f5ec02e78346b49fa 0.1s done
#9 exporting manifest list sha256:dc64aff88c2480c8b07cbb9a9e486d0ab5a3fa78b2583fe25141ff1d5877977d
#9 exporting manifest list sha256:dc64aff88c2480c8b07cbb9a9e486d0ab5a3fa78b2583fe25141ff1d5877977d 0.0s done
#9 naming to docker.io/library/compose-spring-boot-server-my-server:latest done
#9 unpacking to docker.io/library/compose-spring-boot-server-my-server:latest 0.1s done
#9 DONE 0.9s

#10 resolving provenance for metadata file
#10 DONE 0.0s
[+] up 3/3
 ✔ Image compose-spring-boot-server-my-server       Built                                                                                                                                                                       4.8s
 ✔ Network compose-spring-boot-server_default       Created                                                                                                                                                                     0.0s
 ✔ Container compose-spring-boot-server-my-server-1 Started                                                                                                                                                                     0.5s

What's next:
    Filter, search, and stream logs from all your Compose services
    in one place with Docker Desktop's Logs view. docker-desktop://dashboard/logs?appId=compose-spring-boot-server


7) compose 실행 현황 확인, 이미지 생성 확인
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker compose ps
NAME                                     IMAGE                                  COMMAND                SERVICE     CREATED          STATUS          PORTS
compose-spring-boot-server-my-server-1   compose-spring-boot-server-my-server   "java -jar /app.jar"   my-server   38 seconds ago   Up 38 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker ps
CONTAINER ID   IMAGE                                  COMMAND                CREATED          STATUS          PORTS                                         NAMES
79865ecb6fa5   compose-spring-boot-server-my-server   "java -jar /app.jar"   42 seconds ago   Up 41 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   compose-spring-boot-server-my-server-1
PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker image ls
                                                                                                                                                                                                               i Info →   U  In Use
IMAGE                                         ID             DISK USAGE   CONTENT SIZE   EXTRA
compose-spring-boot-server-my-server:latest   dc64aff88c24        719MB          230MB    U   
my-jdk17-server:beta                          18e650b59b52        682MB          212MB        
my-jdk17-server:latest                        09a2803e5d8e        682MB          212MB    U   
my-node-server:latest                         9a1e49574c81       1.77GB          442MB    U   
my-server:latest                              c8dad74bef6b        157MB         41.6MB    U   
mysql:latest                                  c11782aa2a96        1.3GB          290MB        
nginx:latest                                  5aca99593157        241MB           66MB        
redis:latest                                  4d25e2fe601f        204MB         55.3MB


8) 컨테이너 로그 확인
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker compose logs
my-server-1  | 
my-server-1  |   .   ____          _            __ _ _
my-server-1  |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
my-server-1  | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
my-server-1  |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
my-server-1  |   '  |____| .__|_| |_|_| |_\__, | / / / /
my-server-1  |  =========|_|==============|___/=/_/_/_/
my-server-1  | 
my-server-1  |  :: Spring Boot ::                (v4.0.6)
my-server-1  | 
my-server-1  | 2026-05-28T15:36:44.495Z  INFO 1 --- [compose-spring-boot-server] [           main] c.e.c.ComposeSpringBootServerApplication : Starting ComposeSpringBootServerApplication v0.0.1-SNAPSHOT using Java 17.0.19 with PID 1 (/app.jar started by root in /)
my-server-1  | 2026-05-28T15:36:44.498Z  INFO 1 --- [compose-spring-boot-server] [           main] c.e.c.ComposeSpringBootServerApplication : No active profile set, falling back to 1 default profile: "default"
my-server-1  | 2026-05-28T15:36:45.075Z  INFO 1 --- [compose-spring-boot-server] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat initialized with port 8080 (http)
my-server-1  | 2026-05-28T15:36:45.084Z  INFO 1 --- [compose-spring-boot-server] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
my-server-1  | 2026-05-28T15:36:45.084Z  INFO 1 --- [compose-spring-boot-server] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/11.0.21]
my-server-1  | 2026-05-28T15:36:45.105Z  INFO 1 --- [compose-spring-boot-server] [           main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 558 ms
my-server-1  | 2026-05-28T15:36:45.376Z  INFO 1 --- [compose-spring-boot-server] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat started on port 8080 (http) with context path '/'
my-server-1  | 2026-05-28T15:36:45.391Z  INFO 1 --- [compose-spring-boot-server] [           main] c.e.c.ComposeSpringBootServerApplication : Started ComposeSpringBootServerApplication in 1.235 seconds (process running for 1.782)

What's next:
    Filter, search, and stream logs from all your Compose services
    in one place with Docker Desktop's Logs view. docker-desktop://dashboard/logs?appId=compose-spring-boot-server


9) 브라우저에서 확인
브라우저에서 http://localhost:8080/ 접속

 

Docker Compose 로 Spring Boot 서버 실행 확인


10) 실행시킨 컨테이너 중지 후 삭제
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker compose down
[+] down 2/2
 ✔ Container compose-spring-boot-server-my-server-1 Removed                                                                                                                                                                     0.4s
 ✔ Network compose-spring-boot-server_default       Removed                                                                                                                                                                     0.2s
PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker compose ps
NAME      IMAGE     COMMAND   SERVICE   CREATED   STATUS    PORTS
PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\Users\admin\IdeaProjects\compose-spring-boot-server> docker image ls
                                                                                                                                                                                                               i Info →   U  In Use
IMAGE                                         ID             DISK USAGE   CONTENT SIZE   EXTRA
compose-spring-boot-server-my-server:latest   dc64aff88c24        719MB          230MB        
my-jdk17-server:beta                          18e650b59b52        682MB          212MB        
my-jdk17-server:latest                        09a2803e5d8e        682MB          212MB    U   
my-node-server:latest                         9a1e49574c81       1.77GB          442MB    U   
my-server:latest                              c8dad74bef6b        157MB         41.6MB    U   
mysql:latest                                  c11782aa2a96        1.3GB          290MB        
nginx:latest                                  5aca99593157        241MB           66MB        
redis:latest                                  4d25e2fe601f        204MB         55.3MB



참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,486명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글