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

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

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 14,469명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 Docker 입문 실전' 카테고리의 다른 글
| WORKDIR : 작업 디렉토리를 지정 (0) | 2026.05.17 |
|---|---|
| RUN : 이미지를 생성하는 과정에서 사용할 명령문 실행 (0) | 2026.05.16 |
| ENTRYPOINT : 컨테이너가 시작할 때 실행되는 명령어 (0) | 2026.05.15 |
| COPY 파일 복사(이동) (0) | 2026.05.14 |
| 종료된 컨테이너에 들어가서 디버깅하고 싶을 때 (0) | 2026.05.13 |
댓글