2023.12.28 - [CI,CD] - [CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치
1. Docker로 프로젝트 배포
아래의 샘플 프로젝트를 배포함 (application.yml에서 url, username, password 를 삭제 -> 환경변수로 추가할 것)
https://github.com/Engineering-Student-An/CI-CD-sampleProject
1-1. Gradle 빌드하여 jar 파일 생성
- 우측 탭의 Gradle > Tasks > build > assemble 클릭
- 프로젝트 > build > libs > 프로젝트 이름-0.0.1-SNAPSHOT.jar 파일 생성 확인
1-2. Docker 파일 생성 및 푸시
- 프로젝트 우클릭 > New > Dockerfile 클릭
- Dockerfile에 아래 코드 붙여넣기
FROM gradle:8.5-jdk21-alpine as builder
WORKDIR /build
# 그래들 파일이 변경되었을 때만 새롭게 의존패키지 다운로드 받게함.
COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true
# 빌더 이미지에서 애플리케이션 빌드
COPY . /build
RUN gradle build -x test --parallel
# APP
FROM openjdk:21-slim
WORKDIR /app
# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/[생성된 jar 파일 이름 (ex : ci-cd-practice-0.0.1-SNAPSHOT.jar)] .
EXPOSE 8080
# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [ \
"java", \
"-jar", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Dsun.net.inetaddr.ttl=0", \
"[생성된 jar 파일 이름]" \
]
- Dockerfile을 깃허브에 푸시
1-3. EC2 인스턴스 접속과 빌드
- 터미널로 EC2 인스턴스 접속
2023.12.28 - [CI,CD] - [CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치
- cicd 디렉토리 생성 후 이동
mkdir cicd
cd cicd
- 깃허브에서 프로젝트 clone 받고 이동
git clone [깃허브 리포지토리 주소]
clone 할 리포지토리 주소
- clone 받은 프로젝트로 이동 후 build
cd CI-CD-sampleProject
docker build -t [프로젝트 이름 소문자로!] .
ERROR: permission denied while trying to connect to the Docker daemon socket 에러 발생 시 해결방법
더보기
아래의 코드를 순서대로 붙여넣어 실행
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
- build 완료 확인
docker images -a
1-4. EC2 인스턴스에서 프로젝트 실행
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL=jdbc:mysql://[RDS의 엔드포인트]:[DB 포트번호]/[사용할 DB 이름] \
-e SPRING_DATASOURCE_USERNAME=[마스터 사용자 이름] \
-e SPRING_DATASOURCE_PASSWORD=[마스터 사용자 비밀번호] \
-d [프로젝트 이름]
- -d : 데몬으로 실행 (데몬으로 실행하지 않고 로그를 보고 싶다면 -d 만 제거하면 가능)
실행이 완료되면 아래와 같이 출력됨
- 실행중인 컨테이너 확인
docker ps
1-5. 배포 완료 및 확인
- 주소창에 [EC2 인스턴스의 퍼블릭 IPv4 DNS:포트번호] 입력하여 배포 확인
- 배정받은 주소로 로컬이 아닌 다른 기기로도 접속 가능함
2. 프로젝트 배포 중단
2-1. 배포 중단하고자 하는 컨테이너의 ID를 찾음
docker ps
2-2. 컨테이너 중지 (둘 중 하나)
docker stop [컨테이너 ID]
docker kill [컨테이너 ID] # 강제 중지
- 중지 확인 (docker ps) : 실행중인 컨테이너가 없음을 확인
- 중지확인 (docker ps -a) : 중지된 컨테이너까지 확인
2-3. 컨테이너 삭제
docker rm [컨테이너 ID]
2-4. 배포 중단
- 배정받은 URL로 접속해도 사이트에 연결할 수 없음
'DevOps > CI,CD' 카테고리의 다른 글
[CI/CD] Spring 프로젝트 AWS CodePipeline 사용한 배포 자동화 적용 방법 (0) | 2024.11.12 |
---|---|
[CI/CD] CI/CD 파이프라인 구축 (Github Actions) + 코드 수정으로 CI/CD 확인 (1) | 2023.12.28 |
[CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치 (0) | 2023.12.28 |
[CI/CD] AWS EC2 인스턴스 생성 방법 (0) | 2023.12.28 |
[CI/CD] AWS RDS 생성 방법 + MySQL 워크벤치와 연동 (0) | 2023.12.27 |