이번 포스팅은 Spring Boot를 Dockerize 및 docker에서 실행하는 방법을 소개해주는 글입니다.

 

우선 Docker를 설치해주세요. 
https://docs.docker.com/get-docker/
 

Get Docker

 

docs.docker.com

 

1. Spring Boot Project 생성

https://start.spring.io/
위 경로에서 Spring Boot Project를 생성해줍니다.

 

2. pom.xml

    <dependencies>
...    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
...
    <dependencies>
간단한 HTTP 통신 테스트를 위해 spring-boot-starter-web 라이브러리를 추가해줍니다.

 

3. HomeController.java

package com.example.springbootdocker.controller;

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

@RestController
public class HomeController {

    @GetMapping(value = "/")
    public String home() {
        return "Hello Docker !!";
    }
}
"/" 로 요청이 오면 "Hello Docker !!"를 반환하는 HomeController를 만들어줍니다.

 

3. Dockerfile 생성

Dockerfile은 도커 이미지를 생성할때 필요한 설정파일입니다. 다양한 설정 정보를 선언할 수 있습니다.

project 폴더 안에 Dockerfile을 생성해줍니다. (빈파일로 생성해주시면 됩니다.)

FROM openjdk:11-jre
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
FROM openjdk:11-jre 는 해당 도커 이미지를 컨테이너로 실행할 때, openjdk11-jre를 사용하겠다는 의미입니다. 
웹 애플리케이션을 실행하는데 jdk까지는 필요 없기 때문에 jre로 선언했습니다.

COPY target/*.jar app.jar 는 target안에 패키징된 jar파일을 app.jar라는 이미지파일로 복사한다는 의미입니다.

ENTRYPOINT ["java","-jar","app.jar"] 는 도커가 해당 이미지를 실행할때 사용하는 명령어를 명시합니다.
java -jar app.jar 라는 명령어가 사용되겠네요

 

4. docker build, run

우선 docker가 설치되어있어야 하며 docker가 실행되어있는지 확인하려면 터미널 창에 docker version을 입력해주세요.

위 프로젝트를 docker의 컨테이너에 실행하려면 다음과 같은 과정을 거쳐야합니다.
(명령어 입력은 해당 프로젝트 디렉터리 안에서 진행해주셔야합니다.)

 

1) project build

mvn package
jar 파일을 생성해줍니다.

 

2) docker build

docker build -t my-spring .
jar파일을 docker image로 build합니다.

 

3) docker image 확인

docker images

 

4) docker image 실행

docker run -p 8080:8080 my-spring
docker image를 실행하면 상태값을 가질 수 있는 독립적인 컨테이너가 생성됩니다.

docker 내부적으로 8080포트를 갖고 외부에서 해당 웹 애플리케이션에 접근할때도 8080포트로 하고 싶다면
8080:8080 이라고 적어주면 됩니다.

docker ps 를 입력하면 실행중인 컨테이너를 확인할 수 있습니다.

 

백그라운드로 실행하는 방법
docker run -d -p 8080:8080 my-spring

 

5) 테스트

브라우저에 http://localhost:8080/ 를 입력할 때 "Hello Docker !!" 라는 문구가 출력되면 테스트 성공입니다.

'IT > docker' 카테고리의 다른 글

[Docker] Docker 란?  (0) 2021.08.30

이 글은 subicura님의 글을 요약한 글입니다.
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

 

1. 도커란?

컨테이너 기반 가상화 플랫폼

서버에서 사용되는 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다.

 

2. 컨테이너

컨테이너란 격리된 공간에서 프로세스가 동작하는 기술입니다.

기존의 가상화 방식은 주로 OS를 가상화하였습니다. 
VMware나 VirtualBox 같은 가상머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이었는데, 
이 방식은 여러가지 OS를 가상화할 수 있고 비교적 간단하지만 무겁고 느려서 운영환경에서는 사용할 수 없었습니다.

위 방법은 성능에 문제가 있었기 때문에 이를 개선한 프로세스 격리 방식이 등장했습니다.

리눅스에서는 이 방식을 리눅스 컨테이너라고 하며 단순히 프로세스를 격리시키는 것이기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능도 거의 손실이 없습니다.

 

3. 컨테이너와 이미지

도커에서 가장 중요한 개념은 컨테이너와 이미지입니다.
이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 상태값을 가지지않고 변하지 않습니다.
컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다.
같은 이미지에서 여러개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.

'IT > docker' 카테고리의 다른 글

[Docker] Spring Boot Docker 사용하기  (0) 2021.08.30

+ Recent posts