ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด Docker๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?
    DevOps 2026. 7. 23. 09:18

     

    ๐Ÿ“š Docker & Kubernetes ์‹œ๋ฆฌ์ฆˆ

    ์ด์ „ ๊ธ€์—์„œ๋Š” Dockerfile์„ ์ด์šฉํ•ด Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker Image๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์•Œ์•„๋ดค๋‹ค.

    ๊ทธ๋Ÿฐ๋ฐ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋Ÿฐ ์˜๋ฌธ์ด ์ƒ๊ธด๋‹ค.

    "์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ์‹คํ–‰ ์ค‘์ธ Docker Container์—๋„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ ๊นŒ?"

     

     

    ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค.

    Docker๋ฅผ ์ดํ•ดํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์€ Docker Image๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ(Immutable) ์ด๋‹ค.

     

    ์ฆ‰, ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ธฐ์กด Image๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•œ ์ƒˆ๋กœ์šด Image๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด ๊ฐœ๋…์„ ์ค‘์‹ฌ์œผ๋กœ Docker๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

     

     


    Docker Container๋Š” Image๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค

    Docker์˜ ์‹คํ–‰ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    Spring Boot ํ”„๋กœ์ ํŠธ
            โ”‚
            โ–ผ
    Gradle Build
            โ”‚
            โ–ผ
    JAR ์ƒ์„ฑ
            โ”‚
            โ–ผ
    docker build
            โ”‚
            โ–ผ
    Docker Image ์ƒ์„ฑ
            โ”‚
            โ–ผ
    docker run
            โ”‚
            โ–ผ
    Container ์‹คํ–‰
     

    ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ Container๋Š” Docker Image๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

     

    ์ฆ‰,

    • Dockerfile์€ Image๋ฅผ ๋งŒ๋“ค ๋•Œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.
    • Container๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ Image๋ฅผ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

     

    Container๊ฐ€ ์‹คํ–‰๋œ ์ดํ›„์—๋Š” Dockerfile์ด๋‚˜ ํ”„๋กœ์ ํŠธ ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

     


    ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•ด๋„ Container๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค

    ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

    Spring Boot ํ”„๋กœ์ ํŠธ
    
    ↓
    
    Docker Image A
    
    ↓
    
    Container A ์‹คํ–‰
     

    ์ด ์ƒํƒœ์—์„œ Controller์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

     

     

    ๊ธฐ์กด ์ฝ”๋“œ

    @GetMapping("/hello")
    public String hello() {
        return "Hello Docker!";
    }
     

     

    ์ˆ˜์ • ํ›„

    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
     

    ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋”๋ผ๋„ ์‹คํ–‰ ์ค‘์ธ Container์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

    ์™œ๋ƒํ•˜๋ฉด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ Container๋Š” ๊ธฐ์กด Docker Image A๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ํ”„๋กœ์ ํŠธ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฏธ ์ƒ์„ฑ๋œ Image๋‚˜ ์‹คํ–‰ ์ค‘์ธ Container๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

     

     


    ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด?

    ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๊ณผ์ •์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

     

    1. ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
    2. ์ƒˆ๋กœ์šด Jar ์ƒ์„ฑ
    3. ์ƒˆ๋กœ์šด Docker Image ์ƒ์„ฑ
    4. ๊ธฐ์กด Container ์ข…๋ฃŒ
    5. ์ƒˆ๋กœ์šด Container ์‹คํ–‰

     

    ํ๋ฆ„์œผ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    Spring Boot ์†Œ์Šค ์ˆ˜์ •
            โ”‚
            โ–ผ
    Gradle Build
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด JAR ์ƒ์„ฑ
            โ”‚
            โ–ผ
    docker build
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด Docker Image ์ƒ์„ฑ
            โ”‚
            โ–ผ
    ๊ธฐ์กด Container ์ข…๋ฃŒ
            โ”‚
            โ–ผ
    ์ƒˆ Container ์‹คํ–‰
     

    ์ฆ‰, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด Image๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ƒˆ๋กœ์šด Container๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

     

     


    ์™œ docker build๋ฅผ ๋‹ค์‹œ ํ•ด์•ผ ํ• ๊นŒ?

    Docker๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ•˜๊ธฐ ์‰ฝ๋‹ค.

    "Container๋งŒ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?"

     

     

    ํ•˜์ง€๋งŒ docker run์€ Image๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ผ ๋ฟ์ด๋‹ค.

    Image ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒˆ๋กœ์šด Container๋ฅผ ๋งŒ๋“ค์–ด๋„ ์ด์ „ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.

     

     

    ์˜ˆ๋ฅผ ๋“ค์–ด,

    docker run my-app
     

    ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ ๊ธฐ์กด Image์ด๋‹ค.

     

     

    ๋”ฐ๋ผ์„œ ๋จผ์ € ์ƒˆ๋กœ์šด Image๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

    ./gradlew bootJar
    
    docker build -t my-app .
     

    ๊ทธ ํ›„ ์ƒˆ๋กœ์šด Image๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Container๋ฅผ ์‹คํ–‰ํ•ด์•ผ ์ˆ˜์ •๋œ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค.

     

     


    ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๋งค๋ฒˆ Build๋ฅผ ํ•˜์ง€ ์•Š์„๊นŒ?

    ๋งค๋ฒˆ Build๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” Bind Mount(๋ณผ๋ฅจ ๋งˆ์šดํŠธ) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

    Bind Mount๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ Container ๋‚ด๋ถ€๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๋ฐ˜๋ฉด ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

    ํ•ญ์ƒ ์ƒˆ๋กœ์šด Docker Image๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

     

    ์ฆ‰,

    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ → Bind Mount ๋“ฑ์„ ํ™œ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ
    • ์šด์˜ ํ™˜๊ฒฝ → ์ƒˆ๋กœ์šด Docker Image๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐํฌ

     

    ๋ผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

     

     


    ์‹ค๋ฌด์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐฐํฌํ• ๊นŒ?

    ์‹ค๋ฌด์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ docker build ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์šด์˜ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•ด ๋นŒ๋“œ์™€ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค.

    Git Push
            โ”‚
            โ–ผ
    Jenkins
            โ”‚
            โ–ผ
    Gradle Build
            โ”‚
            โ–ผ
    Docker Build
            โ”‚
            โ–ผ
    Docker Registry
            โ”‚
            โ–ผ
    Argo CD
            โ”‚
            โ–ผ
    Kubernetes
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด Pod ์ƒ์„ฑ
            โ”‚
            โ–ผ
    Health Check
            โ”‚
            โ–ผ
    ์„œ๋น„์Šค ๋ฐ˜์˜
     

    ๊ฐœ๋ฐœ์ž๊ฐ€ Git์— ์ฝ”๋“œ๋ฅผ Pushํ•˜๋ฉด Jenkins๊ฐ€ ์ž๋™์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ƒˆ๋กœ์šด Docker Image๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋Š” Docker Registry์— ์ €์žฅ๋˜๊ณ , Argo CD๋Š” ๋ณ€๊ฒฝ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ Kubernetes์— ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    Kubernetes๋Š” ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•œ ๋’ค Health Check๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๊ธฐ๋™๋œ ๊ฒƒ์ด ํ™•์ธ๋˜๋ฉด ๊ธฐ์กด Pod๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ๋กœ์šด Pod๋กœ ์„œ๋น„์Šค๋ฅผ ์ „ํ™˜ํ•œ๋‹ค.

    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ๋•๋ถ„์— ์„œ๋น„์Šค ์ค‘๋‹จ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ์•ˆ์ •์ ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     


    ์ •๋ฆฌ

    Docker์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋Š” Docker Image๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค(Immutable) ๋Š” ๊ฒƒ์ด๋‹ค.

    ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์‹คํ–‰ ์ค‘์ธ Container๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

    ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ณผ์ •์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

    ์†Œ์Šค ์ˆ˜์ •
            โ”‚
            โ–ผ
    ํ”„๋กœ์ ํŠธ Build
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด JAR ์ƒ์„ฑ
            โ”‚
            โ–ผ
    docker build
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด Docker Image ์ƒ์„ฑ
            โ”‚
            โ–ผ
    docker run
            โ”‚
            โ–ผ
    ์ƒˆ๋กœ์šด Container ์‹คํ–‰
     

    ์ฆ‰, Docker๋Š” ๊ธฐ์กด Image๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด Image๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด Container๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

    ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

     

     


    ๋‹ค์Œ ๊ธ€

    ์ง€๊ธˆ๊นŒ์ง€ Docker Image์™€ Container์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์•Œ์•„๋ดค๋‹ค.

    Docker์—์„œ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์ƒˆ๋กœ์šด Docker Image๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋„ ํ™•์ธํ–ˆ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด ๋˜ ํ•˜๋‚˜์˜ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ธด๋‹ค.

     

    "์ƒ์„ฑํ•œ Docker Image๋Š” ์–ด๋””์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ• ๊นŒ?"

     

     

    ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๋กœ์ปฌ์— ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๊ฑฐ๋‚˜ ์šด์˜ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋ ค๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    ๋‹ค์Œ ๊ธ€์—์„œ๋Š” Docker Registry๋ž€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  Docker Hub๋ฅผ ๋น„๋กฏํ•œ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์˜ ์—ญํ• ๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.