개발/Docker

도커(Docker)와 컨테이너란?

개발자 박현준 2023. 2. 6. 17:46
728x90
 

SaaS, IaaS, PaaS 정리

클라우드란? 클라우드는 "인터넷"을 통해 접근할 수 있는 서버 그리고 그 안에서 궁도되는 소프트웨어, 데이터베이스 등을 의미한다. 나의 컴퓨터 장비를 사용하지 않고 컴퓨터 장비를 구축해야

ks12b0000.tistory.com

위에 페이지에서 설명한 IaaS의 장점인 이식성, PaaS의 장점인 운영비를 갖춘 도커를 이용한 클라우드를 알아보자.

 

전통적 배포

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

 

가상화 배포

가상머신을 기반으로 배포하는 것을 말하고, 중간에 있는 하이퍼바이저는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 중간 계층을 의미하며 컴퓨터 한 대로 여러개의 앱을 독립적으로 돌릴 수 있다.

클라우드는 이러한 가상화라는 기술 때문에 클라우드 컴퓨팅이 가능해진 것이다.

이렇게 되면 하나의 컴퓨터 위에 여러개의 가상머신을 둘 수 있고 이는 서로 샌드박스 되어 전혀 상호 작용하지 않고, 한 가상 머신위의 프로그램은 다른 가상머신위의 프로그램에서 볼 수 없다.

다만 OS가 공유가 안되기 때문에 전통적 배포보다는 아니지만 가상머신에 일일히 OS를 설치해야 하는 등 비용이 많이 들 수 있음.

 

컨테이너 배포

컨테이너는 코드와 모든 종속성(Node.js, 라이브러리 등)을 패키징하는 소프트웨어의 표준 단위이다.

컨테이너의 '이미지'라고 파일에 모든 라이브러리와 종속성을 포함하는 코드기반 파일에 저장이 된다.

컨테이너는 VM(Virtual Machine)과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유하며 가상머신보다 경량화 되어있다. 운영체제를 공유할 수 있기 때문에 그만큼 실행이 빠르며 가상화 배포보다 일반적으로 약 5배의 애플리케이션을 실행할 수 있다. 그렇다고해서 격리성이 무너지진 않는다.

컨테이너나 VM(Virtual Machine)은 이러한 것을 통해 궁극적으로 애플리케이션이 '서로 다른 컴퓨터에서 설치 되어있다'고 생각하게 만든다. 즉. 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 친다.

다만 컨테이너는 OS를 공유하는 방식이기 때문에 애플리케이션의 문제가 OS에 영향을 미칠경우 OS에서 구동중인 전체 컨테이너의 문제가 될 가능성이 있다.

도커란?

도커는 앞에서 설명한 컨테이너라는 경량 단위로 애플리케이션을 실행하는 기능을 제공하는 플랫폼이며, 여러 컴퓨터 간에 공유된 규격으로 리소스를 공유할 수 있어 유지보수성이 증대된다.

도커는 IaaS의 장점인 이식성, PaaS의 장점인 운영비 저렴한 점들을 갖춘 도구이다.

기존의 종속적인 라이브러리나 ~~파일을 ~~로 복사 등 기존 시스템에 대한 설치 절차를 Dockerfile 스크립트에 작성하기만 하고 배포 관련사항을 도커스웜이나 쿠버네티스에 맞춰 작성하기만 하면 된다.

보통은 도커 + 쿠버네티스, 또는 도커 + 도커스웜으로 구축이 된다.

 

 

  • 도커가 컨테이너를 만드는 과정.
    • 도커파일 작성
    • 도커파일 빌드
    • 도커이미지 생성 및 실행
    • 도커컨테이너 실행

  • 도커파일(dockerfile) : 컨테이너에 설치해야하는 패키지, 환경변수 설정 등을 기록한 하나의 파일(Node.js 설치, ~파일을 ~로 복사 등)이다.
  • 도커이미지 : 도커가 도커파일의 단계에 따라 컴퓨터의 상태를 "스냅샷"으로 저장한 것이다.
  • 컨테이너 : 도커가 이미지를 불러와 실행할 때 생성된다. 실행중인 컨테이너는 이미지에 지정된 프로그램과 데이터를 사용해 일반적인 실제 컴퓨터와 연결되어 사용이 가능하다.

쿠버네티스나 도커스웜 둘 다 컨테이너화된 애플리에키션을 자동으로 배포, 스케일링 및 관리 해주는 컨테이너 오케스트레이션 이다.

728x90