가상머신은 가상머신을 실행하는 호스트 머신에 가상화된 하드웨어와 OS를 구축하여 호스트와는 다른 환경을 구축할 수 있다.
컨테이너는 하드웨어를 소프트웨어로 재구현하는 가상머신과는 달리 프로세스의 실행 환경을 격리한다. 도커는 이러한 컨테이너형 가상화를 지원하는 도구이다.
도커는 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해준다.
도커를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수 있고 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며, 도커만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능하다.
도커 파일 : 서버 운용 기록을 코드화 한 것 도커 이미지 : 도커 파일에 실행할 시점을 더한 것 도커 컨테이너 : 도커 이미지에 실행 시점에 수정되어야 할 정보들을 더한 것
Container
오른쪽이 기존의 가상화 방식인데, 이 방식은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식이다. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없다. 간단하게 이야기해서 각각의 가상머신이 OS를 자체적으로 가지고 있기 때문에 OS를 가상머신 이미지에 포함해야 하고, 배포이미지의 용량이 커지게 된다는 단점이 있다.
왼쪽은 Docker의 container 가상화 방식은 OS레벨은 공유하고 어플리케이션 레벨에서는 각각의 어플리케이션을 격리해서 실행 할 수 있습니다. 그래서 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행할수 있다. 그리고 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고, 패키지를 설치할 수 있으며, 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수 있다.
Image
도커 이미지는 컨테이너를 정의하는 읽기 전용 템플릿이다.
컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.
컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다.
같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있는다.