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

[실습] 백엔드 프로젝트(Spring Boot) 프로젝트를 Docker로 실행시키기

by jint 2026. 5. 15.

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


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

Java 17 버전을 선택

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

package com.example.docker_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

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


컨테이너 경로를 상대 경로로 써도, 컨테이너의 루트 경로로 복사가 된다.

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

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

Welcome to Gradle 9.4.1!

Here are the highlights of this release:
 - Java 26 support
 - Non-class-based JVM tests
 - Enhanced console progress bar

For more details see https://docs.gradle.org/9.4.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 11s
8 actionable tasks: 8 executed
Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html


5) Dockerfile 바탕으로 이미지 빌드
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker build -t docker-spring-boot-server .
[+] Building 4.2s (8/8) FINISHED                                                                                                                                                                               docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                                           0.1s
 => => transferring dockerfile: 173B                                                                                                                                                                                           0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jdk                                                                                                                                                      1.3s
 => [auth] library/eclipse-temurin:pull token for registry-1.docker.io                                                                                                                                                         0.0s
 => [internal] load .dockerignore                                                                                                                                                                                              0.1s
 => => transferring context: 2B                                                                                                                                                                                                0.0s
 => [internal] load build context                                                                                                                                                                                              1.5s
 => => transferring context: 19.81MB                                                                                                                                                                                           1.5s
 => CACHED [1/2] FROM docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                                         0.1s
 => => resolve docker.io/library/eclipse-temurin:17-jdk@sha256:b04a8c5d46e210873ffd1af6ad5f4d62c69ed3a6736993556eae60bba1373a23                                                                                                0.1s
 => [2/2] COPY build/libs/*SNAPSHOT.jar app.jar                                                                                                                                                                                0.1s
 => exporting to image                                                                                                                                                                                                         0.9s
 => => exporting layers                                                                                                                                                                                                        0.6s
 => => exporting manifest sha256:708330df987f901391994e236b60a8c0c15e2ffaedcb654e9cc411c4c7344662                                                                                                                              0.0s
 => => exporting config sha256:570676822cc987c1e03c1d8a28793c9802f4fa8ecdb515748d9f398958ddf535                                                                                                                                0.0s
 => => exporting attestation manifest sha256:7112771b1b4ca4f926ca84957a11c723711f2d6454e1db01e1de8f35f7062dba                                                                                                                  0.1s 
 => => exporting manifest list sha256:49946969112d3dd3271f993a0017d6c6b98ce2faaa1bf03258d5bc24b2102eba                                                                                                                         0.0s 
 => => naming to docker.io/library/docker-spring-boot-server:latest                                                                                                                                                            0.0s 
 => => unpacking to docker.io/library/docker-spring-boot-server:latest                                                                                                                                                         0.1s 
                                                                                                                                                                                                                                    
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/pmuc5iswb1jgel85er5esohkv


6) 이미지 생성 확인
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker image ls
                                                                                                                                                                                                               i Info →   U  In Use
IMAGE                              ID             DISK USAGE   CONTENT SIZE   EXTRA
docker-spring-boot-server:latest   49946969112d        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                   1d2b317e50b2        157MB         41.6MB    U


7) 생성한 이미지 컨테이너로 실행
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker run -d -p 8080:8080 docker-spring-boot-server
8b253a51c704d40bac3ce6f77526a993e809749c504ba0e421c94ddca720818d


8) 컨테이너 실행 확인
- Windows PowerShell

PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker ps
CONTAINER ID   IMAGE                       COMMAND                CREATED          STATUS          PORTS                                         NAMES
8b253a51c704   docker-spring-boot-server   "java -jar /app.jar"   19 seconds ago   Up 19 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   recursing_kare
PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker logs 8b25

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v4.0.6)

2026-05-15T14:08:23.571Z  INFO 1 --- [docker-spring-boot-server] [           main] c.e.d.DockerSpringBootServerApplication  : Starting DockerSpringBootServerApplication v0.0.1-SNAPSHOT using Java 17.0.19 with PID 1 (/app.jar started by root in /)
2026-05-15T14:08:23.576Z  INFO 1 --- [docker-spring-boot-server] [           main] c.e.d.DockerSpringBootServerApplication  : No active profile set, falling back to 1 default profile: "default"
2026-05-15T14:08:24.151Z  INFO 1 --- [docker-spring-boot-server] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat initialized with port 8080 (http)
2026-05-15T14:08:24.161Z  INFO 1 --- [docker-spring-boot-server] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2026-05-15T14:08:24.161Z  INFO 1 --- [docker-spring-boot-server] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/11.0.21]
2026-05-15T14:08:24.181Z  INFO 1 --- [docker-spring-boot-server] [           main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 554 ms
2026-05-15T14:08:24.439Z  INFO 1 --- [docker-spring-boot-server] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat started on port 8080 (http) with context path '/'
2026-05-15T14:08:24.452Z  INFO 1 --- [docker-spring-boot-server] [           main] c.e.d.DockerSpringBootServerApplication  : Started DockerSpringBootServerApplication in 1.214 seconds (process running for 1.758)

What's next:
    View and search logs for all containers in one place
    with Docker Desktop's Logs view. docker-desktop://dashboard/logs


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

 

Docker 로 Spring Boot 서버 실행 확인


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

PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker stop 8b25
8b25
PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker rm 8b25
8b25
PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker image ls
                                                                                                                                                                                                               i Info →   U  In Use
IMAGE                              ID             DISK USAGE   CONTENT SIZE   EXTRA
docker-spring-boot-server:latest   49946969112d        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                   1d2b317e50b2        157MB         41.6MB    U 
PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker image rm 4994
Untagged: docker-spring-boot-server:latest
Deleted: sha256:49946969112d3dd3271f993a0017d6c6b98ce2faaa1bf03258d5bc24b2102eba
PS C:\Users\admin\IdeaProjects\docker-spring-boot-server> docker image ls     
                                                                                                                                                                                                               i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
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         1d2b317e50b2        157MB         41.6MB    U

 

그림으로 이해하기



참고링크 : 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,469명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글