🌈 [Section4] 11. [Cloud] 배포 μ»¨ν…Œμ΄λ„ˆ Docker

ν˜„μ£ΌΒ·2022λ…„ 12μ›” 6일
0

bootcamp

λͺ©λ‘ 보기
65/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • 도컀 (Docker)
  • 가상화 vs μ»¨ν…Œμ΄λ„ˆ

✏️ 도컀 (Docker)

  • λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹ μ†ν•˜κ²Œ ꡬ좕, ν…ŒμŠ€νŠΈ 및 배포할 수 μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄ ν”Œλž«νΌ

  • ν•˜λ“œμ›¨μ–΄μ˜ μžμ›μ„ λͺ¨λ‘ 가상화 ν•˜μ§€ μ•Šκ³  ν”„λ‘œμ„ΈμŠ€λ“€λ§Œμ„ κ²©λ¦¬μ‹œμΌœ λΉ λ₯΄κ²Œ ν™˜κ²½μ„ ꡬ좕 κ°€λŠ₯
    ➜ μ‹€ν–‰ ν™˜κ²½μ— ꡬ애받지 μ•Šκ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ κ°€λŠ₯

Docker μ°Έκ³ 

βœ” λ„μ»€μ˜ μž₯점

  • μ˜μ‘΄μ„± 좩돌 문제 ν•΄κ²°
    ➜ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰ 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 각자 고유의 μ˜μ‘΄μ„± 가짐

    • 개발과 배포 ν™˜κ²½μ„ μΌμΉ˜μ‹œν‚΄

    • μˆ˜ν‰ ν™•μž₯을 μ‰½κ²Œ ν•΄μ€Œ

    • 각 μ„œλ²„μ— μƒˆλ‘œμš΄ λ‚΄μš©μ„ λ°°ν¬ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ€Œ

      πŸ’‘ A ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•΄μ•Όν•  λ•Œ B ν”„λ‘œκ·Έλž¨μ΄ λ°˜λ“œμ‹œ ν•„μš”ν•œ 경우,
      ν”„λ‘œκ·Έλž¨ AλŠ” ν”„λ‘œκ·Έλž¨ B에 의쑴 관계λ₯Ό 가지고 μžˆλ‹€. 라고 말 ν•  수 μžˆλ‹€.
      Ex. μœˆλ„μš°μš© ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ €λ©΄ μœˆλ„μš° μš΄μ˜μ²΄μ œκ°€ ν•„μš”ν•˜λ“―
      β €
      But, A1 / A2 ν”„λ‘œκ·Έλž¨μ΄ μžˆλ‹€κ³  ν•  λ•Œ,
      A1 / A1 λͺ¨λ‘ B에 λŒ€ν•΄ 의쑴 관계λ₯Ό 가지고 μžˆλŠ”λ° 각각 ν•„μš”ν•œ B의 버전이 λ‹€λ₯Ό 경우
      이 BλŠ” 컴퓨터에 ν•˜λ‚˜λ§Œ 깔리기 λ•Œλ¬Έμ— A1 / A2 λ‘˜ 쀑 ν•˜λ‚˜λŠ” μ œλŒ€λ‘œλœ μ‹€ν–‰ 보μž₯ X
      ( μ˜μ‘΄μ„±μ΄ μΆ©λŒν•œλ‹€κ³  함 )
      β €
      ➜ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ΄μš©ν•˜λ©΄ μ‹€ν–‰ ν™˜κ²½μ΄ 격리되기 λ•Œλ¬Έμ—
      A1 / A2λ₯Ό 각각의 μ‹€ν–‰ ν™˜κ²½μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰μ‹œμΌœ 각각 ν•„μš”ν•œ B 버전을 달리 받을 수 있음

  • ν•œ λŒ€μ˜ 컴퓨터에 μ—¬λŸ¬ λŒ€μ˜ μ»¨ν…Œμ΄λ„ˆκ°€ μ‘΄μž¬ν•˜κ³ ,
    이 μ»¨ν…Œμ΄λ„ˆλ“€λ‘œ 각각의 격리된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행이 κ°€λŠ₯
    ( 가상 λ¨Έμ‹ κ³Ό λΉ„μŠ·ν•œ μˆ˜μ€€μ˜ 격리성 제곡 )

  • OS에 상관없이 μ¦‰μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν™˜κ²½ λ§Œλ“€κΈ° κ°€λŠ₯

  • κ°œλ°œμ„ μ»¨ν…Œμ΄λ„ˆ μœ„μ—μ„œ 진행할 경우, λͺ¨λ“  κ°œλ°œνŒ€μ΄ λ™μΌν•œ μ‹€ν–‰ ν™˜κ²½μœΌλ‘œ 개발 κ°€λŠ₯
    ➜ 도컀 자체λ₯Ό 이미지화 ν•΄μ„œ νƒœκ·ΈκΉŒμ§€ λΆ™μ—¬μ„œ λ ˆμ§€μŠ€νŠΈλ¦¬μ— 올렀 놓고 κ·Έκ±Έ pull ν•΄μ„œ μƒˆλ‘œμš΄ μ„œλ²„μ— ν•΄λ‹Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ»¨ν…Œμ΄λ„ˆλ‘œ μ‹€ν–‰ν•˜κ³ , λ‘œλ“œ λ°ΈλŸ°μ„œμ— 이 μ„œλ²„λ₯Ό μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ 됨
    (AWSκ°€ μ„œλ²„ 생성/μ‚­μ œλ„ μžλ™μœΌλ‘œ ν•΄μ€Œ )

    Ex. 개발 μ‹œμ— μ„œλ‘œμ˜ ν”„λ‘œκ·Έλž¨ λ²„μ „μ΄λ‚˜ ν™˜κ²½μ„ λΉ„μŠ·ν•˜κ²Œ λ§žμΆ”κΈ° μœ„ν•΄
    Dockerλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…λ Ήμ–΄λ‘œ μ¦‰μ‹œ μ„€μΉ˜ 및 μ‹€ν–‰ κ°€λŠ₯
    β €
    Ex. 배포 μ‹œμ—λ„ EC2 상에 도컀λ₯Ό μ„€μΉ˜ν•˜κ³ ,
    도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό EC2 μ„œλ²„μ—μ„œ μ‹€ν–‰ν•  수 있게 ν•˜λŠ” μ„œλΉ„μŠ€μΈ ECSλ₯Ό μ΄μš©ν•˜μ—¬ 훨씬 μ‰½κ²Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포 κ°€λŠ₯
    β €
    Ex. 이λ₯Ό μ‘μš©ν•˜μ—¬, μƒˆλ‘œμš΄ λ²„μ „μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—¬λŸ¬ μ„œλ²„ 쀑 λͺ‡ λŒ€μ—λ§Œ μš΄μ˜ν•˜μ—¬ ν…ŒμŠ€νŠΈν•˜λŠ” 방법도 κ°€λŠ₯
    ➜ 미리 λ°œμƒν•  수 μžˆλŠ” 문제 ν™•μΈν•˜μ—¬ 보완 κ°€λŠ₯

  • Docker Compose 툴둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성 μžμ²΄κ°€ μ»¨ν…Œμ΄λ„ˆν™”λ˜λ©΄,
    YAML 파일 ν•˜λ‚˜ + λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν™˜κ²½ ꡬ성이 μ™„λ£Œλ¨

