컨테이너는 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를 하나의 런타임 환경으로 패키징한 논리적공간을 이야기한다. ex) docker에서는 Dockerfile build를 통해 구현을 진행한다.
도커의 등장배경
-Docker는 2013년 3월에 PYCON에서 솔로몬 하익스라는 분에 의해 발표되었다.
도커는 컨테이너라는 가상화 기술을 사용하여 애플리케이션과 그 종속성을 패키지화하고, 어디에서나 동일한 환경에서 실행할 수 있게끔 만들어졌습니다. 이를 통해 개발 환경과 운영 환경 사이의 간극을 줄이고, 배포 프로세스를 더욱 효율적으로 만들 수 있게 되었습니다.
애플리케이션과 종속항목을 하나로 묶어, 실행하게 해주는 운영시스템을 가상화한 경량의 격리된 프로세스 라고 볼수있다.
microVM이라고도 하며,소프트웨어로 구현된 가상의 컴퓨팅환경을 의미한다.
독립성을 갖기 때문에 다른 컨테이너에 영향을 주지않는 statless환경제공
Docker의 기능
여러 게층의 애플리케이션을 컨테이너로 분리, 연결하여 실행하는 MSA프로젝트에 유용하다.
애플리케이션의 인프라는 이미지를 제공하고 public or private하게 공유가 가능하다.
깃허브와 유사한 방식으로 도커허브에서 제공한다.
이렇게 제공된 이미지를 기반으로 애플리케이션서비스를 제공 이를 컨테이너화 할수있다.
컨테이너 기술이란 그러면 무엇인가?
이 기술은 개인 데스크 탑 뿐만 아니라 기업내의 온프레미스 서버에서 AWS와 같은 퍼블릭 클라우드까지 언제 어디서든 빠르고 효율적으로 배포 가능하며, 확장성 또한 가지고있다.
이를 통해 서버구성, OS설치, 네트워크 개발도구 구성등의 반복적이고 불편한 작업에서 시간을 낭비하지않고, 개발자는 애플리케이션 개발 그 자체에 집중 할수 있게 된다.
컨테이너 특징은 무엇인가?
컨테이너는 우리가 개발한 최소한의 IMAGE를 통해 실행되므로 경량(가벼운)이다.
컨테이너 이미지 생성의 Best Practice는 이미지 경량화이다.
일반 서버 환경에서의 애플리케이션 실행과 달리 언제든 프로세스 수준의 속도로 빠르게 run 할수있고, 한번에 여러개의 컨테이너를 동시에 실행가능하다
개인 환경이나 클라우드 환경또는 어떤 OS, 어떤 환경에서도 동작 가능한 이식성을 보유하고있다.
컨테이너 자체 애플리케이션 환경에 대한 관리만 요구되므로, 지속적 서버 비용 절감이 가능하다
개발팀과 운영팀의 업무분리로 각자의 업무와 세분화된 관리에 집중할수있다. 즉 컨테이너는 DevOps workflow 구성에 최적이다.
컨테이너는 어떤 타입으로 생성되는지?
컨테이너 패키징 매커니즘: 시스템 / 애플리케이션 / 라우터 컨테이너
시스템 컨테이너 -호스트 os위에 우분투와 같은 배포판 리눅스 image를 통해 배포되는 컨테이너이다. -또다른 VM의 형태이고, 내부에 다양한 애플리케이션 및 라이브러리 도구를 설치, 실행 가능하다. -대표적으로 LXC,LXD, OpenVZ, Linux VServer , BSD, Jails등이 있다. ex)HOST의 pid 1번은 systemd이다.
애플리케이션 컨테이너 -단일 애플리케이션 실행을 위해 해당 서비스를 패키징하고, 실행하도록 설계된 컨테이너다. -3-tier 애플리케이션과 같은 경우 각 tier(프론트-백엔드-DB)를 개별 컨테이너로 실행하여 연결 -대표적으로 Docker container runtime, Rocket등이 있다.
개념 정리 LXC: LXC는 "Linux Containers"의 약어로, 리눅스 운영 체제에서 컨테이너 기술을 제공하는 프로젝트입니다. LXC는 가상화 기술을 사용하여 운영 체제 수준에서 가상 환경을 제공하며, 여러 개의 격리된 환경을 동시에 실행할 수 있습니다.
LXD: LXD는 리눅스 컨테이너를 관리하기 위한 사용자 친화적인 컨테이너 가상화 플랫폼입니다. 이는 LXC (Linux Containers) 기술을 기반으로 하며, LXC를 쉽게 사용할 수 있도록 고수준의 인터페이스를 제공합니다.