본문 바로가기

리눅스

Spring Boot 프로젝트를 도커 이미지로 빌드하고 도커 컨테이너로 실행

728x90

Spring Boot 프로젝트를 도커 이미지로 빌드하고 도커 컨테이너로 실행

1. Dockerfile 파일 생성

프로젝트 루트 디렉토리에 Dockerfile을 생성합니다. 이 파일은 도커 이미지를 빌드하는 데 사용됩니다. Dockerfile 내용은 아래와 같이 기본적으로 설정할 수 있습니다.

cd demo
vim Dockerfile
FROM openjdk:18-jdk-alpine AS builder
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew bootJAR

FROM openjdk:18-jdk-alpine
COPY --from=builder build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

**로컬 PC에 docker 엔진이 구성한 상태에서 docker build를 실행합니다.

2. 도커 이미지 빌드

터미널에서 프로젝트 루트 디렉토리로 이동한 후 다음 명령을 실행하여 도커 이미지를 빌드합니다.

docker build -t deploy-demo:0.0.1 .
$ docker build -t deploy-demo:0.0.1 .
[+] Building 105.9s (15/15) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                   0.0s
 => => transferring dockerfile: 342B                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/openjdk:18-jdk-alpine                                                                               2.4s
 => [auth] library/openjdk:pull token for registry-1.docker.io                                                                                         0.0s
 => CACHED [builder 1/8] FROM docker.io/library/openjdk:18-jdk-alpine@sha256:e5c5b35b831a4f655074a25604130ce53e33567b82c8a7204f0e5641b66d477e          0.0s
 => [internal] load build context                                                                                                                      0.0s
 => => transferring context: 72.09kB                                                                                                                   0.0s
 => [builder 2/8] COPY gradlew .                                                                                                                       0.0s
 => [builder 3/8] COPY gradle gradle                                                                                                                   0.0s
 => [builder 4/8] COPY build.gradle .                                                                                                                  0.0s
 => [builder 5/8] COPY settings.gradle .                                                                                                               0.0s
 => [builder 6/8] COPY src src                                                                                                                         0.0s
 => [builder 7/8] RUN chmod +x ./gradlew                                                                                                               0.4s
 => [builder 8/8] RUN ./gradlew bootJAR                                                                                                              102.2s
 => [stage-1 2/2] COPY --from=builder build/libs/*.jar app.jar                                                                                         0.1s
 => exporting to image                                                                                                                                 0.1s
 => => exporting layers                                                                                                                                0.1s
 => => writing image sha256:992f1de38c475e47ad76598ef86bedda8e29ad9b7b76853f6daecaa2a8c1d5dd                                                           0.0s
 => => naming to docker.io/library/deploy-demo:0.0.1                                                                                                   0.0s
728x90
  • 도커 이미지 확인(deploy-test:0.0.1)
docker images --filter=reference='deploy-test:0.0.1'
$ docker images --filter=reference='deploy-test:0.0.1'
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
deploy-test   0.0.1     5e5ebd4fe080   20 hours ago   346MB

3. 도커 컨테이너 실행

도커 이미지를 성공적으로 빌드한 후, 다음 명령을 사용하여 도커 컨테이너를 실행합니다.

docker run -d -p 8080:8080 --name deploy-demo deploy-demo:0.0.1
$ docker run -d -p 8080:8080 --name deploy-demo deploy-demo:0.0.1
6aa584edba49a0283540cf403b48c41c036e3ece3306207d98483559c69a77c9
  • 도커 컨테이너 로그
docker logs -f deploy-demo
$ docker logs -f deploy-demo

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.2)

2021-12-27 09:34:45.125  INFO 1 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 18-ea on 6aa584edba49 with PID 1 (/app.jar started by root in /)
2021-12-27 09:34:45.164  INFO 1 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2021-12-27 09:34:49.237  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-12-27 09:34:49.282  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-12-27 09:34:49.284  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.56]
2021-12-27 09:34:49.427  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-12-27 09:34:49.427  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3932 ms
2021-12-27 09:34:50.447  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-12-27 09:34:50.476  INFO 1 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 6.633 seconds (JVM running for 7.509)

4 웹 브라우저에서 접속

도커 컨테이너가 실행되었으면 웹 브라우저에서 http://localhost:8080 또는 해당 호스트 및 포트로 액세스하여 Spring Boot 애플리케이션을 확인할 수 있습니다.

http://localhost:8080
  • (또는) CLI에서 curl 명령어로 웹 페이지 테스트
curl -s localhost:8080
$ curl -s localhost:8080
Hello, World!

 

Spring Boot 프로젝트를 도커 이미지로 빌드하고 도커 컨테이너로 실행할 수 있습니다. 도커를 사용하면 개발 환경을 격리하고 애플리케이션을 쉽게 배포하고 관리할 수 있습니다.

 

728x90