본문 바로가기
프로그래밍/Linux

Docker가 무엇인가? 가상머신과의 차이점은?

by 공부하는EJ 2022. 6. 10.
728x90

 

 

💡Docker 가 무엇인가?

 

도커는 리눅스 컨테이너 기술을 기반으로 하는 오픈 소스 서비스이다. 도커를 통해 애플리케이션 실행 환경을 코드로 작성할 수 있으며, OS를 격리화하여 간리할 수 있다. 그럼 도커, 리눅스 컨테이너, 실행환경, 격리화는 무엇일까?

 

By default, a container has no resource constraints and can use as much of a given resource as the host's kernel scheduler wllows. Docker provides ways to control how much memory, or CPU a container can use, setting runtime configuration flags of the docker run command. 

 

Linux Container란?

 

리눅스 컨테이너란 리눅스 기반의 기술 중 하나로, 필요한 라이브러링롸 애플리케이션을 모아서 서버처럼 구성한 것을 말한다. 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유하고 있다. 

 

1. 프로세스의 구획화

- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있다.

- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에 영향을 줄 수 없다.

 

2. 네트워크의 구획화

- 기본으로 컨테이너 하나에 IP주소가 할당되어 있다.

 

3. 파일 시스템의 구획화

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

 

Docker가 해결할 수 있는 문제는?

 

1. 환경 표준화

 

대표적인 운영 체제에는 Linux, Windows, MacOS가 있다. 그리고 엔지니어는 자신이 개발하는 애플리케이션이 어떤 환경에서 구동될지 생각하고 개발한다. 그리고 개발하려고 하는 여러 앱이 구동하는 운영체제가 다르다면 환경에 따라 조금씩 변경할 부분이 발생하게 된다. 같은 Linux인 Ubuntu, CentOS, Debian은 서로 다른 환경이므로 여러 버전이 존재할 수 있다.

 

예를 들면, 윈도우에서 개발한 애플리케이션의 경로는 \(백슬래시) 폴더로 표현하고 맥이나 리눅스 경로는 /(슬래시) 폴더로 표현한다. 이는 아주 작은 예시일 뿐, 환경이 다르면 개발자들이 조정할 문제가 수도 없이 생기며, 수작업으로 환경을 맞추는 일은 쉬운 일이 아니다. 

 

2. 수작업으로 일치시키는 환경 구성

 

모든 개발자와 사용자가 동일한 OS 환경을 유지하는 경우, 애플리케이션 환경 구성이 어느 정도 빨라질 수는 있지만, 같은 OS라도 사용자의 사용 목적에 따라 달라지는 구성도 있다.

 

같은 운영체제를 사용한다 할지라도 로컬 PC에 설정된 값이 모두 동일할 수는 없기 때문에, 애플리케이션을 설치할 때 컴퓨터의 환경에 맞게  변경해야하는 부분이 있다. 방화벽 설정, 사용자 권한 설정, Port 설정 등이 이런 부분에 해당하게 된다. 그리고 컴퓨터에 다양한 설정 작업을 수작업으로 하게 된다면 많은 시간이 걸릴 뿐만 아니라, 설정 간에 간섭이 일어나 프로그램이 멈출 수도 있다.

 

3. 리소스 격리성

 

실제로는 하나의 컴퓨터를 사용하지만, 여러 개의 컴퓨터를 이용하는 것처럼 하는 방법을 리소스 격리성이라고 한다. 리소스 격리성을 제공하는 기술로는 가상머신, 도커 등이 있다.

 

 

 

가상머신과 도커는 격리성을 제공하기 때문에, 각 애플리케이션마다 다른 컴퓨터에서 실행되는 것처럼 IP나 Port를 다르게 설정할 수 있다.

 

도커와 가상 머신의 차이는 무엇일까?

 

1. 도커는 가상 머신칸큼 견고한 격리성을 제공하지 않는다.

2. 도커는 리눅스 컨테이너를 이용한 기술로, OS위에 다른 OS를 실행하는 것이 아니므로 좋은 성능을 낼 수 있다.

3. 애플리케이션에 대한 환경 격리성을 중심으로 한 VM 과는 달리, 도커는 컨테이너 관점에서 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공하는 데 있다.

 

  Docker Virtual Machine
운영체제 지원 host OS를 공유 host OS 위에 guest OS가 돌아감
보안 운영체제를 공유하기 때문에 보안적으로 취약함 운영체제를 공유하지 않기 때문에 강한 독립성
=> 높은 보안성
이식성 OS 구분 없이 컨테이너 이식 및 즉시 실행 가능 각각의 OS가 달라 이식이 어려움
성능 기술의 목적이 다르기 때문에 비교하는 것을 적절하지 않다.

 

 

Docker Cotainer Lifecycle

 

 

왜 Docker를 사용하는가?

 

컨테이너 방식의 장점

1. 의존성 충돌 문제를 해결해준다.

2. 개발과 배포 환경을 일치시킨다.

3. 수평 확장을 쉽게 해준다.

4. 각 서버에서 새로운 내용을 배포하기 쉽게 만들어 준다.

 

 

DOCKER의 핵심 키워드

 

컨테이너

: 컨테이너는 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애 받지 않고 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자이다.

 

이미지

: 실행되는 모든 컨테이너는 이미지로부터 생성된다. 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있다. 이미지를 이용해 여러 개의 컨터이너를 생성할 수 있어 애플리케이션의 수평확장이 가능하다. 

 

레지스트리

: 이미지는 레지스트리에 저장된다. 대표적인 이미지 레지스트리로는 Docker, Hub, Amazon ECR등이 있다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 된다.

 

728x90

댓글