βœ” μ»¨ν…Œμ΄λ„ˆμ™€ 호슀트 PC

  • CPU ➜ 곡유

  • λ©”λͺ¨λ¦¬ ➜ 곡유

  • λ¦¬λˆ…μŠ€ 컀널 ➜ 곡유

  • ⭐ λ„€νŠΈμ›Œν¬ ➜ 격리**

    • μ»¨ν…Œμ΄λ„ˆλ§ˆλ‹€ 각각의 IP μ£Όμ†Œ 가짐 = λ„€νŠΈμ›Œν¬λŠ” κ²©λ¦¬λ˜μ–΄ 있음
  • ⭐ ν”„λ‘œμ„ΈμŠ€ ➜ 격리

    • νŠΉμ • μ»¨ν…Œμ΄λ„ˆμ—μ„œ μž‘λ™ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 기본적으둜 κ·Έ μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œλ§Œ μ•‘μ„ΈμŠ€ κ°€λŠ₯

    • μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ˜ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ 영ν–₯ X

  • ⭐ 파일 μ‹œμŠ€ν…œ ➜ 격리

    • μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ μ‚¬μš©λ˜λŠ” 파일 μ‹œμŠ€ν…œμ€ κ΅¬νšν™”λ˜μ–΄ 있음
      ➜ ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆμ—μ„œμ˜ λͺ…λ Ήμ΄λ‚˜ 파일 λ“±μ˜ μ•‘μ„ΈμŠ€ μ œν•œ κ°€λŠ₯

      βœ”οΈ 가상 λ¨Έμ‹  (Virtual Machine / VM)

      • ν•˜λ‚˜μ˜ 호슀트 컴퓨터 μœ„μ— μ—¬λŸ¬ 개의 독립적인 컴퓨터가 μž‘λ™ν•  수 있게 ν•˜λŠ” 기술
        Ex. VMware, VirtualBox, Parallels λ“±
        ( 이걸 ν†΅ν•΄μ„œ ν•œ 컴퓨터 μ•ˆμ— μ—¬λŸ¬ 운영체제λ₯Ό λ„μšΈ 수 있음 )
        β €
      • 도컀λ₯Ό λΉ„λ‘―ν•œ λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆ κΈ°μˆ κ³ΌλŠ” 쑰금 닀름

      βœ”οΈ 가상화

      • λ‚΄ 컴퓨터 μœ„μ— 논리적인 또 λ‹€λ₯Έ 컴퓨터듀을 μ˜¬λ¦¬λŠ” 것
      • 호슀트 ν”Όμ”¨μ˜ ν•˜λ“œμ›¨μ–΄μ μΈ μŠ€νŽ™μ„ λ„˜μ§€ λͺ»ν•¨
        Ex. μ €μž₯ 곡간 / cpu μ„±λŠ₯

