
도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 컨테이너 기반의 오픈 소스 가상화 플랫폼이다. 도커는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다. 도커를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있다.
기존의 가상화 방식은 주로 OS를 가상화하였다. 가상 머신(VM)은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이다. 이 방식은 사용법은 간단하나 무겁고 느려서 운영 환경에서 사용하기에 어려움이 있었다.
추가적인 OS를 설치하여 가상화 하는 방법은 성능 문제가 있고 이를 개선하기 위해 프로세스를 격리하는 방식이 등장한다. 리눅스에서는 이 방식을 리눅스 컨테이너라고 한다. 리눅스 컨테이너 기술은 여러 애플리케이션과 그 의존성을 격리된 환경에서 실행할 수 있게 해주는 경량의 가상화 기술이다. 하나의 서버에 여러 개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼준 VM을 사용하는 느낌을 준다. 그렇지만 가상 머신보다 빠르고 가볍게 배포되며 호스트 운영체제의 리소스를 공유하여 더 효율적으로 동작한다.
도커의 가상화 기술은 리눅스 컨테이너 기술을 기반으로 한다. 도커는 이러한 가벼움과 빠른 배포, 관리의 용이성 등의 이점을 제공하여 애플리케이션을 쉽게 구축, 배포, 확장할 수 있도록 도와준다.

도커 이미지는 실행 가능한 환경을 구축하기 위한 파일과 설정 등을 포함하는 패키지이다. 기본적으로 응용 프로그램의 모든 것을 포함하며 컨테이너를 생성하는데 사용된다. 이미지는 여러 레이어로 구성되어 있고 각 레이어는 이전 레이어를 기반으로 새로운 변화를 나타낸다. 이미지는 필요한 파일만 포함하고 있으며 이를 통해 가볍고 효율적으로 공유되고 관리될 수 있다.
이미지는 상태를 저장하지 않는다(Stateless). 애플리케이션과 관련된 모든 파일과 라이브러리를 포함하고 있기 때문에 다른 환경에서도 동일한 애플리케이션을 실행할 수 있다. 또한 이미지는 한 번 생성되면 변경할 수 없다(Immutable). 변경 사항이 있을 경우 새로 생성해야한다.
도커 이미지는 도커 허브에 등록하거나 도커 레지스터리 저장소를 직접 만들어 관리할 수 있다. 누구나 쉽게 이미지를 만들고 배포할 수 있으며 현재 공개된 도커 이미지도 굉장히 많다.
컨테이너는 이미지의 인스턴스로 이미지를 실행하는 격리된 환경이다. 이미지를 기반으로 생성되어 실행 가능한 환경을 제공하며 격리된 프로세스와 파일 시스템을 가지고 있다. 컨테이너는 호스트 시스템과는 독립적으로 실행되며 동일한 이미지를 기반으로 여러 컨테이너를 생성할 수 있는 1:N 관계이다. 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않고 남아있는다. 추가되거나 변하는 값은 컨테이너에 저장된다.
정리하자면, 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있으므로 추가적인 설치, 컴파일 등이 필요하지 않다. 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러의 컨테이너를 실행할 수 있고 여러 대의 서버를 실행하는 것도 가능하다.
참고
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html