Home
Java
스프링부트를 도커로 EC2에 배포하기 (SpringBoot, Docker, EC2)
devfoxstar
devfoxstar
July 22, 2022
1 min

Table Of Contents

01
SpringBoot 프로젝트 구축
02
로컬에 Docker 설치
03
SpringBoot 프로젝트에 도커 설정하기
04
Docker Image 만들기
05
Container 실행
06
Docker Desktop
07
Docker Hub에 Push 하기
08
EC2에 배포하기
09
마치며

SpringBoot + Docker + EC2 조합은 최근 자바 프로젝트에서 자주 사용하는 환경 구성입니다.
그래서 오늘은 로컬과 서버에 시스템을 구축하고 배포하는 방법을 알아보겠습니다.

먼저, 시스템 흐름도를 통해서 보면 이해가 쉬워집니다.

Docker Workflow
Docker Workflow


SpringBoot 프로젝트 구축

Spring Initializr 통해 간단하게 SpringBoot 프로젝트를 구축합니다.
별도의 개인 프로젝트가 있다면, 그대로 사용해도 좋습니다.

package com.devfoxstar.springbase.controller;

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

@RestController
public class HomeController {

    @RequestMapping("/")
    public String sample() {
        return "Home";
    }

}

로컬에 Docker 설치

초기에는 DockerBox를 활용해서 가상 환경을 구성했습니다.
하지만 윈도우와 맥 모두 자체 가상 환경을 제공하면서, DockerBox는 더 이상 사용하지 않습니다.

맥은 전부터 간편하게 도커 구성이 가능했습니다.

윈도우도 WSL2(Windows Subsystem for Linux 2)가 도입되면서, 구성이 한결 쉬워졌습니다.
윈도우 환경이라면 도커를 설치하기 전에 WSL2를 먼저 설치해 줍니다.

그리고 Docker Desktop 프로그램을 설치합니다.

Docker Desktop for Mac
Docker Desktop for Windows

SpringBoot 프로젝트에 도커 설정하기

프로젝트에 도커를 설정하는 방법은 간단합니다.
프로젝트 루트에 Dockerfile 파일을 생성하면 됩니다.

FROM amazoncorretto:17
COPY build/libs/*.jar spring-base.jar
ENTRYPOINT ["java", "-jar", "/spring-base.jar"]
  • FROM - Docker Base Image
  • COPY - JAR 파일 복사
  • ENTRYPOINT - 실행 명령어

기본적인 내용으로 구성했지만, 이 외에 추가 옵션들이 많이 있습니다.
실제 프로젝트에서는 좀 더 복잡한 설정 파일을 볼 수 있습니다.


Docker Image 만들기

SpringBoot 프로젝트 루트 경로로 가서 도커 이미지를 생성합니다.
도커 명령어를 실행하면 Dockerfile에서 설정한 내용들이 실행됩니다.

참고로 계정명/프로젝트명으로 이미지를 생성하는 이유는 나중에 도커 허브에 푸시하기 위해서입니다.

docker build -t devfoxstar/spring-base .

docker images 명령어로 생성된 도커 이미지를 확인합니다.

Docker Images
Docker Images


Container 실행

생성된 이미지로 컨테이너를 실행합니다.
이때 포트를 2개 적는 이유는 Host PortContainer Port를 연결하기 위함입니다.

docker run -d -p 8080:8080 devfoxstar/spring-base

docker ps 명령어로 실행 중인 컨테이너를 확인할 수 있습니다.

Docker PS
Docker PS

이제 http://localhost:8080/ 경로로 들어가면 페이지를 확인할 수 있습니다.


Docker Desktop

참고로 명령어로 실행한 내용들은 Docker Desktop에서도 간편하게 확인할 수 있습니다.
하지만 처음에는 명령어로 개념을 익혀 두는 걸 추천합니다.

Docker Images Desktop
Docker Images Desktop
Docker PS Desktop
Docker PS Desktop


Docker Hub에 Push 하기

도커 허브 사이트에 먼저 계정을 등록해야 합니다.
그리고 로그인을 진행합니다.

$ docker login
Authenticating with existing credentials...
Login Succeeded

다음으로 본인의 허브 Repository에 이미지를 푸시합니다.

$ docker push devfoxstar/spring-base

그러면 도커 허브 사이트에서 푸시된 이미지를 확인할 수 있습니다.

Docker HUB
Docker HUB


EC2에 배포하기

먼저 AWS에서 프리 티어 버전을 신청합니다.
저는 EC2 인스턴스에 Amazon Linux 2 AMI를 설치했습니다.

이제 도커 허브의 이미지를 연결하겠습니다.
먼저 도커를 설치하고 프로그램을 실행합니다.

sudo yum install docker

sudo systemctl start docker

다음으로 도커 허브의 이미지를 풀합니다.

sudo docker pull devfoxstar/spring-base

그리고 이미지를 실행합니다.
사실 로컬과 서버에서 진행 과정은 거의 동일입니다.

sudo docker run -d -p 8080:8080 devfoxstar/spring-base

이제 로컬과 마찬가지로 컨테이너를 확인해 봅니다.

Docker PS Server
Docker PS Server

참고로 외부 서비스를 한다면 80:8080으로 설정해서 80 포트로 접근을 설정합니다.
포트로 접근하기 위해서는 EC2 콘솔에서 보안 규칙을 추가해 줘야 합니다.

네트워크 및 보안  - 보안 그룹 - 보안 그룹 ID
인바운드 규칙에 80 또는 8080 포트 추가

그러면 로컬에서와 마찬가지로 http://IP:8080/ 또는 http://IP/로 접근이 가능합니다.


마치며

지금까지 로컬부터 도커 허브 그리고 서버 배포까지 알아봤습니다.
전체적인 프로세스를 알고 있다면, 그리 어렵지 않은 과정입니다.

그리고 실무에서도 비슷한 방식으로 프로젝트 배포가 이루어 집니다.

물론 Docker Compose, GitLab, Jenkins, NGINX, LoadBalancer, Kubernetes 등 좀 더 복잡한 추가 기능들도 있습니다.
하지만 CI/CDDevOps는 점차 전문화되고 세분화되기 때문에, 개발자는 우선 여기까지만 알아도 충분합니다.


Tags

#Java#SpringBoot#Docker#EC2

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media