컨테이너(컴퓨터 기술)

덤프버전 :


파일:다른 뜻 아이콘.svg
은(는) 여기로 연결됩니다.
동음이의어에 대한 내용은 컨테이너 문서
컨테이너번 문단을
컨테이너# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
참고하십시오.




1. 개요
2. 상세
3. VM류 가상머신과의 차이점
4. 컨테이너의 한계


1. 개요[편집]


실행중인 컴퓨터의 호스트 운영체제에 격리된 공간을 설정하고, 이 격리공간 내에 호스트 운영체제로부터 독립된 프로세스를 실행시키는 기술과 이를 위한 소프트웨어 구성 일체를 이야기한다. 동일한 하드웨어 아키텍처(특히 CPU)와 동일한 OS 커널을 보유한 수많은 컴퓨터에서 컨테이너로 이미지화한 소프트웨어의 동일한 동작을 보장한다.


2. 상세[편집]


FreeBSD의 Jails라는 기술에서 시작되었다. 서버를 운영하는 입장에서 각각의 사용자 마다 개별 시스템을 구성해 할당하는 것은 그야말로 자원 낭비다. 동일한 프로세스 여러개를 하나의 시스템에 몰빵해서 실행할 수 있는 유닉스 시스템의 특성을 활용, 사용자마다 동일한 초기환경을 제공하되 사용자 간에 상호 영향을 받지 않도록 개별 사용자의 프로세스가 격리되어 실행할 수 있는 가상의 공간(jail)을 구현하는 것이다.
리눅스에서는 이러한 개념을 차용한 기술이 커널 2.6.24부터 적용되었으며, LinuX Containers(LXC)라고 불려왔다. 이 LXC 기술을 이용한 서비스 중 가장 널리 사용되어 사실상 업계 표준이 된 게 바로 Docker다. 자세한 내용은 해당 문서 참조.
Windows 또한 컨테이너 기술이 구현되긴 했다. 하지만, 라이선스 문제[1]도 있거니와, Windows는 서버 목적보다는 개인 단말 목적의 네이티브 상태가 가장 이상적이기 때문에, 단순히 가능성만 열어두고 그 규모가 커지지는 않았다. Windows에 Windows Subsystem for Linux(WSL)이 탑재된 이후부터 리눅스 컨테이너를 끌어다 쓸 수 있게 되면서 더 외면받고 있는 상황이다. 다만 Microsoft Azure 서버에는 컨테이너 기술이 활용되고 있다.
MacOS X는 FreeBSD의 변형이긴 하나 그 설계정책 상 사용자 수준의 권한을 넘어서는 모든 작업을 금지하기 때문에 컨테이너라는 개념 자체가 없다. 단지 윈도우와 마찬가지로 리눅스 컨테이너를 가져다 쓸 수는 있다.


3. VM류 가상머신과의 차이점[편집]


가장 근본적인 차이점은 "하드웨어까지 가상화"와 "하드웨어와 OS를 제외한 부분의 가상화"의 차이다. 이를 쉽게 풀어보자.

VMware/VirtualBox/QEMU로 대표되는 가상머신 소프트웨어는 현재 사용중인 호스트 컴퓨터의 환경으로부터 독립된 가상 하드웨어를 소프트웨어적으로 구현하는데에 그 목적이 있다. 예를 들어 x86 CPU를 사용하고 Windows 10을 운영체제로 하는 컴퓨터가 있을 때, ARM CPU를 사용하는 Raspberry Pi에서 구동되는 소프트웨어를 개발하고 이를 테스트하기 위해 새로운 하드웨어를 구비하는 것은 비효율적이므로, 소프트웨어를 이용해 ARM CPU가 구동되는 하드웨어 환경을 가상으로 구현하는 식이다. 또 다른 예로, Windows 10 환경에서 Windows XP 이하에서만 돌아가는 소프트웨어를 구동해야 할 경우 가상머신 소프트웨어로 가상의 컴퓨터를 구현해 Windows XP를 설치하여 사용하는 방식도 가능하다. 이러한 가상머신의 하드웨어는 호스트 컴퓨터로부터 완벽히 독립적으로 운영되고, 그 OS 또한 가상머신에 종속된다. 가상머신 소프트웨어는 하나의 프로세스로 호스트에 종속되고, 추가적으로 호스트에는 가상머신의 네트워크와 직접 연결될 가상 라우터를 구현한다.

컨테이너는 프로세스 집합과 파일시스템, 그리고 네트워크의 독립을 통해 가상 환경을 구현한다. 프로세스는 호스트의 CPU에서 직접 실행되지만, 이를 관리하는 체계만을 호스트의 최상위 관리 권한을 가진 사용자로부터 격리/분리시키고, 이 격리된 체계 내에 최상위 관리 권한을 가지는 가상의 사용자를 만들고, 이 가상의 사용자가 사용할 별개의 파일 시스템 구역과 가상의 네트워크를 형성하는 것이다.


4. 컨테이너의 한계[편집]


격리된 공간은 하드웨어와 OS를 호스트가 가진 것만을 사용할 수 있기 때문에, 가상머신과는 달리 다른 OS를 사용할 수는 없다. 우분투 리눅스에서 레드햇 리눅스 컨테이너를 구동한다는 개념은 리눅스의 커널[2]이 동일하기에 동일한 OS라고 간주할 수 있어 가능한 것이고, 우분투 리눅스에서 Windows의 소프트웨어를 컨테이너로 실행하는 것은 불가능하다는 이야기다.[3]

또 하나 알아야 할 점은, 컨테이너를 복사해 사용할 환경이 컨테이너를 빌드한 환경과 CPU의 종류가 다르거나 커널 버전이 다르면 컨테이너가 구동되지 않을 수도 있다. ARM CPU에서 구성한 컨테이너가 x86 CPU 하에서 돌아가지 않을 수도 있고, 리눅스 커널 5.15에서 구성한 컨테이너가 커널 6.2에서 돌아가지 않을 수도 있다는 의미. 컨테이너는 그 활용성이 무궁할 뿐 만능이 아니며, 결국은 OS 하위에서 실행 가능한 소프트웨어다.
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-12-06 04:47:30에 나무위키 컨테이너(컴퓨터 기술) 문서에서 가져왔습니다.

[1] 오직 마이크로소프트만 컨테이너를 제작하고 배포할 권리를 독점하고 있다.[2] OS의 핵심으로, 부팅 과정이 BIOS를 통과한 다음에는 커널이 하드웨어 제어를 담당한다.[3] 본디 리눅스와 Windows의 커널이 서로 다르니 당연하다. 반대로 Windows에서 리눅스 컨테이너를 실행하는 것 또한 원칙적으로는 불가능하다. 다만 WSL이라는 리눅스 에뮬레이션 기능을 동원해서 Windows - WSL2(with Hyper-V emulation) - 리눅스 - 리눅스 컨테이너 라는 연결을 만들수 있기에 최종적으로 리눅스 컨테이너를 Windows에서 사용할 수 있다. 이건 리눅스의 커널 크기가 작아 Windows에 포함하는 것이 가능했기 때문이다.