컨테이너란 무엇인가 ?DevOps/Docker2022. 3. 7. 11:19
Table of Contents
728x90
✔️ 컨테이너란 ?
- 컨테이너란 호스트 OS 상에 논리적인 구획을 만들고 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다.
- 개별 SW의 실행 환경을 독립적으로 운용할 수 있도록 다른 실행 환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체제 수준의 격리 기술을 말한다.
- 호스트 OS의 리소스를 논리적으로 분리시키고, 여러개의 컨테이너가 공유하며 사용한다.
- 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동하는 것이 특징이다.
✔️ VM vs 컨테이너
VM (Virtual Machine)
- 공통적으로 하나의 서버가 있고 한 서버에는 HostOS (맥, 리눅스, 윈도우)가 올라간다.
- VM의 경우 호스트OS에 대해 VM을 가상화 시켜주는 하이퍼바이저(Virtual Box, VMware, Xen, KVM)들이 있다.
- 하이퍼 바이저는 컴퓨터가 가지고 있는 인프라 리소스들에 대해 VM별로 배분하는 역할을 한다. 하이퍼 바이저를 사용해 원하는 운영체제로 GuestOS를 올려 여러 VM을 만들 수 있다.
- GuestOS도 HostOS와 같이 하나의 OS를 독립적으로 가지고 있는 것처럼 사용가능하다.
- 여러 어플리케이션들을 설치하고 각각의 서비스를 만들 수 있다.
- 고립된 환경에서 어플리케이션을 구동하기 위해서 VM을 사용하면 운영체제를 포함하고 있기 때문에 무겁고 시작하는데도 오래걸리며 컴퓨터, OS, infrastructure의 resources를 많이 잡아먹는 범인이 될 수도 있다.
컨테이너 (Container)
- VM에서 경량화된 기술이 컨테이너 기술이다. 가장 큰 차이점은 컨테이너는 운영체제를 포함하지 않는다는 것이다.
- VM과 HostOS 까지는 설치가 동일하다. 이 OS에 의해 컨테이너를 가상화 시켜주는 여러가지 소프트웨어들 (docker. rtx, LXC)이 있고 도커를 가장 많이 사용한다. 도커가 컨테이너를 만들어준다.
- 위의 이미지로 예를 들어보자 어떤 앱 하나를 개발하는데 node.js, npm 외부 라이브러리를 사용한다면 dependency와 환경 설정, 환경 변수 등 이런 모든 것들을 다 설정해 주어야한다. 서버마다 개발자들의 PC마다 이 모든것을 설정하고 관리하는 것은 매우 번거롭고 오류가 발생할 가능성이 높다.
- 도커를 설치하고 컨테이너 이미지를 만들 수 있는데 이미지에는 한 서비스와 그 서비스가 돌아가는데 필요한 라이브러리들이 같이 있다.
- 컨테이너 기술을 사용하면 OS나 디렉토리, IP 주소와 같은 시스템 자원을 마치 각 어플리케이션이 점유하고 있는 것처럼 보이게 할 수 있다. 컨테이너는 어플리케이션 실행에 필요한 모듈을 컨테이너로 모을 수 있기 때문에 여러개의 컨테이너를 조합하여 하나의 어플리케이션을 구축하는 MSA와 친화성이 높다.
종류 | 장단점 | 사용 시기 |
VM | 호스트 머신으로부터 완전히 독립적이라는 점에서 독립성과 보안성이 더 우수하다. | 서로 다른 OS 종속성을 갖는 여러 앱을 단일 서버에서 실행할 때 OS의 모든 리소스 및 기능이 필요한 하나의 앱을 실행할 때 독립성 및 보안성이 중요할 때 |
컨테이너 | 가상 머신보다 민첩성이 더 뛰어나지만 호스트 머신의 OS 커널에 대한 종속성으로 인해 다른 OS 환경에 대해 종속성을 갖는 앱의 사용이 제한된다. | 단일 OS 커널에서 실행되는 앱 수를 최대화하고자 할 때 단일 앱의 여러 인스턴스를 배치할 때 컴퓨팅 및 스토리지 리소스가 중요할 때 |
✔️ 컨테이너를 사용해야 하는 이유
컨테이너는 Linux, Windows, Mac 운영체제, 가상 머신, 베어메탈, 개발자의 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워진다.
컨테이너용 Docker 이미지 형식은 이동성이 매우 뛰어나다. 소프트웨어 구동 환경이 무엇이든 컨테이너를 사용할 수 있다. 컨테이너에는 여러 가지 형식이 있다. Docker는 널리 사용되는 오픈소스 컨테이너 형식으로 Google Cloud Platform과 Foofle Kubernetes Engine에서 지원된다.
컨테이너 (Container) | 가상 머신 (Virtual Machine, VM) | |
일관성 있는 런타임 환경 | O | O |
어플리케이션 샌드박스화 | O | O |
디스크 용량 감소 | O | X |
낮은 오버헤드 | O | X |
일관성 있는 런타임 환경
개발자는 컨테이너를 이용해 다른 어플리케이션과 분리된 예측 가능한 환경을 생성할 수 있다.
어플리케이션 샌드박스화
컨테이너는 사용자가 의도적으로 연결하기 전까지는 어플리케이션을 서로 격리한다. 따라서 종속 항목의 충돌이나 리소스 결함을 걱정할 필요가 없다.
디스크 용량 감소 / 낮은 오버헤드
가상 머신은 하드웨어 스택을 가상화한다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하며 다수의 컨테이너를 OS 커널에서 직접 구동한다.
격리
컨테이너는 CPU, 메모리, 스토리지, 네트워크 리소스를 OS 수준에서 가상화하여 개발자에게 기타 어플리케이션으로부터 논리적으로 격리된 OS 샌드박스 환경을 제공한다.
✔️ 컨테이너의 종류
- 시스템 컨테이너 (system container) - 시스템 컨테이너는 컨테이너 기술들을 사용해 운영체제 위에 하드웨어 가상화 없이 운영체제를 실행한다. 일반적인 리눅스처럼 init 프로세스 등을 사용해서 다수의 프로세스가 같은 환경을 공유하는 것을 목표로 한다. 시스템 컨테이너를 지향하는 컨테이너 런타임으로는 대표적으로 LXC와 LXD가 있다.
- 애플리케이션 컨테이너 (applcation container) - 애플리케이션 컨테이너는 컨테이너 기술을 활용해 하나의 애플리케이션(프로세스)를 실행하는 것을 목표로 한다. 독립적인 환경을 가진다는 점에서는 시스템 컨테이너와 동일하지만, 단 하나의 프로세스만 실행한다는 점에서 확장이 쉽고 관리 요소가 거의 없다. 대표적인 애플리케이션 컨테이너 런타임으로는 도커 Docker가 있다.
🔗 출처
728x90
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker(도커)의 기본 명령어 (0) | 2022.05.07 |
---|---|
[Docker] Docker(도커) 설치 (0) | 2022.05.06 |
[Docker] Monolithic 구조와 MicroService 구조 (0) | 2022.05.06 |
[Docker] Docker(도커)란 ? (0) | 2022.05.06 |
Docker(도커)란 무엇인가 ? (1) | 2022.03.07 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!