가상 머신과 Docker
가상 머신
- 가상 머신은 편하지만 성능이 좋지 못한 단점 존재
- 가상 머신은 완전한 컴퓨터여서 게스트 OS 설치 필요
=> 이미지 안에 OS 가 포함되기 때문에 용량이 커짐
- 이미지 생성과 실행 기능만 있고 관리 기능 부족
Docker
- 반가상화보다 경량화된 방식
- 게스트 OS 를 설치하지 않음으로써 이미지 용량 줄임
=> 서버 운영을 위한 프로그램과 라이브러리만 설치
=> OS 자원은 호스트와 공유
- 하드웨어 가상화 계층이 없어 가상 머신에 비해 빠르다

- 이미지 생성과 배포에 특화된 기능 제공
=> 이미지 버전 고나리 기능 제공
=> 저장소에 이미지를 push, pull
=> DockerHub 제공
Docker 이미지와 컨테이너
이미지
- 베이스 이미지 : 리눅스 배포판의 유저랜드만 설치된 파일
- 이미지 : 베이스 이미지에 필요한 프로그램, 라이브러리, 소스 등을 설치 후 하나의 파일로 만든 것
- 베이스 이미지에서 바뀐 부분만 이미지로 생성 후, 실행 시 베이스 이미지와 바뀐 부분을 합쳐서 실행

- 이미지를 통째로 생성하지 않고, 바뀐 부분만 생성한 뒤 부모 이미지를 계속해서 참조하는 방식으로 동작
=> 이를 레이어라고 부른다.
- 서버 구성을 미리 해놓은 Docker 이미지를 사용하면 서버 실행 시마다 컴파일 등의 작업 없이 의존성 문제 해결 가능.
컨테이너
- 이미지를 실행한 상태, 특정 실행 파일 등을 위한 실행 환경
- 이미지 하나로 여러 개의 컨테이너 생성 가능
- 이미 실행된 컨테이너에서 변경된 부분을 이미지로 생성 가능
- 도커는 이러한 컨테이너를 구축하기 위한 도구