Getting Started with Docker

Docker ์ •๋ณตํ•œ๋‹ค!!!!!!!

References: [์ฑ…] ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋„์ปค

Container and Docker

  • Docker๋Š” ์—„์ฒญ๋‚œ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ ์žˆ๋Š” Open source project

  • Application์„ ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ packaging ํ•ด์„œ ๋ฐฐํฌ ํ•˜๊ณ  ๊ตฌ๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

  • Docker Container๋Š” ์‹ค์ œ ํ™”๋ฌผ ์„ ๋ฐ•์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ฒ˜๋Ÿผ application์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ํ‘œ์ค€ํ™”๋œ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค!

Container ๋ž€?

VM vs Container
  • Container๋Š” application์•„์„ ์บก์Аํ™”ํ•ด ๋…๋ฆฝ์ ์ธ ์šด์˜ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ 

    • Virtual Machine์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

  • Container๋Š” Linux Kernel์˜ ๊ฒฉ๋ฆฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ User Space Interface ์ธ Linux Container๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“  ๊ฒƒ!

    • ์—ฌ๊ธฐ์— ๊ฐ•๋ ฅํ•œ API์™€ ๊ฐ„๊ฒฐํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ Linux ์‚ฌ์šฉ์ž๊ฐ€ application์„ container๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • Container๋Š” Host machine์—์„œ ๊ตฌ๋™ํ•˜๋Š” OS๋“ค์ด Linux kernel์„ ์„œ๋กœ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ธฐ์กด Hypervisor์™€ ๋‹ค๋ฅด๋‹ค!

    • Hypervisor ๋ž€?

      • Virtual Machine์„ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ๋™ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด

    • ์ฆ‰, ๋‹ค์‹œ ๋งํ•ด ๊ฐ™์€ ๋จธ์‹ ์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™ํ•ด๋„ ์‚ฌ์šฉํ•˜๋Š” Kernel์€ ๋ชจ๋‘ ๊ฐ™๋‹ค

      • ๊ทธ๋ž˜์„œ VM๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋„ ๊ฑฐ์˜ ์—†๋‹ค!

OS Container

  • OS Container๋Š” VM๊ณผ ๋น„์Šทํ•˜๋‹ค

    • but, Host Machine OS์˜ Kernel์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์œ ์ € ์ŠคํŽ˜์ด์Šค ๊ฒฉ๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค

  • VM๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Container์— ์ „์šฉ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ , application๊ณผ library ๋“ฑ์„ ์„ค์น˜, ์„ค์ • ๋ฐ ๊ตฌ๋™ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • OS Container๋Š” ํ™•์žฅ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค!

    • ๋‹ค์–‘ํ•œ ๋ฐฐํฌํŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ VM๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๋‹ค

  • Container๋Š” ๊ตฌ์กฐ์™€ ๋‚ด์šฉ๋ฌผ์„ ์ •์˜ํ•œ ์ด๋ฏธ์ง€๋‚˜ ํ…œํ”Œ๋ฆฟ์„ ํ†ตํ•ด ์ƒ์„ฑํ•œ๋‹ค

    • ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ๋‹ค๋ฅธ Container์™€ ๋™์ผํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๋ฒ„์ „, ํŒจํ‚ค์ง€ ํ™˜๊ฒฝ์„ ๊ฐ–์ถ”๋„๋ก ๊ตฌ์„ฑํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค!

  • ํ˜„์žฌ ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์ด ๋‚˜์™€ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ OS Container๋กœ ์ ํ•ฉํ•œ ๊ฒƒ์€ LXC, OpenVZ, Docker, BSD Jain ๋“ฑ์ด ์žˆ๋‹ค

