[새싹 x 코딩온] 웹 풀스택 영등포 5기 23주차 회고

용가리🐉·2023년 12월 26일
0
post-thumbnail

📌 Container 이해하기

  • 애플리케이션의 코드, 라이브러리, 환경 설정을 포함
  • 애플리케이션을 안전하고 효율적으로 실행 가능
  • 한 곳에서 다른 곳으로 쉽게 배포 가능

→ 물류에서의 컨테이너와 유사점 多 (용기, 표준화, 이동 가능)

📣 Container 란?

애플리케이션을 실행하기 위한 가상 환경

  • 가상화 기술의 일종으로 Docker와 Kubernetes와 같은 도구를 사용하여 배포하고 관리할 수 있음
  • 커널(운영체제의 기본적인 기능)을 사용해 가볍고 효율적으로 실행 가능

커널(kernel)

  • 컴퓨터의 하드웨어와 소프트웨어를 연결하고 관리하는 역할 (a.k.a 컴퓨터의 뼈대)
  • 컴퓨터의 모든 부분을 작동시키는데 필요한 기본적인 기능들을 제공하는 가장 중요한 부분!
  • 호스트 OS의 자원을 분리해 독립적으로 실행 → 컨테이너가 서로 영향을 미치지 않고 안전하게 실행
  • 표준화된 이미지를 기반으로 컨테이너 생성 → 컨테이너는 쉽게 이동, 공유, 재사용 가능
  • 컨테이너는 호스트 OS 커널을 공유하여 가벼움
    → 각 서버에서 Container를 구동해 그 안에 존재하는 애플리케이션을 별도의 설정 없이 쉽게 사용할 수 있게 함

📣 사용 이유

  • 프로젝트 배포를 위해서는 필요한 환경(서버, OS, 네트워크 통신 포트 구성 및 개발 툴, 연동 환경 구성 등)을 구축해야 함
  • 새로운 개발자의 합류 시, 동일한 환경에서 작업하도록 모든 설정을 반복해야 함 → 비효율적
    → 서버, OS, 네트워크 통신 포트 구성, 개발 툴 등의 환경 설정을 한 번 구축한 뒤 다른 곳에 배포해 사용 가능

📣 가상 머신 (VM, Virtual Machine) VS. 컨테이너 (Container)

🟠 가상 머신 (VM, Virtual Machine)

  • 1960년대부터 연구되기 시작하여, 2000년대 이후부터 가상 머신 소프트웨어의 등장으로 본격적으로 사용되기 시작함
  • 가상 머신은 호스트 OS 위에서 별도의 가상 OS를 실행함
    - 가상 OS에 필요한 운영체제, 애플리케이션, 데이터 등을 설치해야 함
  • 가상 머신 구축은 많은 시간이 소요됨
  • 가상 OS는 호스트 OS와 별도로 실행 → 메모리 및 CPU 자원을 독점적으로 사용함
    • 가상 머신을 노트북에서 사용한다면, 노트북의 성능이 저하될 수 있음

🟠 컨테이너 (Container)

  • 가상 머신과 달리, 호스트 OS의 커널을 공유해서 애플리케이션을 실행하는 가상 환경
  • 장점
    • 경량화
      • 가상머신과 달리 별도의 OS를 포함하지 않아 가볍고 효율적임
    • 빠른 실행속도
      • 컨테이너는 가상 머신과 달리 호스트 OS의 커널을 공유
  • 단점
    • 독립성
      • 호스트 OS의 커널을 공유하여 가상 머신과 같은 독립성 제공 불가
      • 호스트 OS의 업데이트, 문제 등으로 영향을 받을 수 있음
    • 보안
      • 가상 머신과 같은 강력한 보안 기능을 제공하지 못하므로 민감한 데이터를 포함하지 않도록 주의해야 함

📎 정리

  • 가상 머신은 OS 전체를 가상화하여 독립적인 환경을 제공
  • 컨테이너 기술은 OS의 커널만 공유하여 애플리케이션을 실행하는 방식
    → 컨테이너 기술은 가상 머신 기술에서 발전된 형태로 볼 수 있음
  • 다양한 OS를 실행해야 하는 환경에서는 가상 머신 기술이 유용함
  • 애플리케이션을 실행하는데 주로 사용되는 환경, 확장성과 비용 절감이 중요한 환경에서는 컨테이너 기술이 유용함

📌 Docker 이해하기

📣 Docker 란?

  • 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼
  • 컨테이너의 개념이 정립된 이후, 컨테이너를 보다 쉽게 생성, 관리할 수 있도록 등장함
  • OS의 커널만 공유하여 컨테이너 생성
  • OS 버전이나 하드웨어 사양에 관계없이 동일한 애플리케이션 실행 가능
  • 컨테이너를 이미지 형태로 생성하고 관리 → A 서버에서 생성한 컨테이너 이미지를 B 서버에서도 쉽게 배포할 수 있음 (이식성 향상)

→ 애플리케이션을 배포, 테스트, 개발하는 데 유용한 도구로 개발 생산성을 높이고, 안정적으로 애플리케이션을 운용하는 것

📌 Docker Architecture 살펴보기

📣 Docker 핵심 구성 요소

  • 클라이언트-서버 아키텍쳐를 기반

🟠 Docker Daemon

  • Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 같은 Docker Objects를 관리
  • Docker Client는 Daemon에게 명령어를 전달하고 Daemon이 명령어를 실행함

🟠 Docker Client

  • 도커 사용자가 docker run, docker build, docker pull 등의 명령어를 사용해 도커와 상호작용하는 주요 수단
  • 이러한 명령어들은 도커 API를 사용해 Daemon에게 전달됨

🟠 Docker Registry

  • Docker Images를 저장함
  • 종류
    • Public Registry : 누구나 사용할 수 있는 공개 저장소 (ex. Docker Hub)
    • Private Registry : 특정 조직이나 사용자만 사용할 수 있는 비공개 저장소

🟠 Docker Objects

  • 도커에서 생성하고 사용하는 이미지, 컨테이너, 네트워크, 볼륨 등의 기타 개체
  • 이미지 (images)
    • 애플리케이션을 실행하는 데 필요한 모든 파일, 구성 및 설정을 포함하는 읽기 전용 파일 시스템 → 변경 불가
    • 컨테이너를 생성하는데 사용됨
  • 컨테이너 (Containers)
    • 도커 이미지를 실행한 상태
    • 별도의 실행 환경을 제공, 호스트 운영 체제와 격리되어 있음
    • 컨테이너 상태각 변경될 수 있음
      • 컨테이너 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않고 그대로 남아있음
profile
자아를 찾아 떠나는 중,,,

0개의 댓글

관련 채용 정보