devops

Docker, Container란? 본문

DevOps/Docker

Docker, Container란?

vata500 2022. 5. 24. 23:10
반응형

2013년에 등장한 도커(Docker)는 Docker Hub S/W 저장소와 함께 빠르게 성장하였고, 개발자들으느 쉽게 application을 포장하고 컨테이너 방식으로 실행할 수 있게되었다.

컨테이너는 쉽게 말해서,

 실행 환경에 구애받지 않고 Application을 실행할 수 있다

컨테이너 기술은 어플리케이션을 컨테이너 내에서 구성한다. 그래서 컨테이너에서 실행 중인 어플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있다. 이는 컨테이너가 실행환경과 격리되어 있기 때문에 가능하다.

컨테이너의 격리 요소

1. 프로세스(Process)

특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있으며, 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너에 영향을 줄 수 없다.

2. 네트워크

컨테이너 하나에 하나의 IP 주소가 할당되어 있다.

3. 파일 시스템

컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있다. 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.

컨테이너는 가상 머신(Virtual Machine)이다. 

하나의 호스트 PC 위에 여러 개의 독립적인 PC가 작동할 수 있게하는 기술이다. 비슷한 application으로 VMware, VirtualBox 등이 있다.

도커는 운영체제 상관없이, 쉽게 설치할 수 있다.

어플리케이션 구성 자체가 컨테이너화되면 'YAML 파일 1개 + 명령어 1줄' 로 모든 어플리케이션 실행 환경 구성이 완료된다.

즉, OS 상관없이 즉시 어플리케이션 실행 환경을 만들 수 있으며, 개발을 컨테이너 위에서 진행할 때, 모든 개발팀이 동일한 환경에서 개발을 진행할 수 있다.

배포환경도 쾌적하게.

웹 서비스의 배포는 "어떤 어플리케이션이 특정 런타임 환경 위에서 실행되고 사용자에게 이를 제공하는 것"이라고 할 수 있다. 컨테이너와 AWS의 EC2를 활용하면 기존방식의 배포보다 쉽고 빠르게 어플리케이션을 배포할 수 있다.

컨테이너의 장점

컨테이너의 큰 장점은 '실행환경의 일치'다. 트래픽을 효율적으로 분배하기 위한 서버 증설에 컨테이너가 많이 활용되고 있다. 동일한 Application 이미지를 바탕으로 새 서버에 해당 Application을 컨테이너로 실행하고 로드밸런서에 이 서버를 추가하면 된다.

위 이미지에서 '오케스트레이터'라고 불리는 것이 여러 컨테이너를 관리하는 데 사용되는 쿠버네티스다.

컨테이너 vs VM

도커의 이미지는 어플리케이션 단위로 만들어져 있다. 그러나 VM은 VM 위에 OS를 설치하는 과정이 필요하다.

좌 : VM, 우 : 도커

즉, VM 구성요소에는 OS가 포함되지만 Docker에는 OS가 없다. 도커라는 플랫폼 위에 컨테이너들이 올라가 있고 그 아래에 OS가 존재한다.

*하이퍼바이저(Hypervisor) : VM을 생성하고 구동하는 소프트웨어다. VMware, VirtualBox같은 프로그램이 하이퍼바이저라고 불린다.

각 컨테이너들은 Host OS의 커널(Kernel)을 공유하고 있는 것을 알 수 있다.

* 커널(Kernel) : 시스템 콜과 같이 OS의 핵심 기능을 구현한 프로그램

윈도우 혹은 MacOS에서 Docker를 실행할 때, 컨테이너는 Linux로 작동한다. 이는 윈도우와 MacOS에서 리눅스 커널을 사용하지 않으나, 리눅스 커널을 VM 형태로 실행시킬 수 있는 하이퍼바이저(Hypervisor)를 자체적으로 구동하기 때문에 가능하다. 

반응형
Comments