Application Container

  • OS Container๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ process ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค๋ฉด, Application Container๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ package๋กœ ๋งŒ๋“ค์–ด์„œ ๊ตฌ๋™ํ•œ๋‹ค

    • Appllication container๋Š” ํ•˜๋‚˜์˜ process๋งŒ ๊ตฌ๋™ํ•œ๋‹ค

      • ์ด ๋•Œ ๊ตฌ๋™๋˜๋Š” process๋Š” aaplication process๋กœ์„œ OS Container ๊ฐ€ ํ•˜๋‚˜์˜ OS ์œ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋Œ€์กฐ์ ์ด๋‹ค!

  • Docker container๋Š” ๊ณ„์ธต (layer) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค

    • ์ฆ‰, ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” base image์— ๋Œ€ํ•œ container๋ฅผ ๋จผ์ € ๊ตฌ๋™ํ•˜๊ณ ,

    • ๊ทธ ์œ„์— ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ณ„๋„์˜ layer๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค

  • Layer ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ์‹œ์ ์— ์–ธ์ œ๋“ ์ง€ ์˜ˆ์ „ ๋ ˆ์ด์–ด๋กœ ์‰ฝ๊ฒŒ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค!

  • Dockerfile์— ๋ช…์‹œ๋œ RUN ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค container์— layer๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ๋‹ค

  • Application Container์˜ ์ฃผ ๋ชฉ์ ์œผ๋กœ๋Š” application์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ์˜ ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ๋‹ค

    • ์ด๋ ‡๊ฒŒ container ๋‹จ์œ„๋กœ ๋ฌถ์ธ application์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ API๋‚˜ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ application์„ ๊ตฌ๋™ํ•œ๋‹ค

      • ์ด๋Ÿฌํ•œ ๋ถ„์‚ฐ ๋ฉ€ํ‹ฐ ์ปดํฌ๋„ŒํŠธ ์‹œ์Šคํ…œ ํ˜•ํƒœ์˜ ๋ฐฐํฌ ๋ฐฉ์‹์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„์˜ ํ•ต์‹ฌ์ด๋‹ค!

        • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด

          • ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ application์„ container ํ˜•ํƒœ์˜ package๋กœ ๋งŒ๋“ค๊ณ ,

          • ์ด๋ฅผ ์ˆ˜ํ‰์ ์œผ๋กœ๋‚˜ ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ platform์— container๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์ž‘์—…์€ ITํŒ€์ด ์ „๋‹ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค

OS Container vs Application Container

OS Container
Application Container

ํ•˜๋‚˜์˜ OS Container์— ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™

ํ•˜๋‚˜์˜ Container์— ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™

๋ ˆ์ด์–ด๋“œ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

๋ ˆ์ด์–ด๋“œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜

ex) LXC, OpenVZ, BSD ์žฌ์ผ

ex) Docker, ๋กœ์ผ“

Docker ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

  • ๋„์ปค๋Š” ๋‹ค์–‘ํ•œ Linux Kernel ๊ธฐ๋Šฅ์„ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ์—ฎ์–ด์„œ image๋ฅผ module ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค

  • ๊ตฌ์„ฑํ•œ image๋ฅผ ํ†ตํ•ด

    • application ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋งˆ์Œ๊ป ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

    • WORA (Write-Once-Run-Anywhere) ์›์น™์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

  • Application์„ ํ•˜๋‚˜์˜ process ๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ์ˆ˜์ค€์œผ๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ

  • ์—ฌ๋Ÿฌ process๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

  • ๋†’์€ ํ™•์žฅ์„ฑ๋„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ๋„์ปค๋Š” application ๊ฐœ๋ฐœ์— ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ๋„ค ๊ฐ€์ง€ ํŠน์ง•์„ ์ œ๊ณตํ•œ๋‹ค

    1. ์ž์œจ์„ฑ (autonomy)

    2. ๋ถ„์‚ฐํ™” (decentralization)

    3. ๋ณ‘๋ ฌ์„ฑ (parallelism)

    4. ๊ฒฉ๋ฆฌ์„ฑ (isolation)

  • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐœ๋ฐœ ๋จธ์‹ ์ด๋‚˜ ๋ฒ ์–ด๋ฉ”ํƒˆ ์„œ๋ฒ„, ๊ฐ€์ƒ ๋จธ์‹ , ๋ฐ์ดํ„ฐ์„ผํ„ฐ ๋“ฑ ์–ด๋””์„œ๋‚˜ ์ž์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๋™์ž‘์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

    • Application ์„ค๊ณ„์ž์˜ ์ž…์žฅ์—์„œ ์šด์˜์— ๊ด€ํ•œ ์‚ฌํ•ญ์€ ๋ชจ๋‘ DevOpsํŒ€์— ๋งก๊ธฐ๊ณ , ์˜จ์ „ํžˆ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค..!

      • ์ด๋กœ ์ธํ•ด ํŒ€์˜ workflow๋ฅผ ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ƒ์‚ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค

Docker์™€ VM

  • Docker๋Š” OS๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Container์—์„œ ๊ตฌ๋™ํ•˜๋Š” application ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ์™€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

    • ์ด์ฒ˜๋Ÿผ OS ๊ณ„์ธต์„ ์™„๋ฒฝํžˆ ์ถ”์ƒํ™”ํ•ด ๊ฐ•๋ ฅํ•œ ๊ฒฉ๋ฆฌ์™€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Docker์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์€ VM์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ์ ์–ด์„œ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์ด ๋›ฐ์–ด๋‚˜๋‹ค!

Benefits of Docker

