1. 프로젝트 루트에 Dockerfile 생성

FROM eclipse-temurin:21-jre-alpine
ENV TZ=Asia/Seoul
RUN apk add --no-cache tzdata
RUN addgroup -S spring && adduser -S spring -G spring
COPY build/libs/*.jar app.jar
USER spring:spring
ENTRYPOINT ["java", "-Duser.timezone=Asia/Seoul", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

Dockerfile의 역할

Docker에게 Dockerfile만 던져주면, 알아서 OS를 깔고, Java를 깔고, 파일을 복사하고, 실행 준비까지 해준다.

개발을 하다 보면 로컬에서는 잘 실행되는데, 배포한 EC2 서버에서는 에러가 나는 경우가 있다. (보통 Java 버전이 다르거나 OS 설정이 달라서)

⇒ Dockerfile은 내 코드가 실행되기 위해 필요한 환경(리눅스 OS, Java 21)을 통째로 진공 포장해버린다. 따라서 이 Dockerfile만 있다면, 맥북에서든, 윈도우에서는 100% 똑같이 동작한다.

2. Docker Hub Repository 생성

public 레포로 만들 경우 직접 만들지 않아도 된다.

3. AWS EC2 인스턴스 생성

Ubuntu user name = ubuntu

  1. AWS 콘솔에서 EC2 인스턴스를 생성한다.

EC2(Ubuntu)에 Docker 설치

# 1. 설치 전 준비 (이전 버전 지우기) - 이전에 깔았던 적이 있다면
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

# 2. Docker 리포지토리 설정
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

*sudo apt update*

# 3. Docker Engine 및 플러그인 설치
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 4. 설치 확인 및 테스트
sudo systemctl status docker
sudo docker run hello-world

4. GitHub Actions : workflow 연결

깃허브 리포지토리에 Secret 키 생성 (변수 총 5개)

  1. DOCKER_PASSWORD (도커 허브 계정 비밀번호)
  2. DOCKER_USERNAME (도커 허브 계정 유저이름)
  3. EC2_HOST (EC2 DNS 주소)