Go언어로 작성된 리눅스 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼이다.
-> 특정 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램이다.
가상머신(Virtual Machine)
은 하이퍼바이저(Hipervisor)를 이용해 여러개의 운영체제를 하나의 호스트에 생성해서 사용하는 방식이다.
이렇게 생성된 여러 개의 운영체제는 가상머신이라는 단위로 구분되고 각 가상머신에는 Ubuntu, CentOS 등의 운영체제가 설치되어 사용된다.
가상머신을 사용하면 하나의 물리적 컴퓨터에서 여러 운영체제를 실행할 수 있다는 장점이 있지다. 하지만
, 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 성능 손실이 발생한다. 또한, 가상머신은 라이브러리, 커널 등을 전부 포함하기에 배포하기 위한 이미지로 만들었을 때 이미지의 크기도 커진다.
- 하이퍼바이저를 통해 여러개의 운영체제가 생성되고 관리된다. -> 가상머신
- 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 거치므로 성능 손실이 크다.
- 가상머신은 배포할 때 용량이 크다.
도커 컨테이너
에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 이미지를 만들 경우 용량이 대폭 줄어들게 된다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다.
- 도커 컨테이너는 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만드므로 성능 손실이 거의 없다.
- 가상머신과 달리 커널을 공유해서 사용하므로, 컨테이너에는 라이브러리 및 실행 파일만 존재한다. 따라서, 이미지의 용량이 가상머신에 비해 작다.
- 배포하는 시간이 가상 머신에 비해 빠르고, 성능 손실도 거의 없다.
Docker File
: 도커 이미지를 만들 때 사용하는 파일이다. docker build 명령어를 실행시키면 Dockerfile을 감지하여 도커 이미지를 생성한다.
Docker Image
: 도커 이미지를 docker run 명령어를 통해 실행시키면 Docker Container를 만들 수 있다.
도커에서 서비스 운영에 필요한 서버 프로그램, 코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 도커 이미지라고 한다. 특정 프로세스를 실행하기 위한 모든 파일과 설정 값을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치 할 필요 없는 상태의 파일을 의미한다.
도커 이미지를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징, 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
- app store에서 program을 다운 받아서 실행시키면 process가 실행된다.
- Docker Hub에서 image를 pull 받아서 실행시키면 container가 생성된다.
위의 예시와 같이 생각하니 이해가 수월했다.