+
전체적인 순서
두 명이서 작업을 했기에 상대의 레포지토리에 fork해온 것부터 기준으로 하겠다.
스프링부트 파일 작성 및 확인 → 도커파일 작성 → jar 파일 생성 → 도커 이미지화 → ecr에 푸쉬
깃허브 관리 + jar 파일 + dockerfile 이미지 만들기
상대가 레포지토리를 만들었다. 그럼 나는 먼저 상대의 레포지토리를 내 레포지토리로 fork해와야 한다.
이렇게 상대의 레포지토리를 보면
fork라는 버튼이 있다. 누르면 내 레포지토리로 끌어올 수 있다.
포크하고 나서 확인해보면 이렇게 두 개의 브랜치로 나눈 것을 확인할 수 있다.
develop 브랜치는 개발 진행하는 과정이고 master는 배포용이다.
아직 개발단계이므로 develop 브랜치에서 진행하도록 하겠다.
git bash를 킨 후 cd Desktop으로 이동 후
git clone "포크한 레포지토리 url"
을 입력해주면
이렇게 파일이 하나 생긴다. 이제 intelliJ에 들어가서 파일을 열어준다.
이렇게 파일이 열렸으면 터미널을 키고 모든 작업은 intelliJ에서 수행하겠다.
git remote add upstream "원본 저장소의 레포지토리 url"
git clone은 단순히 코드만 가져오는거고 이 명령어를 통해 상대의 원격 저장소와 연결한다.
git pull upstream develop
만약 원본 저장소의 변경이 있었다면, 위의 명령어를 통해서 원본 저장소의 특정 브랜치의 변경사항을 가져와서 반영할 수 있다.
fetch 명령어 또한 많이 쓰이는데 좀 다르다.
pull 과 달리 merge는 진행하지 않고 원본 저장소의 변경사항만 가져온다. 따라서 소스코드 자체가 병합되지는 않고 기존에 가지고 있던 코드와 비교를 할 수 있다.
이제 jar 파일을 생성해보자.
intelliJ의 오른쪽의 코끼리 버튼을 누른 후 Tasks → build → bootJar을 누르면 jar 파일이 생성된다.
파일은 libs 안에서 확인할 수 있다.
jar 파일까지 생성해보았다. 생각보다 쉽다.
다음으로 파일 안에 Dockerfile이라는 도커파일을 만들자.
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- FROM → Docker 이미지의 기반 설정. 여기선 OpenJDK 17 JDK가 설치된 공식 Docker 이미지를 사용한다는 뜻이다.
- ARG → Dockerfile에서 사용할 수 있는 빌드 인수를 정의한다. 이 코드에선 JAR 파일의 경로를 지정하기 위한 것이다.
- COPY → 컨텍스트에서 지정한 파일을 Docker 이미지의 파일 시스템에 복사한다. {JAR_FILE}의 값은 build/libs/*.jar로 설정되어 있으며, 이 경로에 맞는 JAR 파일이 컨테이너의 app.jar로 복사된다.
- ENTRYPOINT → 컨테이너가 시작될 때 실행할 기본 명령어이다. 여기서는 java -jar /app.jar 명령어를 설정하여, 컨테이너가 시작될 때 Java 애플리케이션을 실행하도록 한다.
이제 이 도커파일을 실행시켜서 이미지를 만들어보자.
docker build -t spring-aws .
이 명령어를 통해 도커파일을 생성한 후 docker images를 통해 이미지가 잘 만들어졌는지 확인해보면 된다.
spring-aws라는 이름의 이미지가 생성된 것을 확인할 수 있다.
docker run -d -p 8080:8080 spring-aws
이를 통해 이미지가 컨테이너화 되어 작동하는지 확인한다.
추후에 계속 jar 파일 업데이트를 통해 스프링 부트 프로젝트를 이어나갈 것이다.
ECR에 도커 이미지 저장
지금부터 AWS를 활용하여 도커 이미지를 원격 ECR 레포에 저장해볼 것이다.
먼저 내 IAM 계정에 액세스 키를 생성하여 AWS와 연결할 수 있도록 하겠다.
IAM → 사용자 → 사용자 선택 → 보안 자격 증명에 들어가서 액세스 키를 받아줘야 한다.
액세스 키를 받는 이유는 인증, 권한 부여, 보안 등의 이유가 있다.
나는 전에 IAM 계정에 AdminAccess 권한을 주었으므로 액세스 키만 따로 생성했다.
액세스 키와 비밀번호는 잊어버리지 않도록 따로 파일에 보관해놓는 습관을 가지자.
이제 ECR로 돌아와서 프라이빗 리포지토리를 생성해준다.
리포지토리 이름은 내가 추가로 설정해주면 된다.
리포지토리를 생성하면 ECR - Repositories에서 확인 가능하다.
프라이빗 리포지토리를 생성했으니 이제 도커 이미지를 안에 넣어주기만 하면 이번 시간에 할 일은 끝이다.
위에서 AWS CLI 접근용 키를 발급 받았으니 로컬 터미널에서
aws configure
위 명령어를 실행한 후 액세스 키, 시크릿 키, 리전을 설정한다.
이제 ECR Registry에 image를 push할건데 aws cli에서 레지스트리에 대한 접근 인증을 받아야한다. 아래 명령어 실행
aws ecr get-login-password --region ${사용자 리전} | docker login --username AWS --password-stdin ${ecr uri}
이후에 빌드한 도커 이미지에 아래 명령어를 통해 태그를 붙여서 레포지토리에 push가 가능하도록 한다.
docker tag ${위에서 생성한 도커 이미지 이름} ${ecr url} / ${ecr repository 이름}:${버전 정보}
마지막으로 이미지를 ECR 레포지토리로 push한다.
docker push ${ecr url} / ${ecr repository 이름} : ${버전 정보}
'Cloud > AWS' 카테고리의 다른 글
[AWS] ALB와 오토스케일링 사용 실습 -1 (7) | 2024.12.17 |
---|---|
[AWS] DockerHub + EC2를 활용하여 간단하게 배포하기 (46) | 2024.08.05 |
[AWS] EFS 실습 (with EC2, VPC) (39) | 2024.06.28 |
VPC 간 통신 및 인터넷 접속을 위한 AWS 구성 요소의 역할과 설정방법 (31) | 2024.05.31 |
AWS 전체적인 용어 정리 (0) | 2024.05.20 |