도커란?
컨테이너를 만들고 관리하기위한 도구
소프트웨어 개발에서 컨테이너는 소프트웨어의 표준화된 유닛(코드 패키지)이다.
- 코드 패키지란
중요하고 코드를 실행하는데 필요한 종속성과 도구
nodeJs로 앱을 만들고있다면 nodeJs는 java script 런타임으로 서버에서 java script 코드를 실행할 수 있다.
Docker로 빌드된 컨테이너와 응용프로그램이 있다면 그 컨테이너에 응용프로그램 소스도 있을 수 있다.
nodeJs 런타임과 해당 코드를 실행하는데 필요한 다른 도구도 마찬가지.
따라서 응용 프로그램은 동일한 nodeJs 코드와 동일한 nodeJs 코드를 사용할 수 있다.
장점
1. 편리한 관리 : 서비스 운영환경을 이미지로 생성했기 때문에 이미지 자체만 관리하면 된다.
특히 이미지를 중앙관리하여 체계적인 배포와 관리를 할 수 있다.
또한 이미지 생성 설정도 파일로 되어있기 때문에 버전관리 시스템을 활용할 수 있다.
2. 확장 : 이미지 하나로 서버를 계속 찍어낼 수 있다.
따라서 클라우드 플랫폼의 자동확장 (Auto Scaling) 기능과 연결하면 서비스를 쉽게 확장할 수 있다.
3. 테스트 : 개발자의 PC나 테스트 서버에서 이미지를 실행하기만 하면 서비스 운영 환경과 동일한 환경이 구성되기 때문에 테스트가 쉽다.
4. 가볍다 : 운영체제와 서비스 운영환견을 분리하여 가볍고 어디서든 실행 가능한 환경을 제공한다.
Docker를 써야하는 이유
기존의 가상운영체제는 컴퓨터 (호스트 운영체제) - 윈도우 or MacOs or Linux 위에 가상컴퓨터를 설치하고 그 안에서 추가 도구를 설치하는식으로 진행되어왔다.
이 경우
-라이브러리 설치
-종속성 설치
-도구 설치
-소스복사
등의 과정을 거쳐 환경을 구축하고 다중서버일 경우 동일한 환경을 다시 구축한 후 확인 작업이 필요하다.
이 경우 가장 큰 문제는 여러 가상머신에서 발생하는 오버헤드.
컴퓨터 위에 실행되는 독립 실행 컴퓨터가 여러대 있는 경우 공간과 리소스가 많이 낭비되며, 기계 내부에 새 컴퓨터를 설치할 때마다 메모리, CPU, 하드 드라이브의 공간을 많이 잡아먹는다.
또한 애플리케이션에 직접 필요하지는 않지만 여전히 기본값으로 설정되어있는 많은 도구가 모든 가상머신에 설치되어 있을 수 있다.
가상 머신의 장단점
장점 | 단점 |
분리된 환경을 만들 수 있다. | 낭비되는 공간을 중복해야한다. |
각각 고유한 설정을 할 수 있다. | 성능이 느리고 부팅 시간이 길 수 있다. |
신뢰할 수 있는 코드를 공유하고 재생산할 수 있다. | 복제와 조작이 가능은 하나, 까다롭다. |
배포시 개발~프로덕션까지 가상머신과 동일한 방식으로 구성해야한다. |
Docker Container
- 운영체제와 시스템에 미치는 영향이 적다
- 게스트 OS를 설치하지 않고 이미지에 서버운영을 위한 프로그램과 라이브러리만 격리해서 설치하고 OS 자원(시스템콜)은 호스트와 공유할 수 있기 때문에 이미지 용량을 크게 줄일 수 있다.
- 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다.
- 이미지 버전관리 기능을 제공하고, 중앙관리를 위해 저장소에 있는 이미지를 올리고 받을 수 있다.