Build Type 은 Gradle 로 선택하고, Java는 8버전으로 설정해주었습니다.
EC2 Docker 환경에 올리기 위한 과정이므로 Dependencies 는 Spring Web 만 선택하여 진행하겠습니다.
간단하게 접속여부를 확인하기 위한 GetMapping 하나를 설정해 주었습니다.
Dockerfile 는 해당 경로에 생성해주었으며, 파일명은 꼭 Dockerfile 로 생성해 주세요.
FROM : 베이스 이미지, 빌드 할 이미지가 어떤 이미지를 기반으로 하고 있는지를 나타냅니다. 여기서는 jre8 이미지를 기반으로 하겠다는 의미가 됩니다.
COPY : 파일을 이미지에 추가하는 것을 의미하며, 다음과 같이 사용합니다. 여기서는 build/libs/docker-test-*.jar 파일을 이미지의 app.jar 에 복사하겠다는 의미가 됩니다.
COPY <복사할 경로> <이미지에서 파일이 복사될 경로>
ENTRYPOINT : 컨테이너가 생성, 시작될 때 실행되는 명령어입니다. 여기서는 java -jar app.jar 명령어가 실행되어 복사해두었던 jar파일을 실행하여 SpringBoot 프로젝트를 실행시킨다는 의미가 됩니다.
해당 프로젝트를 github에 연동하여 github에 Repository를 생성해주겠습니다.
$ sudo apt update
$ sudo apt install git
앞서 연동해두었던 GitHub Repository의 Clone URL을 복사합니다.
$ 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.
$ cd [프로젝트 폴더명]
$ ./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.
$ sudo apt install openjdk-8-jdk
해당 경로 내 *.jar 파일이 생성되었는지 확인해 주세요.
$ cd build/libs
Dockerfile 이 위치하는 폴더로 이동해서 명령어를 실행해 주세요.
$ docker build -t [이미지명] .
이미지가 정상적으로 생성되었는지 이미지 리스트를 출력하여 확인해주세요.
$ 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 프로젝트에 도달하게 된다는 의미가 됩니다.
[EC2 퍼블릭IP or 퍼블릭DNS]:8080
해당 경로로 접속 시 아래와 같이 설정해준 GetMapping의 결과를 확인할 수 있습니다.