AWS에 접속 가능한 상태이고, Spring 프로젝트가 이미 하나 이상의 RequestMapping이 실행 가능한 상태라고 가정한 상태라고 가정합니다. Docker Image로 Spring 배포하는 법을 알아봅시다.

 

이 글은 도커에 대한 설명이나 Spring에 대한 설명을 포함하고 있지 않습니다. 오로지 배포하는 법만 알려드립니다.

 

Spring boot 프로젝트의 Docker 배포에 대한 공식 사이트 가이드는 링크는 여기를 참고해주시면 됩니다.

 


 

Docker 설치

아래의 링크의 설명대로 OS에 맞게 Docker를 설치해줍니다.

 

 

docker image 만들기

1. Spring boot project 만들고 jar file을 생성하기

start.spring.io 에서 Spring 프로젝트를 만들어 줍니다.

 

jar file을 생성해줍니다.

 

  • Maven
$ mvn package
  • Gradle
$ ./gradlew build

 

2. 도커 이미지 만들어 주기

프로젝트 최상단 디렉토리에 Dockerfile를 만들어줍니다. (build.gradle이나 pom.xml과 같은 디렉토리 내)

docker 명령어의 디폴트 옵션 중 Dockerfile를 읽어 명령을 실행하기 때문에 이름은 꼭 이름을 "Dockerfile"로 만들어주세요.

 

Dockerfile

FROM openjdk:11
ARG JAR_FILE=build/libs/**-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

배포할 Docker Image를 관리하기 위해서는 Docker hub에 아이디를 생성 해주셔야합니다. (생성 링크: create one)

 

command나 bash를 실행해 Dockerfile 가 있는 디렉토리로 가서 아래 명령어를 실행해줍니다.

편의상 image 이름을 demo로 사용하였습니다. Docker build의 공식 설명은 여기를 확인해주세요.

 

$ docker build -t [당신의 도커 아이디]/demo .

docker image를 배포해줍니다.

$ docker push [당신의 도커 아이디]/demo

 

Server Instance에서 도커 컨테이너 배포

let’s connect again to our ec2 instance: -> 자신의 서버 인스턴스로 접속해주세요.

$ ssh -i /path/my-key-pair.pem ec2-user@<EC2 ip address>

1. Install docker on Server Instance

해당 서버에 Docker를 설치해주세요. 아래 링크 참고

https://hub.docker.com/search?offering=community&operating_system=linux&q=&type=edition 

 

Docker Hub

 

hub.docker.com

EC2 docker installing example

# 1. update yum

[ec2-user ~]$ sudo yum update -y

# 2. Install Docker

[ec2-user ~]$ sudo yum install docker -y

# 3. Start the Docker Service

[ec2-user ~]$ sudo service docker start

# 4. Add the ec2-user to the docker group so you can execute Docker commands without using sudo.

[ec2-user ~]$ sudo usermod -a -G docker ec2-user

 

어플리케이션 테스트 하기

Now you can run your application like this:

[ec2-user ~]$ docker run -p 80:8080 <Your Docker Hub account>/demo
이렇게 성공해보길 바란다

 

더 나아가보자!

 

Build tool을 사용하여 도커 이미지 만들기

Build a Docker Image with Gradle

You can build a tagged docker image with Gradle in one command:

./gradlew bootBuildImage --imageName=springio/gs-spring-boot-docker

 

Build a Docker Image with Maven

To get started quickly, you can run the Spring Boot image generator without even changing your pom.xml (remember that the Dockerfile, if it is still, there is ignored):

./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=springio/gs-spring-boot-docker

 

Docker 기본 명령어

docker ps
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
81c723d22865        springio/gs-spring-boot-docker:latest   "java -Djava.secur..."   34 seconds ago      Up 33 seconds       0.0.0.0:8080->8080/tcp   goofy_brown
docker stop goofy_brown
docker rm goofy_brown

 

Using Spring Profiles

프로필 기능 사용하기

 

"prod"

docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 80:8080 -t lsmman/demo

 

"dev"

docker run -e "SPRING_PROFILES_ACTIVE=dev" -p 80:8080 -t lsmman/demo

 

Reference

 

 

+ Recent posts