Microservice Architecture์—์„œ Docker Container๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๋‹ค

  • ๋น ๋ฅธ application ๋ฐฐํฌ

    • Container๋Š” application์— ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋งŒ ๋‹ด๊ณ  ์žˆ์–ด์„œ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์ด์‹์„ฑ

    • Application๊ณผ ์šด์˜ ํ™˜๊ฒฝ (application์—์„œ ์‚ฌ์šฉํ•˜๋Š” library๋ฅผ ๋น„๋กฏํ•œ dependency ์ •๋ณด) ์„ ํ•˜๋‚˜์˜ Docker Container๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•œ container๋Š” OS ๋ฒ„์ „์ด๋‚˜ ๋ฐฐํฌ ๋ชจ๋ธ๊ณผ ๋…๋ฆฝ์ ์ด๋‹ค

    • Docker Container๋Š” ํ˜ธํ™˜์„ฑ์— ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ ๋„ docker๋ฅผ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋จธ์‹ ์— ์ „์†กํ•ด ๊ณง๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋”ฐ

  • ์‰ฌ์šด ๊ณต์œ 

    • ๋ฏธ๋ฆฌ ์ œ์ž‘๋œ container image๋Š” ๊ณต์šฉ repo๋‚˜ ๋‚ด๋ถ€ ์ „์šฉ ์‚ฌ์„ค repo์— ์˜ฌ๋ ค๋‘๊ณ  ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์ ์€ ์ž์› ์‚ฌ์šฉ๋Ÿ‰

    • Docker image๋Š” ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฉฐ ์ƒˆ๋กœ์šดapplication์„ ๋ฐฐํฌํ•  ๋•Œ ๋‹ค๋ฅธ container๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์› ์‚ฌ์šฉ๋Ÿ‰๋„ ์ ๋‹ค

  • ์žฌ์‚ฌ์šฉ์„ฑ

    • Docker container์˜ ๋ฒ„์ „์„ ์ง€์†์ ์œผ๋กœ ์ด์–ด๋‚˜๊ฐ€๊ธฐ ์‰ฌ์šธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›ํ•  ๋•Œ ์–ธ์ œ๋“ ์ง€ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๊ธฐ๋„ ์‰ฝ๋‹ค

    • ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋Š” layer์— ๋‹ด๊ธด component๋“ค์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ๋‚œ ๊ฒฝ๋Ÿ‰ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

Lifecycle of Docker Container

image-20200809005844880

1. Build

  • Container๋ฅผ package๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ช…๋ น์„ Dockerfile์— ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด Docker image๋ฅผ build ํ•œ๋‹ค

    docker build
  • Image์— tag๋ฅผ ๋‹ฌ๋ ค๋ฉด -t option์„ ์ค€๋‹ค

    docker build -t ์‚ฌ์šฉ์ž ์ด๋ฆ„/์ด๋ฏธ์ง€ ์ด๋ฆ„
  • Dockerfile์ด ํ˜„์žฌ directory๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์กด์žฌํ•  ๋•Œ๋Š” -f option์œผ๋กœ Dockerfile์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค

    docker build -t ์‚ฌ์šฉ์ž ์ด๋ฆ„/์ด๋ฏธ์ง€ ์ด๋ฆ„ -f /๊ฒฝ๋กœ/Dockerfile

2. Run

  • Image๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— Container๋ฅผ ๋ฐฐ์น˜ํ•  ๋•Œ๋Š” docker run ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค

    docker run
  • ๊ตฌ๋™ํ•œ container์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด docker ps ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

    docker ps
    • ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ active ์ƒํƒœ์— ์žˆ๋Š” container ๋ชฉ๋ก์ด ๋‚˜ํƒ€๋‚œ๋‹ค

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ์ •์ง€ ํ•  ๋•Œ๋Š” docker pauge ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค

    docker pause
    • ์ด ๋ช…๋ น์€ cgroups freezer ๋ฅผ ์ด์šฉํ•ด ํ˜„์žฌ container์—์„œ ๊ตฌ๋™ ์ค‘์ธ ๋ชจ๋“  process๋ฅผ ์ผ์‹œ ์ •์ง€ํ•œ๋‹ค

      • ๋‚ด๋ถ€์ ์œผ๋กœ SIGSTOP signal์„ ๋ณด๋‚ธ๋‹ค

    • ์ด ๋ช…๋ น์„ ์ด์šฉํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ process๋ฅผ ์ผ์‹œ์ •์ง€ ํ–ˆ๋”ฐ๊ฐ€ resume ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ํ•œ ๊ฐœ ์ด์ƒ์˜ stop ์ƒํƒœ์— ์žˆ๋Š” container๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ๋•Œ๋Š” docker start ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

    docker start

