[Docker] Docker를 활용해 AWS EC2에 배포해보기 (Spring Boot)

조성우·2024년 4월 29일
1

AWS

목록 보기
3/7
post-thumbnail

1. 로컬(Mac) & EC2(Linux)에 Docker 설치


1.0. Docker Hub 회원 가입

Docker Hub 링크


1.1. Mac에 Docker 설치

Docker Desktop 설치 링크

Docker Desktop 설치 후 실행하여 기본적인 설정 완료하기 !


1.2. Linux에 Docker 설치

  • 패키지 업데이트
sudo yum update -y
  • Docker 설치
sudo yum install docker
  • Docker 버전 확인
docker -v
  • Docker 실행
sudo service docker start
  • ec2-user 사용자를 docker 그룹에 추가 (docker 권한 부여)
sudo usermod -aG docker ec2-user

이제 Docker Image를 생성해 Docker Hub에서 가져와 EC2에서 실행할 수 있는 환경이 만들어짐



2. 로컬에서 Docker 설정 & Image 생성


2.1. Spring Boot Project - Dockerfile 생성

Your-Spring-Project/Dockerfile

# Dockerfile

# JDK Image Start
FROM openjdk:21

# 인자 설정 - JAR_File
ARG JAR_FILE=build/libs/*.jar

# jar 파일 복제
COPY ${JAR_FILE} app.jar

# 실행 명령어
ENTRYPOINT ["java", "-jar", "app.jar"]

※ Dockerfile 지시어 참고


2.2. Gradle 빌드

./gradlew clean bootJar

gradlew clean: 이전 빌드 결과물 삭제
gradlew bootJar: 실행가능한 jar를 빌드 (plain jar 생성 X)

plain jar 파일 생성을 막기 위한 방법으로 build.gradle에 아래의 설정을 추가하는 방법도 있음

jar {
    enabled = false
}

2.3. Docker 로그인

도커 허브에 업로드 하기 전 로그인을 수행

docker login -u [username]
[password]

2.4. Docker Image 생성

# 기본 커맨드
# -t: 태그 설정 (생략 시 'latest')
# docker build -t [DockerHub ID]/[이미지명]:[태그명] [DockerFile 위치]

# 애플 실리콘 맥 사용 시 linux/arm64로 만들어지기 때문에 --platform linux/amd64를 추가해야 함
docker build --platform linux/amd64 -t zosungwoo/demo .

이후 docker images 명령어를 통해 생성된 이미지를 확인할 수 있음


2.5. Docker Hub에 Docker Image 업로드

# docker push [DockerHub Id]/[image 파일명]
docker push zosungwoo/demo

추가로 public은 안전하지 않을 것 같다고 생각해 DockerHub Repository - Settings - Visibility settings에서 private으로 변경하였음 (로그인 후 pull 가능)



3. AWS EC2에서 Docker 설정


3.1. Docker Image 다운로드

docker pull [dockerHub Id]/[이미지명]

3.2. Docker 컨테이너 실행

# 기본 커맨드
# -d: detach mode (백그라운드로 실행됨)
# -p: 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출하기 위해 사용
# docker run -d -p [호스트 port]:[컨테이너 port] [DockerHub ID]/[이미지명]
# : Docker Image를 실행한 형태인 컨테이너로 만드는 명령어

docker run -d -p 8080:8080 zosungwoo/demo

이미 한 번 이미지를 컨테이너화 했을 때, docker run 명령어를 다시 사용하면 안 됨
docker run의 경우 Docker Hub에서 해당 이미지를 pull & 컨테이너화하는 작업이기 때문에, docker ps -a를 사용해보면 같은 이미지가 여러 개 생성되어 있는것을 확인 할 수 있음
-> 따라서 이미 컨테이너가 존재한다면 docker start [컨테이너명 or ID] 로 실행


3.3. 실행 중인 Docker 컨테이너 확인

# 실행중인 컨테이너 확인
docker ps

# 모든 컨테이너 확인
docker ps -a

정리

Dockerfile을 Build해서 Docker Image를 생성함
• Docker Image 파일을 Docker Hub에 Push
• 서버(AWS EC2)에서 Docker Hub에 Push된 Docker Image를 Pull로 받아옴
docker run 명령어를 통해 Docker Image 파일을 실행함

0개의 댓글