컨테이너란?
컨테이너란 표준화된 소프트웨어 유닛입니다.
소프트웨어 유닛, 코드 패키지, 이들을 실행하는 런타임을 함께 보관해 다른 환경에서도 가져올 수 있도록 합니다.
그러므로 애플리케이션을 실행하려는 위치에서 추가 도구를 설치하지 않아도 됩니다.
소프트웨어 개발에서 독립적인, 표준화된 애플리케이션 패키지를 제공할 수 있게 됩니다.
컨테이너 기술이 왜 필요할까요?
다른 개발&생산 환경이더라도 컨테이너 기술을 이용하면 정확히 같은 환경에서 빌드하고 테스트할 수 있게 해줍니다!
예를 들어..
로컬에서 NodeJS 14 버전에서만 제공하는 await을 이용해 개발한 응용 프로그램이 있습니다.
이걸 호스트되어야 하는 서버의 원격 시스템에 배포하려고 합니다.
NodeJS 12, 8 버전인 곳에서는 제대로 작동하지 않을 겁니다...
하지만 컨테이너 기술을 이용하면 특정 버전으로 고정해 코드가 항상 정확한 버전으로 실행되도록 할 수 있습니다.
팀 내에서, 회사 내에서 각각 다른 환경을 가진 사람들끼리 개발할 때도 편리하고,
혼자서 작업하더라도 환경이 다른 여러 프로젝트를 작업한다면 유용합니다!
가상 머신(Virtual Machine)과의 차이점
호스트 운영 체제에 독립적인 자체 Shell을 지닌 캡슐화된 가상 머신을 설치하는 것도 독립적인 환경을 제공할 수 있습니다.
하지만 문제는, 오버헤드!
가상 머신은 컴퓨터 안에서 실행되는 컴퓨터와 같습니다. 컴퓨터의 메모리, CPU, HDD 공간을 그만큼 더 사용하게 되어 성능이 저하됩니다.
별도로 운영체제나 기타 도구를 모두 설치해야 해서 공유가 까다롭습니다.
여러 대 설치한다면 이를 매번 반복해야 하니 자원 낭비도 큽니다.
반면 컨테이너를 사용하면 호스트 운영 체제는 그대로 두고 내장 컨테이너를 활용하므로 시스템에 미치는 영향이 적습니다. (운영 체제 레이어가 있더라도 아주 가벼운 버전입니다.)
구성 파일이 있기 때문에 공유하거나 재구축하고 배포하기가 편합니다.
애플리케이션과 이를 실행하는 데 필요한 것만 캡슐화할 수 있습니다.
멋진 말로 요약하기
컨테이너 기술은 애플리케이션을 격리된 환경에 담아 유연하게 배포하고 실행하는 기술로, 이식성과 확장성을 높이며 개발과 배포를 효율화합니다. 하드웨어나 운영체제의 차이를 추상화하여 일관된 환경에서 앱을 운영할 수 있어 개발과 운영의 편의성을 증대시킵니다.