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% 똑같이 동작한다.
public 레포로 만들 경우 직접 만들지 않아도 된다.
Ubuntu user name = ubuntu
AMI → Ubuntu Server TLS
키 페어 생성 (유형 → ED25519)
키 페어 다운로드 후 권한 변경하기
SSH가 보안상 UNPROTECTED PRIVATE KEY FILE에러를 내며 접속 거부. → 나만 읽을 수 있게 권한 바꾸자.
icacls "%USERPROFILE%\.ssh\<키 페어 이름>.pem" /inheritance:r
icacls "%USERPROFILE%\.ssh\<키 페어 이름>.pem" /grant:r"%USERNAME%:R"
네트워크 설정
보안 그룹 생성
스토리지 구성 (20 GiB)
탄력적 IP 할당 및 연결
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
깃허브 리포지토리에 Secret 키 생성 (변수 총 5개)
도커 허브 계정 비밀번호)도커 허브 계정 유저이름)EC2 DNS 주소)