✏️ 가상화 vs μ»¨ν…Œμ΄λ„ˆ

( ⬆️ μ™Όμͺ½μ΄ VM / 였λ₯Έμͺ½μ΄ Docker )

βœ”οΈ VM (Virture Machine)

  • ꡬ성 μš”μ†Œμ— OS 쑴재
    ➜ 각 VM듀이 각자의 OS μ‚¬μš© ( λ°˜λ“œμ‹œ 각자 μ„€μΉ˜ )

βœ”οΈ Docker

  • ꡬ성 μš”μ†Œμ— OS μ‘΄μž¬κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ³ ,
    λ„μ»€λΌλŠ” ν”Œλž«νΌ μœ„μ— μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ˜¬λΌκ°€ 있고, κ·Έ μ•„λž˜ host OSκ°€ 쑴재
    β €β €
    ➜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ»¨ν…Œμ΄λ„ˆν™”ν•΄μ„œ μ‹€ν–‰ν•˜λŠ” 데에 μ£Ό λͺ©μ μ΄ μžˆμœΌλ―€λ‘œ,
    각 μ»¨ν…Œμ΄λ„ˆλ“€μ΄ host OS의 컀널 곡유
    ( host OS μž…μž₯μ—μ„œλŠ” μ»¨ν…Œμ΄λ„ˆκ°€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ— λΆˆκ³Όν•¨ )

    πŸ’‘ 컀널 (Kernerl)

    • μ‹œμŠ€ν…œ 콜과 같이 OS의 핡심 κΈ°λŠ₯을 κ΅¬ν˜„ν•œ ν”„λ‘œκ·Έλž¨)

    πŸ’‘ ν•˜μ΄νΌλ°”μ΄μ € (Hypervisor)

    • VM을 μƒμ„±ν•˜κ³  κ΅¬λ™ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄
      Ex. VMware, VirtualBox

✏️ Docker 핡심 ν‚€μ›Œλ“œ

βœ”οΈ μ»¨ν…Œμ΄λ„ˆ

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜μ‘΄μ„±, λ„€νŠΈμ›Œν¬ ν™˜κ²½, 파일 μ‹œμŠ€ν…œμ— ꡬ애받지 μ•Šκ³ , λ„μ»€λΌλŠ” 기술 μœ„μ— 싀행될 수 μžˆλ„λ‘ λ§Œλ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒμž

