도커는 컨테이너 기반의 오픈 소스 프로그램으로, 애플리케이션을 격리된 환경에서 실행하고, 관리할 수 있도록 도와준다. Docker를 사용하면 애플리케이션을 개발하고 배포하는 과정에서 환경 의존성을 줄이고, 일관된 실행환경을 제공하며, 다양한 운영체제 및 환경에서의 호환성을 보장할 수 있다.
👉Docker는 클라우드 네이티브 애플리케이션과 DevOps 환경에서 널리 사용된다.
애플리케이션과 그 의존성(라이브러리, 설정 파일 등)을 포함하는 경향의 실행 환경
컨테이너는 격리된 환경에서 실행되며, 동일한 호스트에서 여러 컨테이너를 동시에 실행 가능하다.
컨테이너는 가상화 기술이 아닌 운영 체제 수준의 격리를 제공하여 빠르고 효율적이다.
( 컨테이너는 도커 이미지로부터 생성된 실행 환경 )
컨테이너를 생성하기 위한 템플릿
이미지는 애플리케이션과 그 의존성, 설정 등을 포함한 읽기 전용 파일 시스템
이미지는 DockerFile을 기반으로 빌드되며, 컨테이너의 생성 및 실행시 필요한 모든 설정을 포함한 것으로 상태값을 가지고 변하지 않으며, 컨테이너가 실행시 사용된다.

위의 그림은 Docker의 기본적인 개념을 설명하는 다이어그램이다. Docker를 사용해 소프트웨어를 컨테이너화하여 어디서든 일관되게 실행할 수 있도록 한다.
1. Dockerfile:
왼쪽 상단에 있는 'Dockerfile'은 Docker 이미지의 기본 청사진이다. 이 파일에는 소프트웨어가 설치되고 구성되는 방법에 대한 명령어들이 포함되어 있다.
2. Docker 이미지 (Docker image):
'Dockerfile'을 사용하여 docker build 명령어를 실행하면, 이로부터 Docker 이미지를 생성할 수 있다. 이 이미지는 애플리케이션 및 그 실행에 필요한 모든 종속성을 포함하는 템플릿이다.
그림에서 CD 모양의 아이콘으로 표현된 부분이 Docker 이미지를 나타낸다.
3. Docker 컨테이너 (Docker container):
생성된 Docker 이미지를 기반으로 docker run 명령어를 실행하면 Docker 컨테이너가 생성된다. 컨테이너는 이미지의 실행 인스턴스이며, 실제 애플리케이션이 이 컨테이너에서 실행된다.
요약하자면, Dockerfile에서 Docker이미지를 만들고, 그 이미지를 사용하여 여러 개의 Docker 컨테이너를 실행할 수 있음을 나타낸다.
👉 도커는 리눅스 운영체제에 독립적인 환경을 만드는 것이다. 그리고 리눅스 운영체제가 서버에서 사용되는 경우가 많고, 리눅스용 소프트웨어도 서버용 소프트웨어가 많기 때문에, 도커는 대부분 서버환경을 전제로 하는 경우가 많다.

도커의 동작 구조는 위와 같다.
도커에서는 컨테이너가 완전히 분리되어 있으므로, 밑의 운영체제(리눅스) 주변부분이 커테이너 속 명령을 전달받고 이를 커널에 전달하는 구조로 되어 있다.
커널이란?
하이퍼바이저를 통해 하드웨어를 가상화하고, 각 VM이 독립적인 운영체제를 실행한다.
각 가상머신은 전체 운영체제와 CPU를 포함하고 있어서,
메모리와 저장소의 사용량이 상대적으로 많다.
완전히 독립적인 운영체제 환경을 제공하므로 강력한 격리성을 가지고 있다
| 도커(컨테이너) | 가상머신 |
|---|---|
| 하나의 물리적 컴퓨터에서 하나의 운영체제를 사용하지만, 각 애플리케이션이 자신의 환경을 가지고 있는것 | 마치 여러 개의 컴퓨터를 하나의 물리적 컴퓨터 위에 만들수 있는것 |