🐳Docker 란 ?
컨테이너 기반의 오픈소스 가상화 플랫폼
- 도커는 컨테이너를 관리하는 도구인 “컨테이너 런타임” 중 하나로 가장 유명한다.
컨테이너 (Container)
구동하려는 어플리케이션의 코드 뿐만 아니라 그 외에 필요한 부수적인 실행 환경까지 감싸서, 어디서든 쉽게 실행 할 수 있도록 해주는 제공하는 소프트웨어의 표준단위
- 컨테이너 박스에 다양한 화물을 넣을 수 있도록 규격화 되어 있고 트레일러와 같이 다양한 운송 수단으로 쉽게 옮길 수 있듯이 다양한 프로그램, 실행환경을 컨테이너로
추상화
하고 동일한 인터페이스르 제공해 프로그램의 배포와 관리를 단순하게 해주는 기술이다.
- 컨테이너 하나면 ! 조립PC, AWS, Azure, Google Cloud 등 어디서든 빠르고 안정적으로 실행할 수 있다.
🖥어플리케이션의 배포 환경의 변화 → VM vs Docker
전통적 배포 (Tranditional Deployment)
가상화 이전 의 방식이며 물리적 컴퓨터 한 대에 하나의 OS를 깔고 여러가지 프로그램을 설치하는 방식
- 문제점
- 한 대의 컴퓨터에서 여러 프로그램을 동작하려 할 때 특정 프로그램이 다른 프로그램의 동작에 간섭하거나 특정 프로그램이 성능을 독점할 경우 다른 프로그램의 선능이 저하된다는 문제가 발생
- ex ) 인터넷 뱅킹을 위해 보안 프로그램을 깔았을때 게임이나 웹의 성능이 떨어짐
- 컴퓨터를 두 대를 두고 하나는 인터넷뱅킹용, 하나는 게임용으로 둔다 ? → 비용이 발생
- 해결 방법 ⇒ 하나의 컴퓨터 안에서 두 개의 가상화된 컴퓨터를 동작시켜 서로 간섭을 일으키지 못하게 하자 !
가상화 배포 (Virtualized Deployment)
가상머신을 기반으로 배포하는 방식으로 하나의 물리적 컴퓨터에 하이퍼바이저를 이용하여 가상머신을 여러개 두고 독립적으로 동작시키도록 하는 방식
다른 자료에서는 가상머신을 Guest OS, 물리적 컴퓨터를 Host OS라고 한다.
가상머신
(Virtural Machein) : 가상 컴퓨터를 의미하며 CPU, 메모리, 저장장치 등을 개별적으로 할당 할 수 있다.
하이퍼바이저
(Hypervisor) : 하나의 시스템 상에서 가상화 컴퓨터를 여러 개 구동할 수 있도록 해주는 중간 계층
App
: 실행하고자 하는 프로그램
Bin/Library
: 프로그램이 실행하는데 필요한 환경과 관련된 파일
- 한계
- 가상머신은 완전한 컴퓨터로 일일이 운영체제를 설치하기 때문에 무겁고 느리다.
- 하이퍼바이저를 통해 가상머신을 처리하기 때문에 부가적인 시간, 즉
오버헤드
가 발생된다.
- 오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 및 메모리
A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다.
컨테이너 중심의 배포 (Container Deployment)
실행시킬 어플리케이션을 컨테이너로 감싸 프로세스를 격리하는 방식
- 하이퍼바이저라는 부분이 Container Runtime(컨테이너를 관리하는 도구, 여러 컨테이너 런타임중 가장 유명한 것이 도커이다.)으로 대체되었고, Virtual Machine이라고 된 부분은 Container로 대체되었다.
- 컨테이너는 OS 하단이 어떻게 동작하는지 직접 관심을 두지 않는다.
그래서 물리적인 컴퓨터가 아닌 환경에서도 구동 가능하다.
- 서로 다른 컨테이너는 하나의 OS에서 구동되며 CPU, 메모리 등의 자원이 독립적으로 할당된다.
- 두 프로그램 간에 간섭을 일으킬 수 없다.
- 단, 특정 프로그램이 OS에 문제를 일으키는 경우 해당 OS에서 구동 중인 다른 컨테이너에 문제가 발생될 가능성은 있다.
- 장점
- 프로그램을 구동하기 위해서 OS를 매번 설치할 필요가 없어서 가볍고 빠르다.
- 높은 이동성을 가진다.
- 각종 라이브러리, 디펜던시 들을 이미지 내에 포함하므로 환경에 의해 발생되는 문제가 거의 없다.
정리
🐳그래서 도커를 사용하는 이유 : “환경분리”
1. Environment disparity problem 극복
- 도커 컨테이너의 뛰어난 이식성 덕분에 어떠한 PC 환경에서든 도커는 애플리케이션의 환경이 동일하도록 만들어주어 각 PC들 간의 환경 차이 문제를 극복할 수 있다.
2. Scale-Out과 MSA 아키텍처와 찰떡궁합
- 한 개의 서버가 독립적인 여러 개의 컨테이너를 가질 수 있다는 것은 여러 개의 Application을 탄력적으로 운영할 수 있다는 뜻이다. 따라서, 특정 Application의 Traffic이 증가할 경우 해당 Application 컨테이너를 늘려 대응할 수 있다.
📎 참고 링크