Etc

Dockerλ₯Ό μ΄μš©ν•˜μ—¬ Spring Boot 배포해보기

sssbin 2023. 12. 30. 19:57

| μ‹€μŠ΅ ν™˜κ²½: MacOS, M1

🐳 Dockerλž€?

  • λ‘œμ»¬μ—μ„œ μ„œλ²„μ— 올릴 λ•Œ 문제 λ°œμƒ β‡’ 도컀 탄생!
    • 각쒅 λ””νŽœλ˜μ‹œ μ„€μ •μ˜ λ²ˆκ±°λ‘œμ›€
    • λ””νŽœλ˜μ‹œλ“€μ˜ 버전 뢈일치 문제
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ νŒ¨ν‚€μ§• ν•  수 μžˆλŠ” 툴
    • μ»¨ν…Œμ΄λ„ˆμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ + μ‹œμŠ€ν…œ 툴 + ν™˜κ²½ μ„€μ • + λ””νŽœλ˜μ‹œλ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ μ–΄λ””μ—μ„œλ‚˜ μ‰½κ²Œ λ°°ν¬ν•˜κ³  μ•ˆμ •μ μΈ ꡬ동을 도와쀀닀.
  • ꡬ성 μš”μ†Œ
    • Dockerfile - μ»¨ν…Œμ΄λ„ˆλ₯Ό μ–΄λ–»κ²Œ λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ μ„€λͺ…μ„œ
    • Image - μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ μ½”λ“œ, λŸ°νƒ€μž„, ν™˜κ²½, μ‹œμŠ€ν…œ 툴, μ‹œμŠ€ν…œ 라이브러리 등이 포함
    • Container - Imageλ₯Ό 고립된 ν™˜κ²½μ—μ„œ κ°œλ³„μ μΈ μ‹œμŠ€ν…œ μ•ˆμ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” 곡간

πŸ”Œ 배포 μ‹€μŠ΅

1. Docker μ„€μΉ˜

2. DB μ„€μ •

  • application.properties 파일 β†’ db μ£Όμ†Œ λ°”κΏ”μ£ΌκΈ°

    • RDSλ₯Ό μ“°λ©΄ μ’‹μ•˜κ² μ§€λ§Œ,, 일단 μ—°μŠ΅μš©μ΄κΈ° λ•Œλ¬Έμ— λ‚΄ IP μ£Όμ†Œλ₯Ό 넣어쀬닀.

      ⭐️ host.docker.internalλ₯Ό μ“°λ©΄ λœλ‹€κ³  함.

3. Jar 파일 생성

  • ν”„λ‘œμ νŠΈ μ—΄κΈ° β†’ Gradle β†’ build β†’ bootJar

4. Dockerfile

  • ν”„λ‘œμ νŠΈ μ΅œμƒλ‹¨μ— Dockerfile 생성

      FROM openjdk:17
      ARG JAR_FILE=build/libs/*.jar
      COPY ${JAR_FILE} app.jar
      ENTRYPOINT ["java","-jar","/app.jar"]
    • FROM - 베이슀 이미지λ₯Ό 지정

    • ARG - λ³€μˆ˜ μ„ μ–Έ

    • COPY - 이미지 생성 μ‹œ 파일 볡사

    • ENTRYPOINT - μ»¨ν…Œμ΄λ„ˆμ˜ μ–΄ν”Œ 지정

      ⭐️ jar κ²½λ‘œκ°€ λ‹€λ₯΄λ‹€κ±°λ‚˜.. μžλ°” 버전이 μ•ˆ λ§žλŠ”λ‹€κ±°λ‚˜.. λ“±λ“± ν•˜λ©΄ μ‹€ν–‰ν•  λ•Œ 였λ₯˜λ‚œλ‹€!

  • ν„°λ―Έλ„μ—μ„œ DockerFile이 μžˆλŠ” 경둜둜 이동 ν›„ Dockerfile μ‹€ν–‰

      $ docker build --tag <이름>:<νƒœκ·Έ> .

    Apple Chip μ‚¬μš©μ€‘μΈ 경우 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰..ν•˜λΌκ³ λŠ” ν•˜μ§€λ§Œ 이제 μ•ˆ 해도 λ˜λŠ” λ“―..? 일단 λ‚œ 함..

      $ docker build --platform linux/amd64 --build-arg DEPENDENCY=build/dependency --tag <이름>:<νƒœκ·Έ> .

  • docker images β†’ λ§Œλ“  이미지 λ³Ό 수 있음

4. DockerHub둜 Push

  • 둜그인

      $ docker login
  • push

      $ docker push <이름>:<νƒœκ·Έ>

5. 배포

  • μ‹€ν–‰

      $ docker run -p 8080:8080 <이름>:<νƒœκ·Έ>
    • -i : μ»¨ν…Œμ΄λ„ˆμ™€ μƒν˜Έμ μΈ λͺ¨λ“œλ‘œ μ‹€ν–‰ β†’ ν‘œμ€€μž…λ ₯(stdin)을 μ—΄μ–΄λ†“λŠ”λ‹€.
    • -t : 터미널을 ν• λ‹Ήν•˜λ©°, 터미널 μž…λ ₯을 받을 수 있게 ν•œλ‹€. (μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우 λͺ…λ Ή μž…λ ₯은 κ°€λŠ₯ν•˜μ§€λ§Œ μ‰˜μ— ν‘œμ‹œ X)
    • -p 8080:8080 : 호슀트의 8080 포트λ₯Ό μ»¨ν…Œμ΄λ„ˆμ˜ 8080 포트둜 맀핑. ν˜ΈμŠ€νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆ κ°„μ˜ 포트 ν¬μ›Œλ”© μ„€μ •
  • ν…ŒμŠ€νŠΈ

β˜„οΈ νŠΈλŸ¬λΈ” μŠˆνŒ…

  • μ‹€ν–‰ν–ˆλŠ”λ° μŠ€ν”„λ§λΆ€νŠΈ μ˜¬λΌκ°€κ³  μ—λŸ¬κ°€ λ–΄λ‹€.

    • <문제> SQLException: Access denied for user


    • <ν•΄κ²°> DB μ ‘κ·Ό κΆŒν•œ μ„€μ •

        # μ‚¬μš©μž μΆ”κ°€
        create user 'username'@'localhost' identified by 'password';
      
        # μ‚¬μš©μž κΆŒν•œ μ„€μ •
        grant all privileges on *.* to 'username'@'localhost';

πŸ“š μ°Έκ³  자료