MapleStory Finger Point

โšช DevOps/๐Ÿ”ต Docker

[Docker] Docker ์—์„œ Spring Boot + MySQL ํ”„๋กœ์ ํŠธ ์‹คํ–‰ (+ Compose ์‚ฌ์šฉ)

HYEJU01 2025. 4. 5. 01:41
 

๋ชฉ์ฐจ

 

     

     

     

    Spring Boot ํ”„๋กœ์ ํŠธ Docker์—์„œ ์‹คํ–‰์‹œํ‚ค๊ธฐ

     

     

    โœ… SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ค€๋น„ํ•ด์ค€๋‹ค.

     

     

     

     

     

     

    โœ… ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ Docker ๋กœ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š”  ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. 

    ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ• > Dockerfile ์ƒ์„ฑํ•˜๊ธฐ

    ์ƒ์„ฑํ•˜๊ธฐ์ „์— ๊ผญ!

     

    `./gradlew clean build ` ๋ช…๋ น์–ด๋กœ ๋นŒ๋“œ

     

     

     

     

     

     

     

    โœ… Dockerfile ์ƒ์„ฑ

     

    `FROM openjdk:17-jdk` ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋Š” ์Šคํ”„๋งํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ jdk ์œผ๋กœ ์„ธํŒ…

     

    COPY ๋นŒ๋“œํ•œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌ ํ›„ ์ปจํ…Œ์ด๋„ˆ์—์„œ jar ์‹คํ–‰ 

     

    app.jar ์€ ์ƒ๋Œ€๊ฒฝ๋กœ์ธ ์ƒํƒœ /app.jar ์€ ์ ˆ๋Œ€๊ฒฝ๋กœ

     

    ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์—๋Š” jar ํŒŒ์ผ์„ jdk ๋กœ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๋ช…๋ น์–ด ์ž…๋ ฅ 

     

    ์šฐ๋ฆฌ๋Š” ์ฆ‰, build ํŒŒ์ผ์„  ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์œผ๋กœ ๋ณต์‚ฌํ•ด์˜ฌ๊ฒƒ์ด๋‹ค

    ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ jar ์„ ์‹คํ–‰ํ• ๊ฑฐ์ž„

     

     

     

     

     

     

     

     

    โœ…๋นŒ๋“œ > ์‹คํ–‰

     

     

     

     

     

    โœ… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด์ž 

    ํ”„๋กœ์ ํŠธ ํฌํŠธ๋ฒˆํ˜ธ(8989)๋ž‘ ์—ฐ๊ฒฐ์‹œ์ผœ์ค„ ๊ฒƒ์ด๋‹ค. `docker run -d -p 8989:8989 hello-server`

    ์ž˜ ์‹คํ–‰๋œ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด spring-boot ์—์„œ ๋ณด๋˜ ๋กœ๊ทธ์ฐฝ๊ณผ ๋™์ผํ•จ

     

     

     

    โœ…  ์ž˜ ์ ‘์† ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

     

     

     

    Spring Boot ํ”„๋กœ์ ํŠธ Docker์—์„œ ์‹คํ–‰์‹œํ‚ค๊ธฐ (Docker Compose ์‚ฌ์šฉ)

     

     

    โœ… compose.yml ํŒŒ์ผ ์ƒ์„ฑ

    ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€๊ธฐ๋ฐ˜ (๋„์ปคํŒŒ์ผ ์œ„์น˜๊ฒฝ๋กœ,  ์ƒ๋Œ€๊ฒฝ๋กœ) . ์€ ๊ฐ™์€ ์œ„์น˜์ด๊ธฐ ๋•Œ๋ฌธ

     

     

     

     

    โœ… `--build` ๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค

    build ์— ์žˆ๋Š” ์ด๋ฏธ์ง€ = jar ํŒŒ์ผ ๋ฐ”๋€” ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์—
    ์ฆ‰ build ๋ฅผ ๊ณ„์† ์ƒˆ๋กœ ํ•ด์ค˜์•ผํ•จ

     

     

     


     

     

     

    MySQL  ์ปจํ…Œ์ด๋„ˆ Compose ๋กœ ๋„์šฐ๊ธฐ

     

     

     

     

    • mysql_data ํด๋”์—์— ๊ณต์œ  <-> /var .. ํด๋”์™€ ๊ณต์œ  
    • ์ปดํฌ์ฆˆ ํŒŒ์ผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ ์„ค์ • ๊ฐ€๋Šฅ (ํŽธ๋ฆฌ)

     

     

     


     

     

    Spring Boot  + MySQL  ์ปจํ…Œ์ด๋„ˆ Compose ๋กœ ๋™์‹œ์— ๋„์šฐ๊ธฐ

     

     

     

     

    โœ… compose.yml ํŒŒ์ผ ์ƒ์„ฑ

    services:
      my-server:
        build: .
        ports:
          - 8080:8080
        depends_on:
          my-db:
            condition: service_healthy  
    
        my-db:
          image: mysql
          environment:
            MYSQL_ROOT_PASSWORD: pwd1234 #์ง€์ •ํ•ด์ค€ pwd
            MYSQL_DATABASE: mydb # ์ดˆ๊ธฐ ์ด๋ฆ„ ์ง€์ • (ํ™˜๊ฒฝ๋ณ€์ˆ˜)
          volumes:
            - ./mysql_data:/var/lib/mysql
          ports:
            - 3306:3306
          healthcheck: 
            test : ["CMD", "mysqladmin", "ping"] # ์ด ๋ช…๋ น์–ด๊ฐ€ ์ž‘๋™ํ•˜๋ฉด "mysql ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ping ๋ณด๋ƒ„"
            interval: 5s # ์ฃผ๊ธฐ๋ฅผ 5์ดˆ๋งˆ๋‹ค ์ฒดํฌ
            retries: 10 #์žฌ์‹œ๋„๋Š” 10๋ฒˆ๊นŒ์ง€ ์žฌ์‹œ๋„ํ•œ๋‹ค.

     

     

     

    โœ…  ์ด๋•Œ !! db ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ์Šคํ”„๋ง๋ถ€ํŠธ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ์Œ.

     

    db ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก! ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•จ

     

     

     

     

     

    โœ…  but . ์‹คํ–‰์‹œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์—ˆ๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ์ด์œ ??

     

     

    • ๊ฐ๊ฐ ์ปจํ…Œ์ด๋„ˆ : ๋„คํŠธ์›Œํฌ๋ง / IP ์ฃผ์†Œ๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ง
    • host ์ž…์žฅ :  localhost ๋Š” ๋ณธ์ธ ์ปดํ“จํ„ฐ๋ฅผ  ๊ฐ€๋ฆฌํ‚ด
    • ์Šคํ”„๋ง๋ถ€ํŠธ   ์ปจํ…Œ์ด๋„ˆ  ์ž…์žฅ : localhost ๋Š” ๋ณธ์ธ ์ปดํ“จํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ด (๊ฐœ๋ณ„ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— 3306 ์ธ์‹ ๋ถˆ๊ฐ€)

     

    mysql db ์ •๋ณด์— localhost:3306 ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

    ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—๋Š” 3306 ํฌํŠธ๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— ์ ‘์†์„ ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ ์ด๋‹ค.

    ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•ด์•ผํ• ๊นŒ???

     

     

     

    โœ…  compose ์— ์ •์˜ํ•ด๋‘” ์„œ๋น„์Šค๋ช…์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋œ๋‹ค. โญ

     

    ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ ์—์„œ ์ ํžŒ my-db ๋ฅผ docker ๊ฐ€ ์ธ์‹์„ ํ•ด์„œ my-db ํฌํŠธ๋ฅผ ์ฐพ์•„๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด์ค€๋‹ค.

    ์ฆ‰ , mysql ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ (ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ์ฃผ์†Œ์˜ IP์™€ ๊ฐ™์€ ์—ญ ํ•˜๊ฒŒ๋จ)