Docker는 일종의 “실행 환경 가상화 도구”라고 할수 있다. 가상 머신과는 비슷 하면서도 다른 실행 방식을 보여주는데 주요한 차이점은 디바이스나 기타 다른 장치들을 소프트웨어로 가상화 하지 않는다는 것이다. 이를 통해 성능 상의 손실을 줄일 수 있게 되었으며 더욱 간편하게 격리된 실행 환경을 사용할수 있게 되었다.
docker는 vm 이 아니다. docker container 그 자체는 단순히 linux process 에 지나지 않는다. 다만 해당 process가 독립적으로 동작할수 있도록, 별도의 namespce 를 제공하는 것이다. 이는 예전의 chroot와 닯은 구석이 있다고 할수 있다. docker container 의 kernel 은 컨테이너 외부의 kernel을 그대로 사용하고 있는 것이다. container 내부가 마치 독립적인 vm인것처럼 container 내부에서 실행시킨 process가 보이지만 이것은 사실 kernel 의 눈속임 이다. linux kernel의 namespace로 filtering 하여 보여줄 뿐인 것이다. 그래서 docker 명령어는 process를 관리하는 명령과 닯아 있다. 실제로 관리 대상도 처음 실행한 바로 그 process이다. 그 process가 죽으면 하위 프로세스는 전체가 다 죽는다. error code 또한 처음 실행한 process의 종료 코드로 판별한다.
가볍고 가상환경 구축에 걸리는 시간이 매우 짧고 대부분의 운영체제에서 동작한다는 것을 활용해서 다음과 같은 부분에 활용할수 있다.
- 사전 설정이 귀찮거나 어려운 프로그램의 배포
- 사전에 환경이 모두 같아야 하는 교육용 환경 설정
- dockerfile을 활용한 간단한 paas 서비스
- 학습용 가상환경 할당
- 개발/빌드 환경 구축