wam
w__am 개발노트
wam
  • 분류 전체보기 (165)
    • CS 지식 (10)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 컴퓨터 구조 (0)
      • 운영체제 (0)
      • 네트워크 (7)
      • 데이터베이스 (0)
      • 디자인 패턴 (3)
    • Frontend (131)
      • Three.js (64)
      • NPM (1)
      • Nest.js (19)
      • React (10)
      • Apollo (7)
      • TypeScript (2)
      • JavaScript (12)
      • HTML, CSS (1)
      • Jest (3)
      • E2E (5)
      • Cypress (7)
    • Database (12)
      • TypeORM (12)
    • IT 지식 (8)
      • 클라우드 서비스 (3)
      • 네트워크 (1)
      • 데이터 포맷 (2)
      • 기타 (2)
    • IT Book (2)
    • 유용한 사이트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🐱 Github

인기 글

태그

  • Decorators
  • mapped types
  • threejs 개발 할 때 도움을 줄 수 있는 유틸리티
  • reactive variables
  • 함수 리터럴
  • API
  • 함수 선언문
  • math.sin()
  • 함수의 범위
  • react 성능 최적화
  • type-graphql
  • 렌더링 성능 최적화
  • e.preventdefault()
  • axeshelper
  • joi 에러
  • three.js 구성 요소
  • Interface
  • 데이터 포맷
  • 초기 환경설정
  • 디자인 패턴
  • isabstract
  • 삼각함수
  • 스코프
  • 함수 표현식
  • gridhelper
  • 원형적인 움직임
  • 오프-프레미스(off-premise) 방식
  • math.cos()
  • getdelta()
  • getelapsedtime()

최근 글

관리자

글쓰기 / 스킨편집 / 관리자페이지
hELLO · Designed By 정상우.
wam

w__am 개발노트

도커, 컨테이너
IT 지식/클라우드 서비스

도커, 컨테이너

2023. 1. 6. 17:08
도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼입니다. 가상화란 물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이고, 컨테이너란 컨테이너가 실행되고 있는 호스트 OS의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술을 뜻합니다.

 

 

IaaS의 장점인 이식성 + 이식성, PaaS의 장점인 운영비 = 도커를 이용한 클라우드

 

전통적 배포

 

 

  • 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식.
  • 어떤 프로그램을 설치했을 때 다른 앱에 영향을 미친다.

 

 

가상화 배포

 

 

  • 가상머신을 기반으로 배포
  • 중간에 있는 하이퍼바이저는 하나의 시스템에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미하며 컴퓨터 한 대로 여러 개의 앱을 독립적으로 돌릴 수 있다.
  • 이러한 가상화라는 기술 때문에 클라우드 컴퓨팅이 가능해진 것이다.
  • 가상머신 : 컴퓨터의 모든 부품을 애뮬레이션(모든 부품의 모든 기능을 소프트웨어적으로 구현) 한 것.
  • 이렇게 되면 하나의 컴퓨터 위의 여러 개의 가상머신을 둘 수 있고 이는 서로 샌드박스되어 전혀 상호 작용하지 않고, 한 가상 머신 위의 프로그램은 다른 가상머신 위의 프로그램에서 볼 수 없다.
  • 다만 OS가 공유가 안되기 때문에 전통적 배포보다는 아니지만 가상머신에 일일이 OS를 설치해야 하는 등 비용이 많이 든다.

 

 

