Today I Learned

241219 TIL / Docker로 수동배포하기

shinelee26 2024. 12. 19. 22:11

오늘 진행한 학습 요약

1. 플러스 주차 개인 과제

  • 도전기능 + 트러블 슈팅
    • 11. AWS 활용 마스터
    • 구성 과정
plus_week git-hub : https://github.com/chews26/plus_week

학습 정리

1. 플러스 주차 개인 과제

 

도전기능 + 트러블 슈팅

  • 11. AWS 활용 마스터
    • AWS + Docker + Spring Boot + intellij 환경 구성
      • 1. EC2
        • 인스턴스 1개
        • 볼륨
        • 탄력적 IP
        • 보안그룹
      • 2. VPC
        • VPC
        • 서브넷
        • 인터넷 게이트웨이
      • RDS
        • DB인스턴스 1개
      • Windows Docker
        • Image
        • Hub Repositories
      • inteliij
        • DockerFile
        • Build
        • Spring Boot Build

 


  • 구성 과정
    • 1. AWS 구성
      • EC2 인스턴스를 생성했다.
      • Os는 우분투, 프리티어로 구성했다..!
      •  처음에 스토리지를 8GiB로 설정해서 인스턴스를 생성했는데 너무 용량이 적은 것 같아 디스크 볼륨을 20GiB 추가하였다.  근데 보니까 기존볼륨도 볼륨수정해서 디스크용량을 늘릴수가 있었다 ㅠㅠ 어차피 LVS구성이 아니니 20GiB추가해도 별 의미는 없었다.. 
      • 탄력적 IP를 생성해서 외부에서도 접근가능한 공인IP(IPv4)를  인스턴스에 부여하였다.
      • windows에 wsl 구성해서 ubuntu 설치 후 ssh로 ec2에 접근했다.
      • 보안그룹은 22, 8080, 443, 80 포트에 대해 허용하였다.

      • RDS서비스로 DB 인스턴스를 생성했다.
      •  Mysql, 프리티어, 보안그룹 새로생성, 퍼블릭 액세스(네), 추가구성에서 DB이름을 작성했다. 백업은 설정하지 않았다.
      • 부여받은 엔드포인트를 sqlectron으로 접근이 가능한지 테스트 해보니 잘되어서 성공! 근데 새로고침이 없어서 불편하니 dbeaver등 다른것을 이용하는게 좋을 것 같다.
      • plus 스키마를 사용할것이기 때문에 해당 테이블을 추가해주었다.
      • EC2 인스턴스를 연결해주었다.
      • 파라미터그룹도 설정해주었다 (참고사이트)
    • 2. Windows 용 Docker 설치
      • 나는 Windows 데스크탑을 사용중이므로 Windows용 Docker Desktop을 설치했다.
      • 아이디가 없으면 회원가입하면 된다. 나는 기존 아이디 사용했다.
      • Docker 설치하면 로그오프되니까 주의!
      • https://www.docker.com/
    • 3. intellij 수정 및 Docker Image 구성
      • DockerFIie을 작성해야한다. 나는 아래와 같이 작성하였다.
      • # 파일 이름 : Dockerfile
        # 아래는 본인 환경에 맞게 수정
        
        FROM eclipse-temurin:17-jdk-alpine
        WORKDIR /app
        EXPOSE 8080
        ADD ./build/libs/*.jar app.jar
        ENTRYPOINT ["java", "-jar", "app.jar"]

      •  그리고 운영환경에서 사용하는 application-prod.properties를 수정했다.
      • AWS에서 부여받은 DB엔드포인트 주소와 해당 DB의 아이디와 비밀번호를 입력한다.
      • spring.application.name=demo
        spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
        spring.datasource.url=jdbc:mysql://{AWS DB엔드포인트}:3306/plus
        spring.datasource.username={DB 아이디}
        spring.datasource.password={DB 비밀번호}
        
        spring.jpa.show-sql=true
        spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
        
        # create, update, none, creat-drop
        spring.jpa.database=mysql
        spring.jpa.hibernate.ddl-auto=update
        spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
        spring.jpa.generate-ddl=true
        spring.jpa.properties.hibernate.format_sql=true
        spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
        
        management.endpoints.web.base-path=/
        management.endpoint.health.show-details=always
      • 그리고 Spring에 대해서 Build를 진행한다!
        • 나는 사용한 JDK버전이랑 Build.gradle에 작성된 버전이 달라서 배포 후 에러가 발생했었다 ㅠㅠ 확인 필요!
      • 나는 Gradle을 사용하므로 그냥 Build버튼 눌러서 Build했다.
      •  Build가 완료되었으면 intellij에서 터미널 열어서 일단 docker에 로그인 한다. 그럼 데스크탑에 설치된 도커랑 알아서 연동된다.
      • Docker로 우리가 작성한 프로젝트에 대해 Image를 만들어야한다. build 명령어를 사용하면 된다.
      • 그리고 만든 이미지를 push -> docker repository에 올려서 다른 환경에서 내려받을 수 있도록 하면 된다.
      • 도커 데스크탑 -> Images -> Hub Respositories 에 제대로 올라갔는지 확인하면 된다.
      • # 도커에 로그인
        docker login
        
        # / 앞에는 본인 아이디
        # / 뒤에는 Image 이름
        # :latest 는 태그로 1.0.0같이 작성해서 본인이 태그를 직접 관리해도 된다.
        docker build -t chews26/plus-week:latest .
        
        # 도커 푸쉬
        docker push chews26/plus-week:latest
    • 4. ec2에 docker Image pull 및 run
      • 구성한 ec2에 다시 접근한다. 아래 명령어를 실행한다.
      • # docker 설치 및 구성 
        sudo apt update
        sudo apt install -y docker.io
        sudo systemctl start docker
        sudo systemctl enable docker
        sudo usermod -aG docker ubuntu
        
        # 설치 확인
        docker -v
        sudo systemctl status docker
        
        # docker에 로그인
        docker login
        
        # 선택
        # mysql-server 설치
        sudo apt install mysql-server
        
        # 선택 (mysql-server 등이 설치 안되면 접근불가)
        # RDS서버에 접근
        mysql -u admin -p -h {DB엔드포인트}
      • docker repository에서 docker image를 가져온뒤 docker 이미지를 run 한다
      • # 이미지 pull하기
        docker pull chews26/plus-week:latest
        
        # 이미지 확인
        docker images
        
        # 가져온 이미지 run하기
        docker run -d -p 8080:8080   -e SPRING_PROFILES_ACTIVE=prod   chews26/plus-week:latest
        
        # 실행 결과 확인하기
        docker ps
      • docker ps로 잘 실행이 되고 있으면 된다!
      • 서버 public IP랑 작성한 path들로 잘 접근이 되면 성공이다!!