[AWS] EC2 X Docker : Spring Boot 프로젝트 올리기

haeny-dev·2021년 7월 14일
5

AWS

목록 보기
5/6
post-thumbnail

📌 참고

  • OS : MacOS
  • IDEA : IntelliJ IDEA 2021.1.1
  • AWS EC2 : Ubuntu 20.04
  • Spring : SpringBoot 2.5.2 (Gradle)
  • VCS : GitHub

📌 프로젝트 생성

➕ SpringBoot 프로젝트 생성

1.IntelliJ > New Project > Spring Initializr

Build TypeGradle 로 선택하고, Java는 8버전으로 설정해주었습니다.

2. Spring Web 프로젝트 생성

EC2 Docker 환경에 올리기 위한 과정이므로 Dependencies 는 Spring Web 만 선택하여 진행하겠습니다.

3. 확인을 위한 Request Mapping 설정

간단하게 접속여부를 확인하기 위한 GetMapping 하나를 설정해 주었습니다.

➕ Dockerfile 작성

1. Dockerfile 생성

Dockerfile 는 해당 경로에 생성해주었으며, 파일명은 꼭 Dockerfile 로 생성해 주세요.

2. Dockerfile 작성

FROM : 베이스 이미지, 빌드 할 이미지가 어떤 이미지를 기반으로 하고 있는지를 나타냅니다. 여기서는 jre8 이미지를 기반으로 하겠다는 의미가 됩니다.

COPY : 파일을 이미지에 추가하는 것을 의미하며, 다음과 같이 사용합니다. 여기서는 build/libs/docker-test-*.jar 파일을 이미지의 app.jar 에 복사하겠다는 의미가 됩니다.

COPY <복사할 경로> <이미지에서 파일이 복사될 경로> 

ENTRYPOINT : 컨테이너가 생성, 시작될 때 실행되는 명령어입니다. 여기서는 java -jar app.jar 명령어가 실행되어 복사해두었던 jar파일을 실행하여 SpringBoot 프로젝트를 실행시킨다는 의미가 됩니다.

➕ Github 연동

1. VCS > Share Project On GitHub

해당 프로젝트를 github에 연동하여 github에 Repository를 생성해주겠습니다.

2. Github 에서 확인하기

🚀 EC2 x Git

➕ EC2 인스턴스에 Git설치

1. apt 업데이트

$ sudo apt update

2. Git 설치

$ sudo apt install git

➕ SpringBoot 프로젝트 가져오기

1. GitHub에서 URL복사

앞서 연동해두었던 GitHub Repository의 Clone URL을 복사합니다.

2. EC2에서 Clone

$ git clone [URL]
Cloning into 'docker-test'...
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 27 (delta 0), reused 27 (delta 0), pack-reused 0
Unpacking objects: 100% (27/27), 58.16 KiB | 7.27 MiB/s, done.

🐳 도커 x SpringBoot

➕ SpringBoot 빌드

1. 프로젝트 폴더로 이동

$ cd [프로젝트 폴더명]

2. Gradle 빌드

$ ./gradlew build

해당 명령어 실행 시 빌드가 실행되지 않고 JAVA_HOME 을 찾을 수 없다는 응답이 오는 경우에는 JDK를 설치해 주어야 합니다.

ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

2-1. EC2 JDK 설치

$ sudo apt install openjdk-8-jdk

3. *.jar 파일 확인

해당 경로 내 *.jar 파일이 생성되었는지 확인해 주세요.

$ cd build/libs

➕ 도커 이미지 생성

1. 도커 이미지 생성

Dockerfile 이 위치하는 폴더로 이동해서 명령어를 실행해 주세요.

$ docker build -t [이미지명] .

2. 도커 이미지 확인

이미지가 정상적으로 생성되었는지 이미지 리스트를 출력하여 확인해주세요.

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
docker       latest    ec78a16e8b6b   5 seconds ago   285MB
openjdk      8-jre     d75a3956451e   2 weeks ago     268MB

➕ 도커 컨테이너 생성 및 실행

$ docker run -p [EC2포트]:[도커포트] [IMAGE ID]
$ docker run -p 8080:8080 ec78a16e8b6b

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

2021-07-14 14:06:13.723  INFO 1 --- [           main] c.e.dockertest.DockerTestApplication     : Starting DockerTestApplication using Java 1.8.0_292 on 299369a2cda2 with PID 1 (/app.jar started by root in /)
2021-07-14 14:06:13.727  INFO 1 --- [           main] c.e.dockertest.DockerTestApplication     : No active profile set, falling back to default profiles: default
2021-07-14 14:06:16.497  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-07-14 14:06:16.536  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-07-14 14:06:16.537  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.48]
2021-07-14 14:06:16.687  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-07-14 14:06:16.688  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2779 ms
2021-07-14 14:06:18.274  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-07-14 14:06:18.309  INFO 1 --- [           main] c.e.dockertest.DockerTestApplication     : Started DockerTestApplication in 5.715 seconds (JVM running for 7.247)
2021-07-14 14:08:18.000  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-14 14:08:18.001  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-14 14:08:18.007  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms

여기서 SpringBoot 프로젝트의 포트가 8080포트로 서버가 올라가게 되면 도커의 8080포트를 점유하게 됩니다.

위 명령어의 -p 8080:8080 을 넣어주게 되면 EC2의 8080포트를 도커의 8080포트와 연결시켜주겠다는 의미가 된다.

그 의미는 EC2의 8080포트로 접근하게되면 도커의 8080포트로 연결되어 SpringBoot 프로젝트에 도달하게 된다는 의미가 됩니다.

➕ SpringBoot 프로젝트 확인

[EC2 퍼블릭IP or 퍼블릭DNS]:8080 

해당 경로로 접속 시 아래와 같이 설정해준 GetMapping의 결과를 확인할 수 있습니다.

📖 REFERENCE

[Youtube] 스프링부트와 도커

0개의 댓글