βœ”οΈ 이미지

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성을 ν•¨κ»˜ 담아놓은 ν…œν”Œλ¦Ώ
    ( 도컀λ₯Ό 이미지화 μ‹œν‚¨ 것 )

  • 도컀 μ΄λ―Έμ§€λŠ” (운영체제 이미지도 μ‘΄μž¬ν•˜μ§€λ§Œ) 보톡 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹¨μœ„λ‘œ λ§Œλ“€μ–΄μ Έ 있음

  • 이미지λ₯Ό μ΄μš©ν•΄ μ¦‰μ‹œ μ—¬λŸ¬κ°œμ˜ μ»¨ν…Œμ΄λ„ˆ 생성 κ°€λŠ₯

  • 이미지 ν•˜λ‚˜λ₯Ό λ°”νƒ•μœΌλ‘œ μ‹€ν–‰λ˜λŠ” λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆλ“€μ΄ 생성됨
    ➜ 이미지 μ—¬λŸ¬κ°œλ₯Ό ν•˜λ‚˜μ˜ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰ν•˜λŠ” 것도 κ°€λŠ₯

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μˆ˜ν‰ ν™•μž₯ κ°€λŠ₯

  • κΈ°λ³Έ 이미지(base image)에 λ³€κ²½ 사항을 μΆ”κ°€/μ»€λ°‹ν•΄μ„œ 또 λ‹€λ₯Έ 이미지λ₯Ό λ§Œλ“€κΈ° κ°€λŠ₯

    Ex. μŠ€ν”„λ§λΆ€νŠΈ 기반의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ΄λ―Έμ§€λ‘œ λ§Œλ“€κ³  싢은 경우,
    μŠ€ν”„λ§λΆ€νŠΈ 초기 μ„ΈνŒ… 이미지λ₯Ό κΈ°λ³Έ μ΄λ―Έμ§€λ‘œ μ‚Όκ³  λ‚΄κ°€ λ§Œλ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μΆ”κ°€ν•΄ λ„£κ³ , 이미지화할 수 있음

βœ”οΈ λ ˆμ§€μŠ€νŠΈλ¦¬ (Registry)

  • 이미지λ₯Ό μ €μž₯ν•˜κ³  이λ₯Ό κ΄€λ¦¬ν•˜λŠ” κ³³
    Ex. Docker Hub, Amazon ECR

  • νŠΉλ³„νžˆ λ‹€λ₯Έ 것을 μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, 도컀 ν—ˆλΈŒ(Docker Hub)λ₯Ό κΈ°λ³Έ λ ˆμ§€μŠ€νŠΈλ¦¬λ‘œ μ„€μ •
    Docker Hub

  • Docker Hub, Private Docker Hub, νšŒμ‚¬ λ‚΄λΆ€μš© λ ˆμ§€μŠ€νŠΈλ¦¬ λ“±μœΌλ‘œ λ‚˜λ‰  수 있음

βœ”οΈ λ ˆν¬μ§€ν† λ¦¬ (Repository)

  • λ ˆμ§€μŠ€νŠΈλ¦¬ 내에 도컀 이미지가 μ €μž₯λ˜λŠ” 곡간
    ( GitHub의 λ ˆν¬μ§€ν† λ¦¬μ™€ μœ μ‚¬ν•˜κ²Œ μƒκ°ν•˜λ©΄ 됨 )

  • 이미지 이름이 μ‚¬μš©λ˜κΈ°λ„ 함

βœ”οΈ νƒœκ·Έ (Tag)

  • ν•΄λ‹Ή 이미지λ₯Ό μ„€λͺ…ν•˜λŠ” 버전 정보λ₯Ό 주둜 μž…λ ₯
    ( 같은 이미지여도 버전 λ³„λ‘œ μ•ˆμ˜ λ‚΄μš© μ’€ λ‹€λ₯Ό 수 있음 )

  • νŠΉλ³„νžˆ λ‹€λ₯Έ 것을 μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, latest νƒœκ·Έλ₯Ό 뢙인 이미지λ₯Ό κ°€μ Έμ˜΄