3. Stop / Kill

  • Docker๋ฅผ ๋‹ค ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋ฉˆ์ถ”๊ฑฐ๋‚˜(Stop) ์ข…๋ฃŒ(Kill)ํ•œ๋‹ค

    docker stop
    • docker stop ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ๊ตฌ๋™์ค‘์ธ container์— SIGTERM signal์„ ๋ณด๋‚ธ ํ›„ SIGKILL signal์„ ๋ณด๋‚ด์„œ ์ž์—ฐ~์Šค๋Ÿฝ๊ฒŒ ๋ฉˆ์ถ”๊ฒŒ ํ•œ๋‹ค

    • ์ด ๋ช…๋ น์œผ๋กœ ๋ฉˆ์ถ˜ ํ›„์—๋„ docker ps -a ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ชฉ๋ก์— container๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค

    docker kill
    • docker kill ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ๊ตฌ๋™์ค‘์ธ container์˜ main process์— SIGKILL signal์„ ๋ณด๋‚ธ๋‹ค

4. Commit

  • Container๋ฅผ ์‹คํ–‰ ์ฃผ์—ฅ ๋ณ€๊ฒฝํ•œ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๋ ค๋ฉด ๋จผ์ € container๋ฅผ ๋ฉˆ์ถ˜ (Stop) ํ›„์— docker commit ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค

    docker commit
    • ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์ด Image์— ๋ฐ˜์˜๋œ๋‹ค!

+

์œ ๋‹ˆ์ปค๋„ (Unikernel)

  • ์œ ๋‹ˆ์ปค๋„์€ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹จ์ผ ์ฃผ์†Œ ๊ณต๊ฐ„ machine image๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก application logic ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํฌํ•จํ•˜๋„๋ก Custom OS ๋กœ compile ํ•œ ๊ฒƒ

  • ์œ ๋‹ˆ์ปค๋„์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ OS ๋ฅผ ์ด์šฉํ•ด build ํ•œ๋‹ค

Benefits of Unikernel

  1. ๋น ๋ฅธ ๋ถ€ํŒ… ์‹œ๊ฐ„

    • ์œ ๋‹ˆ์ปค๋„์€ provisioning ์ž‘์—…์„ ๋งค์šฐ ๋™์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋ถ€ํŒ… ์‹œ๊ฐ„๋„ 1์ดˆ ์ด๋‚ด๋‹ค

  2. ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰

    • ์œ ๋‹ˆ์ปค๋„์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๊ธฐ์กด OS์— ๋น„ํ•ด ์ž‘์œผ๋ฉฐ ๊ด€๋ฆฌํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค

  3. ํ–ฅ์ƒ๋œ ๋ณด์•ˆ

    • ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

  4. ์„ธ๋ฐ€ํ•œ ์ตœ์ ํ™”

    • ์œ ๋‹ˆ์ปค๋„์€ compile tool chain์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, device driver์™€ application logic์— ์ตœ์ ํ™”๋œ๋‹ค

  • ์œ ๋‹ˆ์ปค๋„์€ source code์™€ ๊ทธ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ binary์— ๋Œ€ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ณผ์ •๋„ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— Microservice architecture์™€ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค

  • ์œ ๋‹ˆ์ปค๋„ ํ™œ์šฉ ์˜ˆ

    • ex) ๋””์Šคํฌ ์ ‘๊ทผ๊ณผ ํ™”๋ฉด ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” application์„ ์ œ์ž‘ํ•  ๋•Œ, ํ•ด๋‹น ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„์™€ ํ™”๋ฉด ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ kernel์—์„œ ์ œ๊ฑฐํ•ด ์œ ๋‹ˆ์ปค๋„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

      • Application๊ณผ runtime ํ™˜๊ฒฝ, OS ๊ธฐ๋Šฅ ๋งŒ ๋‹ด์•„์„œ ์‹ค์ „์— ๋ฐฐ์น˜ํ•  ์‹œ์Šคํ…œ์„ ์ตœ์†Œํ•œ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

      • ์ด๋Š” ์‹ค์ „์— ๋ฐฐ์น˜ํ•œ ์„œ๋ฒ„์—์„œ application์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์ƒˆ๋กœ์šด Image๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ถˆ๋ณ€ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ (immutable application deployment) ๋ฐฉ์‹์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‹ค

  • ์ปจํ…Œ์ด๋„ˆ์™€ ์œ ๋‹ˆ์ปค๋„์„ ์„œ๋กœ ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š”๋‹ค

    • ์œ ๋‹ˆ์ปค๋„์ด๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๋„์ž…ํ•˜๋ฉด, docker ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ docker container๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์‹ค์ „ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์œ ๋‹ˆ์ปค๋„ container ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

Last updated

Was this helpful?