728x90
목표 : Docker를 사용해서 Spring-boot 애플리케이션을 EC2에 배포
사전 작업
- Spring-boot 프로젝트
- Docker Hub 회원가입
- 로컬 PC 및 EC2에 Docker 설치(ubuntu 설치는 아래 공식문서 참조)
환경
- Java 17
- Spring Boot 3.1.0
- gradle
- 로컬 PC : M2 Mac os
- EC2 : Ubuntu 22.04 프리티어
1. 로컬 PC에서 Docker 설정하기
1-1. Spring Boot - Dockerfile 생성 및 설정
Dockerfile 작성 전 알아두면 좋을 지시어
지시어 | 설명 |
FROM | 베이스 이미지 지정 |
RUN | 이미지를 지정하면서 실행할 명령 지정 |
ENTRYPOINT | 컨테이너의 어플 지정 (컨테이너 시작할 때 실행할 명령어) |
EXPOSE | 컨테이너의 포트 지정 |
ADD | 이미지 생성 시 파일 추가 |
COPY | 이미지 생성시 파일 복사 |
WORKDIR | 컨테이너 작업 디렉토리 지정 |
MAINTAINER | 이미지 작성자 명시 |
CMD | 컨테이너의 어플 지정 (컨테이너 시작할 때 실행할 명령어) |
LABEL | 이미지의 라벨 지정 |
ENV | 컨테이너의 환경 변수 지정 |
VOLUME | 컨테이너의 볼륨 지정 |
USER | 컨테이너의 사용자 지정 |
ARG | 인자 설정 |
# Dockerfile
# jdk17 Image Start
FROM openjdk:17
# 인자 설정 - JAR_File
ARG JAR_FILE=build/libs/*.jar
# jar 파일 복제
COPY ${JAR_FILE} app.jar
# 인자 설정 부분과 jar 파일 복제 부분 합쳐서 진행해도 무방
#COPY build/libs/*.jar app.jar
# 실행 명령어
ENTRYPOINT ["java", "-jar", "app.jar"]
1-2. Jar 파일 Build
./gradlew clean bootJar (실행가능한 Jar파일만 생성, *.jar로 했기 때문에 오류 미연에 방지)
1-3. Docker 로그인 (로컬터미널)
도커 허브에 도커이미지를 푸쉬할것이기 때문에 로그인을 해주어야 한다.
$docker login -u [username]
# 이후 password 입력
1-4. Docker 이미지 생성
# 기본 커맨드
# (태그 생략가능:latest로 지정됨)
docker build -t [dockerHub ID]/[이미지명]:[태그명] [DockerFile위치]
# 입력 예시(마지막 . 포함해야함 현위치라는 뜻)
# m2 Mac os라서 추가함 : --platform linux/amd64
docker build --platform linux/amd64 -t philip2767/demo .
여기서 의문점은 도커는 실행환경을 모두 통일하기 위해 사용하는 것이라 배웠는데, 특정 옵션을 포함해서 해야 하는지 이해가 가지 않는다.
아마 내가 Mac os에서 빌드를 하고 빌드된 파일을 도커허브로 올려서 그런게 아닌가 싶은 생각이 들긴 하는데, 해당 부분은 좀 더 공부해봐야 할 듯하다.
해당 옵션을 사용해도 ec2에서도 실행되고 mac os에서도 실행은 된다.
+ docker images 명령어를 이용하여 생성된 이미지를 확인할 수 있다.
1-5. Docker 허브에 이미지 업로드하기
# docker push [DockerHub Id]/[image 파일명]
docker push philip2767/demo
이제 모든 준비는 끝이 났으니
2. AWS EC2에서 Docker 설정하기
2-1. Docker 이미지 다운로드(생략 가능)
# 도커 이미지를 다운로드 해줍니다.
sudo docker pull [dockerHub Id]/[이미지명]
2-2 명령어를 입력하면 해당 도커 이미지가 로컬환경에 없을 경우 자동으로 허브에서 다운로드하므로 생략해도 무방합니다.
2-2. Docker 컨테이너 실행하기
# 명령어
# docker run -d -p [로컬 port]:[도커 port] [dockerHub ID]/[이미지명]
sudo docker run -d -p 8080:8080 philip2767/demo
옵션 설명
- -d (--detach) : 백그라운드 실행
- -p : 실행할 포트 설정
- 예를 들어 -p 8888:7777 의 경우 pc에서는 8888 포트로 실행되고, docker에서는 7777 포트에서 실행된다.
즉, localhost:8888로 접속 시 docker의 7777 포트로 연결된다. (도커 내부에도 따로 포트번호가 존재함)
- 예를 들어 -p 8888:7777 의 경우 pc에서는 8888 포트로 실행되고, docker에서는 7777 포트에서 실행된다.
이 외에도 다양한 옵션이 존재하니 다음 공식문서를 참조하세요.
2-3. 컨테이너 실행 확인
# Docker 실행중인 컨터이너 확인
sudo docker ps
# Docker 모든 컨테이너 확인 (정지된것도 포함)
sudo docker ps -a
2-4. EC2 접속해보기
hello world가 정상적으로 출력된다.
728x90
'개발일지 > 돌픽' 카테고리의 다른 글
Docker + Github Actions로 SpringBoot CI/CD 구축하기 (0) | 2023.06.08 |
---|---|
Spring boot 쿼리파라미터 Dto 사용하기 (@ModelAttribute) (2) | 2023.05.23 |
spring-boot Cache-Control 설정으로 부하 줄이기 (0) | 2023.05.19 |
ImgBB API 이용해보기 (0) | 2023.05.17 |
Spring-boot 파일 업로드 - 공식문서 따라하기 ! (0) | 2023.05.12 |