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/ 접속

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
비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 14,486명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 Docker 입문 실전' 카테고리의 다른 글
| [실습] Docker Compose로 프론트엔드(Next.js) 실행시키기 (0) | 2026.05.30 |
|---|---|
| [실습] Docker Compose로 백엔드(Nest.js) 실행시키기 (0) | 2026.05.29 |
| [실습] Docker Compose로 MySQL 실행시키기 (1) | 2026.05.27 |
| [실습] Docker Compose로 Redis 실행시키기 (0) | 2026.05.26 |
| 자주 사용하는 Docker Compose CLI 명령어 (0) | 2026.05.25 |
댓글