[컨테이너] Docker란 무엇? 컨테이너 가상화 사용 이유는?

쑤야ssueyaa·2023년 12월 3일
0

CS/컨테이너

목록 보기
1/1

🔎도커란?

배경

  • 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경 문제를 해결하기 위해 등장
  • 툴 업데이트, 회사의 툴 사용 변경, 회사의 언어 정책 변경 등 기존에 서버와 개발 환경이 변경되면 컴퓨터 셋팅(개발 환경) 등을 다시하거나 그 과정에서 발생하는 문제들과 같이, 여러모로 불편한 점이 많았음
  • 도커가 등장하고 서버관리/개발 방식이(컨테이너) 완전히 편리하게 바뀌게 됨

도커(Docker)

: 도커는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트입니다. 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말합니다.
-> 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼

도커 엔진(Docker Engine)

: 도커 엔진은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트입니다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다.

도커 사용 이유

  1. 도커 허브에 올라온 이미지와 docker-compose.yml의 설정으로 원하는 프로그램을 편안하게 설치가 가능합니다.
  2. 컨테이너를 생성하여 분리된 환경에 설치하므로 제거도 쉽습니다.
  3. 하나의 서버(로컬 호스트)에 포트만 변경하여 동일한 프로그램을 실행하기도 쉽습니다.
  4. 도커를 사용하지 않으면 환경변수나 경로 등의 충돌로 피곤하기 그지 없습니다.

도커가 나온 이후, 어떠한 프로그램도 컨테이너로 만들 수 있게 되었습니다. 서로 다른 프로그램이더라도 컨테이너로 규격화되었고, AWS, Azure, Google cloud 등 어떤 환경에서도 돌아갑니다.

이러한 도커는 가상 머신과 비슷하게 생각할 수 잇지만 비슷한 점과 다른 점이 있습니다.
도커는 가상머신처럼 독립적으로 실행되지만, 가상머신보다 빠르고 쉽고 효율적입니다. 도커는 컴퓨터 자원을 그대로 사용합니다. 가상머신과 도커의 차이를 하기에서 좀 더 알아보겠습니다.

Virtual Machine(가상머신) vs Docker Container(도커 컨테이너)

Virtual Machine(가상머신)

  • 가상머신은 Hypervisor를 통해 여러 개의 운영체제(우분투, CentOS)가 생성되고 관리됨(Guest OS)
  • 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 Hypervisor를 거치므로 -> 성능 손실이 큼
  • 가상머신은 Guest OS를 사용하기 위한 라이브러리, 커널 등을 포함하므로 -> 배포할 때 용량이 큼

Docker Container(도커 컨테이너)

  • 도커 컨테이너는 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만드므로 -> 성능 손실 없음 無
  • 가상머신과 달리 커널을 공유해서 사용하므로, 컨테이너에는 라이브러리 및 실행파일만 있으므로 -> 용량이 작음
  • 컨테이너를 이미지로 만들었을 때 배포하는 시간이 가상머신에 비해 빠르며, 사용할 때의 성능 손실 또한 거의 없음

도커 이미지와 도커 컨테이너

도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너이며 도커 엔진의 핵심입니다.

도커 이미지와 컨테이너는 1:N 관계입니다.

도터 이미지와 컨테이너의 관계는 운영체제에서의 프로그램<->프로세스, 객체지향 프로그래밍에서의 클래스 <-> 인스턴스의 관게와 비슷하다고 생각하면 이해가 편합니다.

Docker File -> Docer Image : Docker File은 도커 이미지를 만들 때 사용하는 파일. docker build 명령어를 실행시키면 도커 이미지를 만들 수 있습니다.

Docer Image -> Docker Container : Docker Image를 docker run 명령어를 실행시키면 Docker Container를 만들 수 있습니다.

도커 이미지

컨테이너를 생성할 때 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso파일과 비슷한 개념입니다. 이미지는 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용되며 여러 계층으로 된 바이너리 파일로 존재합니다.

도커 컨테이너

도커 이미지로 생성할 수 있으며, 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는, 호스트와 다른 컨테이너로부터 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간(프로세스)이 생성됩니다.

대부분의 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 때문에 도커 이미지의 목적에 맞도록 사용되는 것이 일반적입니다.

컨테이너(Container) 가상화의 이점

  1. 일관된 환경 : 컨테이너는 실행 환경을 패키징하므로, 개발 환경과 프로덕션 환경 간의 일관성을 유지할 수 있습니다.
  2. 쉬운 배포 : 컨테이너는 필요한 모든 것을 포함하고 있으므로, 배포 및 확장이 간단하고 빠릅니다.
  3. 자원 효율성 : 가상 머신에 비해 가볍고 빠르게 시작되며, 여러 개의 컨테이너를 하나의 호스트 시스템에서 실행할 수 있어 자원을 효율적으로 사용할 수 있습니다.
  4. 스케일링과 관리 용이성 : 컨테이너 오케스트레이션 도구를 사용하여 여러 컨테이너를 쉽게 관리하고 스케일링할 수 있습니다.

References

https://seosh817.tistory.com/345
https://wooody92.github.io/docker/
https://seosh817.tistory.com/345#Virtual

profile
매일 1%씩이라도 성장하는 사람이 되자

0개의 댓글