컨테이너 배포

 

 

  • 컨테이너는 코드와 모든 종속성(Node.js, 라이브러리 등)을 패키징 하는 소프트웨어의 표준단위이다.
  • 컨테이너의 '이미지'라고 파일에 모든 라이브러리와 종속성을 포함하는 코드 기반 파일에 저장된다.
  • 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유하며 가상머신보다 경량화되어 있다.
  • 운영체제를 공유할 수 있기 때문에 그만큼 실행이 빠르며 가상화 배포보다 일반적으로 약 5배의 애플리케이션을 실행할 수 있다. 그렇다고 해서 격리성이 무너지냐? 그런 것도 아니다.
  • 컨테이너나 VM은 이러한 것을 통해 궁극적으로 애플리케이션이 ‘서로 다른 컴퓨터에서 설치되어 있다’고 생각하게 만든다. 즉, 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 친다.
  • 다만 컨테이너는 OS를 공유하는 방식이기 때문에 애플리케이션의 문제가 OS에 영향을 미치면 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있다.

 

 

도커

내 컴퓨터는 윈도우고 서버는 리눅스일 때의 문제점을 도커가 해결해 준다.
왜? 도커를 통해 다른 머신에서도 같은 환경을 구현할 수 있기 때문이다!

  1. 서버에서도 설치
  2. 도커 파일이라는 것을 생성!

 

 

구현하고 싶은 환경을 설정하면 된다. 도커를 통해 다양한 컨테이너들(node, java, python...)을 관리할 수 있다. 즉, 도커 덕분에 매번 새로운 서비스를 만들 때마다 새로운 서버를 사고 설정할 필요가 없어진다!

  • 컨테이너라는 경량 단위로 애플리케이션을 실행하는 기능을 제공하는 플랫폼
  • 여러 컴퓨터 간에 공유된 규격으로 리소스를 공유할 수 있어 유지보수성이 증대
  • 도커는 IaaS의 장점인 이식성, PaaS의 장점인 운영비가 저렴함을 갖춘 도구
  • 기존의 종속적인 라이브러리나 파일을 ~~로 복사 등 기존 시스템에 대한 설치 절차를 Dockerfile 스크립트에 작성하기만 하고 배포 관련사항을 도커스웜이나 쿠버네티스에 맞춰 작성하기만 하면 된다.

 

보통 도커 + 쿠버네티스, 또는 도커 + 도커스웜으로 구축

 

도커는 다음과 같은 과정을 거쳐 컨테이너를 만든다.

  1. 도커파일이 빌드
  2. 도커이미지 생성 및 실행
  3. 도커컨테이너 실행

 

  • 도커파일(dockerfile)
    컨테이너에 설치해야 하는 패키지, 환경변수설정 등을 기록한 하나의 파일
    (파이썬 3 설치, Node.js 설치, 어떤 파일을 어디로 복사 등)

  • 도커이미지
    도커가 도커파일의 단계에 따라 컴퓨터의 상태를 “스냅샷”으로 저장한 것.

  • 컨테이너
    • 도커가 이미지를 불러와 실행할 때 생성.
    • 실행 중인 컨테이너는 이미지에 지정된 프로그램과 데이터를 사용해 일반적인 실제 컴퓨터와 연결되어 사용가능.
    • 쿠버네티스이나 도커스웜 둘 다 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 컨테이너 오케스트레이션이다.

 

Q. 도커는 IaaS인가요? PaaS인가요?

  • 엄밀히 말하면 둘 다 아니고 “클라우드 가상화 기술”이다.
  • 굳이 따지면 PaaS의 일부라고 보면 된다.
  • 컨테이너의 가상화는 커널 레벨이 아닌 운영 체제 레벨, 즉 가상 머신의 가상화가 일어나는 곳에서 한 추상화 계층 높은 곳에서 일어난다.

 

다만, IaaS에서도 도커는 가능하며, PaaS인 heroku에서도 가능하다.

 

 

 

저작자표시 변경금지 (새창열림)

'IT 지식 > 클라우드 서비스' 카테고리의 다른 글

IaaS, PaaS, SaaS 설명  (0) 2023.01.06
클라우드 컴퓨팅이란?  (0) 2023.01.06
    'IT 지식/클라우드 서비스' 카테고리의 다른 글
    • IaaS, PaaS, SaaS 설명
    • 클라우드 컴퓨팅이란?
    wam
    wam

    티스토리툴바