Ex. docker/whalesay:latest
➜ Docker HubλΌλŠ” λ ˆμ§€μŠ€νŠΈλ¦¬μ—μ„œ
➜ dockerλΌλŠ” μœ μ €κ°€ λ“±λ‘ν•œ whalesay 이미지 or λ ˆν¬μ§€ν† λ¦¬μ—μ„œ
➜ latest νƒœκ·Έλ₯Ό 가진 이미지
β €
docker/whalesay 이미지 μ°Έκ³ 

βœ”οΈ λ³Όλ₯¨ (Volume)

  • νŒŒμΌλ“€κ³Ό 디렉토리듀을 μ €μž₯ν•˜λŠ” 데이터 μ €μž₯μ†Œ
    ( == λ“œλΌμ΄λΈŒ(drive) )

μ°Έκ³  1
μ°Έκ³  2

βœ”οΈ 마운트 (Mount)

  • μ €μž₯ 곡간을 λ‹€λ₯Έ μž₯μΉ˜μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ 경둜λ₯Ό ν—ˆμš©ν•΄μ„œ,
    마치 ν•˜λ‚˜μ˜ μ €μž₯ 곡간을 μ΄μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” μž‘μ—…

  • λ³Όλ₯¨μ„ 컴퓨터가 μ‚¬μš©ν•  수 μžˆλ„λ‘ μ μš©ν•˜λŠ” κ³Όμ •

πŸ’‘ λ³Όλ₯¨(Volume)을 마운트(Mount)ν•œλ‹€.
➜ λ„μ»€μ—μ„œ μž‘μ—…ν•œ λ‚΄μš©μ„ λ‘œμ»¬μ—λ„ 같이 μ €μž₯ν•œλ‹€λŠ” 의미


😜 μ‹€μŠ΅

( μœ μ–΄ν΄λž˜μŠ€ Section4 - [Cloud] 배포 μ»¨ν…Œμ΄λ„ˆ - μ‹€μŠ΅ λΆ€λΆ„ μ°Έκ³  )

πŸ’‘ 참고둜 8080:80 μ΄λ ‡κ²Œ μ“°μ—¬μžˆλŠ” 포트의 μ˜λ―ΈλŠ”
➜ λ°–μ—μ„œ λ“€μ–΄κ°ˆ λ•ŒλŠ” 8080포트둜 λ“€μ–΄κ°€μ„œ, μ•ˆμ—μ„œ λ‚˜μ˜¬ λ•ŒλŠ” 80 ν¬νŠΈμ—μ„œ λ‚˜μ˜¨λ‹€.


🌈 λŠλ‚€μ 

μ˜€λŠ˜μ€ κ°œλ…μ€ κ½€ μ΄ν•΄ν•˜κΈ° μ‰¬μ› λŠ”λ° μ‹€μŠ΅μ„ 검은 터미널 ν™”λ©΄μœΌλ‘œ μ§„ν–‰ν•˜λ‹€λ³΄λ‹ˆ
μ›λž˜λ³΄λ‹€ 더 μ–΄λ ΅κ²Œ λŠκ»΄μ§€λŠ”.. 그런 λŠλ‚Œμ΄μ—ˆλ‹€ !!
κ·Έλž˜λ„ νŽ˜μ–΄λ‹˜μ΄ 많이 μ•Œλ €μ£Όμ…”μ„œ μ‹€μŠ΅μ€ μ—λŸ¬λ„ 많이 μ•ˆλ§Œλ‚˜κ³  μˆ˜μ›”ν•˜κ²Œ 잘 끝났고
μ‹œκ°„λ„ 많이 λ‚¨μ•„μ„œ λ‹€λ₯Έ κ±° ν•  수 μžˆμ—ˆλ‹€ γ…Žγ…Ž πŸ‘
쀑간 쀑간 λ―Έλ‹ˆ κ²Œμž„λ„ ν•  수 μžˆμ—ˆμ–΄μ„œ 더 μž¬λ―Έμžˆμ—ˆλ˜ μ‹€μŠ΅ !!
( ν•˜μ§€λ§Œ 혼자 ν•˜λΌλ©΄ ν•  수 μžˆμ„κΉŒ ..? ν•˜λŠ” μ‹€μŠ΅ .. γ…Ž )

0개의 λŒ“κΈ€