• ๐ŸณDocker์™€ ์ปจํ…Œ์ด๋„ˆ

    2023. 4. 9.

    by. @leeeun

    1. ์ปจํ…Œ์ด๋„ˆ๋ž€?

    ์†Œํ”„ํŠธ์›จ์–ด๋Š” OS์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กด์„ฑ์„ ๋›ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์—์„œ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ(OS,๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ด ๋‹ค๋ฅธ) ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•  ๋•Œ ์–ด๋ ค์›€์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  ๊ด€๋ จ๋œ ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ์ปจํ…Œ์ด๋„ˆ(Container)๋Š” ๊ฐœ๋ณ„ Software์˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ฐ˜ํ™˜๊ฒฝ ๋˜๋Š” ๋‹ค๋ฅธ ์‹คํ–‰ํ™˜๊ฒฝ๊ณผ์˜ ๊ฐ„์„ญ์„ ๋ง‰๊ณ  ์‹คํ–‰์˜ ๋…๋ฆฝ์„ฑ์„ ํ™•๋ณดํ•ด์ฃผ๋Š” ์šด์˜์ฒด๊ณ„ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ ๊ตฌ๋™ ํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ์ถ”์ƒํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฆฌ ํŒจํ‚ค์ง• ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.

    2. ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ€์ƒ๋จธ์‹ (VM)์˜ ์ฐจ์ด


    ๊ฐ€์ƒ๋จธ์‹ ๋˜ํ•œ ๋…๋ฆญ์ ‘์ธ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š”๋ฐ ์ฐจ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    - ๊ฐ€์ƒ๋จธ์‹ 

    HyperVisor๋ผ๋Š”๊ฒƒ์ด ์žˆ๋‹ค. ์ด๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋“ค์— ๋Œ€ํ•ด VM๋ณ„๋กœ ๋ฐฐ๋ถ„ ํ•˜๋Š”์—ญํ• ๋“ค์„ ํ•œ๋‹ค. ๋˜ํ•œ ๊ฐ VM์—์„œ๋Š” ๋…๋ฆฝ์ ์ธ Guest OS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    ๋”ฐ๋ผ์„œ ๋…๋ฆฝ์ ์ธ ํ”Œ๋žซํผ์„ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ฌ ๋•Œ๋งˆ๋‹ค ๋ถˆํ•„์š”ํ•œ OS๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์— ๋Œ€ํ•ด์„œ ๊ณ„์†ํ•ด์„œ ํ•ด์•ผํ•œ๋‹ค. ์ฆ‰ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์ž์›์— ๊ด€ํ•ด์„œ ์œ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌ ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ •ํ•ด๋†“๊ณ  ์‹คํ–‰ํ•˜๊ธฐ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.

    - ์ปจํ…Œ์ด๋„ˆ

    ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ Host OS์œ„์—์„œ ๋งˆ์น˜ ๊ฐ๊ฐ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค. ๋ถˆํ•„์š”ํ•œ OS๋งŒ๋“œ๋Š”์ž‘์—… ๋ฐ Infra๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋‚˜๋ˆŒ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ํ™•์žฅ์„ฑ์ด ์ข‹๊ณ  ๋น ๋ฅด๋‹ค.

    - ์ปจํ…Œ์ด๋„ˆ ์žฅ์  ์ •๋ฆฌ

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ ๊ณ ๋ฆฝ
    • VM๋ณด๋‹ค ๋น ๋ฅธ ์…‹์—…
    • VM๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ๋œ ์†Œ๋ชจ
    • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฐฑ์—…, ์ „์†ก์ด ์‰ฌ์›€. VM๊ณผ ๋น„๊ตํ•ด ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ํ•˜๋“œ์›จ์–ด์™€์˜ ๋น ๋ฅธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์€ ๋”ฐ๋ผ, ์„ฑ๋Šฅ์— ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐ์น˜์™€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋‹ฌ ์‹œ๊ฐ„ ๊ฐ์†Œ

    3. ๋„์ปค๋ž€?

    ๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ค‘ ํ•˜๋‚˜์ด๋‹ค. Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ถ”์ƒํ™”์‹œ์ผœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Š” ์ฃผ์–ด์ง„ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธOS์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Work flow์˜ ์ž๋™ํ™”)๋œ ์„œ๋น„์Šค๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฐฑ์—”๋“œ ํ”„๋กœ๊ทธ๋žจ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„, ๋ฉ”์‹œ์ง€ ํ๋“ฑ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ๋„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ถ”์ƒํ™”ํ•  ์ˆ˜ ์žˆ๊ณ  ์กฐ๋ฆฝPC, AWS, Azure, Google cloud๋“ฑ ์–ด๋””์—์„œ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    [3.1]์•„ํ‚คํ…์ณ


    ํŠน์ง•:Docker๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค. ๋„์ปค ํด๋ผ์ด์–ธํŠธ์™€ ๋„์ปค ๋ฐ๋ชฌ์ดRestApi๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ 

    Docker ๋ฐ๋ชฌ

    • Docker Api ์š”์ฒญ์ˆ˜์‹ , ์ด๋ฏธ์ง€,์ปจํ…Œ์ด๋„ˆ,๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ๋„์ปค ๊ฐ์ฒด ๋ฐ ๋„์ปค ์„œ๋น„์Šค ๊ด€๋ฆฌ

    Docker ํด๋ผ์ด์–ธํŠธ

    Docker ์‚ฌ์šฉ์ž๊ฐ€ Docker์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•. ๊ธฐ๋ณธ์ ์ธ ๋„์ปค๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ Docker ๋ฐ๋ชฌ๊ณผ ํ†ต์‹ 

    Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

    Docker ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅ, Docker hub์ด๋ผ๋Š” ๊ณต์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๊ฐœ์ธprivateํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์‹คํ–‰

    docker pull, docker run: ์‚ฌ์šฉํ•˜๋ฉด  ํ•„์ˆ˜์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜จ๋‹ค.
    docker push: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ

    Docker ๊ฐ์ฒด

    • ๋„์ปค ์ด๋ฏธ์ง€: ๋„์ปค ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์„ค์ •๊ฐ’๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ : ์ปจํ…Œ์ด๋„ˆ๋Š” ๋„์ปค ์ด๋ฏธ์ง€์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค.
    docker run //์ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    [3.2] ๋„์ปค ์ด๋ฏธ์ง€

    [3.2.0] ํŠน์ง•

    • ๋„์ปค ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์„ค์ •๊ฐ’๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.(์šฉ๋Ÿ‰์ด ์—„์ฒญ๋‚จ)
    • ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ์— ๋”ฐ๋ฅธ ์ƒํƒœ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์ด ์˜๋„์น˜ ์•Š๊ฒŒ ๋ฐ”๋€œ์— ๋”ฐ๋ฅธ ์˜์กด์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ์ด๋ฉฐ, ๋ณ€ํ•˜๋Š” ๊ฐ’์€ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋œ๋‹ค.(์ด๋ฏธ์ง€๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค).
    • ๊ฐ™์€ ์ด๋ฏธ์ง€์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    [3.2.1] Docker Layer

    ๋„์ปค์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋ณ€ํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๋‹ค์šด๋ฐ›๋Š”๋‹ค๋ฉด ์ด๋ฏธ์ง€์˜ ์šฉ๋Ÿ‰์ด ํฌ๊ธฐ์— ๋น„ํšจ์œจ์ ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Layer๋ผ๋Š” ๊ฐœ๋…์„ ์ด์šฉํ•œ๋‹ค.


    ubuntu์˜ ์ด๋ฏธ์ง€๋Š” A+B+C์ด๋‹ค. nginx์˜ ๊ฒฝ์šฐ A+B+C+Nginx๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค. ์ด๋•Œ Layer ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ubuntu์— nginx๋งŒ ์Œ“์œผ๋ฉด ๋œ๋‹ค.

    [3.2.2] ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ

    [3.2.2] Dockerfile

    ๋„์ปค์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์— ๋Œ€ํ•ด ๊ธฐ์ˆ .
    ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋ฉด ์ด๋ฏธ์ง€ ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ๋ฌธ ์œผ๋กœ Dockerfile ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Dockerfile์˜ ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€์— ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Dockerfile์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋ ˆ์ด์–ด ๋งŒ ๋‹ค์‹œ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.

    # vertx/vertx3 debian version
    FROM subicura/vertx3:3.3.1
    MAINTAINER chungsub.kim@purpleworks.co.kr
    
    
    ADD build/distributions/app-3.3.1.tar /
    ADD config.template.json /app-3.3.1/bin/config.json
    ADD docker/script/start.sh /usr/local/bin/
    RUN ln -s /usr/local/bin/start.sh /start.sh
    
    
    EXPOSE 8080
    EXPOSE 7000
    
    
    CMD ["start.sh"]

    ๋Œ“๊ธ€