기본

Docker

초혼 2023. 3. 11. 21:44

컨테이너(Containers)

새로 만든 애플리케이션을 다른 환경에서 실행할 때 문제가 자주 발생

-> 로컬 설정, 함수 라이브러리, 네트워크 기술, 보안 정책, 스토리지 차이 등

 

이를 해결하기 위해 애플리케이션과 함께 그 실행에 필요한 라이브러리, 바이너리, 구성 파일 등을 패키지로 묶어서 배포

-> 컨테이너

 

 

가상화

컨테이너는 OS를 제외한 애플리케이션에 필요한 모든 파일을 패키징한 것

-> OS 레벨 가상화

 

가상머신(VM)은 서버에 하이퍼바이저를 설치하고 그 위에 가상 OS와 애플리케이션을 패키징한 것

-> 하드웨어 레벨 가상화

 

하드웨어 레벨 가상화의 경우 패키징에 OS를 포함해야되기 때문에 수 GB의 용량을 갖지만 OS 레벨 가상화는 수십 MB 밖에 되지 않는다

-> 한 서버에서 가동할 수 있는 가상화 개수가 10배 가까이 차이난다

-> OS 부팅 여부도 갈리기 때문에 서비스 시작까지 걸리는 시간에서도 차이가 난다

 

OS 레벨 가상화는 메인 OS와의 접점이 더 많기 때문에 메인 OS가 해킹 당할 가능성이 더 높다

리눅스 외에 다른 OS를 사용하기는 힘들다

 

 

리눅스 컨테이너(LXC)

하나의 리눅스 시스템 위에서 프로세스들을 격리시켜서 독자적인 시스템 환경을 구축

-> 리눅스 컨테이너에서 가상화된 프로세스들은 리눅스을 호환해야한다

 

프로세스를 격리하기 때문에 CPU나 메모리 낭비가 적다

 

 

이미지(image)

컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것

 

이후 실행으로 추가되거나 변경되는 값은 컨테이너에 저장되고 이미지에는 반영되지 않는다

같은 이미지로 여러 컨테이너를 만들 수 있고 컨테이너의 상태는 이미지에 영향을 주지 않는다

 

 

도커(Docker)

컨테이너 기반 오픈소스 가상화 플랫폼

다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화

 

백엔드 애플리케이션, DB서버, 메시지 큐 등 어떤 애플리케이션이라도 컨테이너로 추상화할 수 있다

PC, AWS, Azure, Google Cloud 등 어디에서든 실행할 수 있다

 

거의 모든 OS에서 실행할 수 있는 가상화된 컨테이너 기반을 형성 -> 도커 엔진

호스트 OS와 컨테이너 간의 인터페이스를 제공

 

초기에는 리눅스에서 사용하도록 설계되었지만 가상화를 통해 Windows와 MacOS에서도 작동 가능