
Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 오픈 소스 가상화 플랫폼입니다.
동명의 기업에 의해 개발되었으며, 현재 업계 표준의 플랫폼으로 자리잡게 되었습니다.
가상화?
가상화(Virtualization)는 하드웨어나 소프트웨어 자원을 마치 여러 개 인 것 처럼 나누거나, 반대로 여러 개의 자원을 모아 마치 하나인 것 처럼 흉내내어 실제처럼 사용할 수 있게 만드는 기술입니다.
하나의 물리적 기기에서 여러 개의 가상 머신(VM)를 실행하거나, 하나의 가상 서버에서 여러 개의 운영 체제(OS)나 애플리케이션을 실행하는 것도 모두 가상화의 예시가 될 수 있습니다.

좀 더 쉽게 비유해보겠습니다. 큰 오피스텔이 한 채 있을 때, 각 층마다 다른 업체 또는 사무실이 입주해 있을 것입니다. 오피스텔 건물 하나를 하나의 PC라고 보면, 각 층은 서로 다른 가상 OS로 볼 수 있습니다. 각 층은 하나의 건물을 공유하지만 사실상 별개의 업체인 것 처럼, 가상 OS들 또한 같은 물리적 자원을 공유하지만 별개의 존재인 것 처럼 취급되는 것이죠.
Docker를 사용하는 이유
- 개발 환경의 일관성과 유연성 프로젝트마다 요구하는 버전이나 의존성에 대한 정보를 모두 컨테이너가 담고 있어, 어디서든 똑같이 실행되는 개발 환경을 구성할 수 있습니다.
- 경량성과 빠른 실행 컨테이너는 OS 없이 커널만 공유해 리소스 사용을 최소화하기 때문에, 실행/종료가 매우 빠릅니다.
- 배포 및 운영 자동화에 최적화 이미지 기반 배포로 언제 어디서나 간편하게 서비스를 배포할 수 있습니다. 또한 활성화된 Docker 생태계를 통해 다양한 이미지를 필요에 따라 쉽게 찾아 사용할 수 있습니다.
컨테이너(Container)
컨테이너는 가상화 기술 중 하나입니다. 기존의 가상화(VM)는 하나의 기기에서 여러 개의 OS를 실행시키는 하드웨어 가상화 방식을 사용하였습니다. 컨테이너는 이와 달리 OS 수준에서 여러 개의 프로세스를 실행하는 방식을 사용합니다.

VM 방식은 OS 전체를 가상화 하여, 하나의 VM이 Host OS와 완벽하게 분리됩니다. 이 때문에 일정 수준의 보안성을 보장할 수 있지만, 아무래도 OS 위에 또 OS가 구성되나보니 시스템 자체가 무거워질 수 밖에 없습니다.
컨테이너 방식은 OS를 공유하고, Docker 엔진에서 구성한 컨테이너에는 바이너리만 올리면서 시스템이 가벼워집니다. 이 컨테이너는 가벼우면서도 라이브러리/시스템 도구/코드/런타임 등 소프트웨어를 실행하는 데 필요한 거의 모든 것이 포함되어 있습니다.
이미지(Image)
컨테이너는 반영구적입니다. 이 말은 한 번 설치되면 계속 지속되는 것이 아니라, 언제든지 다시 포장해서 배포하고 또 새로운 컨테이너를 가져와 설치할 수 있다는 뜻입니다. 소프트웨어 개발에 필요한 코드나 의존관계등의 설정값들이 이미 컨테이너 안에 다 포함되어 있기 때문입니다. 하지만 이는 컨테이너 형식 그대로 전달되지 않고, 이미지(Image)라는 형식으로 배포됩니다.

이미지는 컨테이너를 실행할 수 있는 파일이나 설정 값등을 포함한 Docker의 최소관리 단위입니다. Docker는 스냅샷 기능이 있어 특정 시점에서의 컨테이너 상태를 사진 찍듯이 저장하여 이미지파일로 만들 수 있습니다. 이제 다른 사용자는 이 이미지 파일을 이용하여 작업할 새로운 컨테이너를 만들 수 있습니다. 하나의 이미지로부터 여러 개의 컨테이너를 만들 수 있으며, 컨테이너의 상태가 수정되거나 삭제 되더라도 처음 이미지는 변하지 않습니다.
이미지 파일은 변경이 불가능한 불변파일입니다. 그렇다고 컨테이너의 환경이 달라질 때 마다 이미지를 새로 만들기에는 이미지파일 하나하나가 상당히 무거운 편입니다. 그렇기 때문에 Docker는 레이어라는 개념을 통해 이미지 파일을 관리합니다. 이미지는 다수의 레이어로 구성될 수 있으며, 새로운 명령이 실행될 때 새 레이어가 위에 쌓입니다. 동일한 레이어는 이미지 간에 공유되기 때문에 불필요한 메모리 중복도 줄일 수 있습니다.

예를 들어 위 그림과 같이 ubuntu라는 이미지가 레이어 A, B, C로 구성되어 있을 때, 사용자는 여기에 nginx 레이어를 추가해 새로운 nginx 이미지를 만들 수 있습니다. 이 때 레이어 A, B, C는 새로 만들어지지 않고 기존의 레이어와 공유됩니다.
Docker 파일
Docker 파일은 이미지 파일을 만들기 위한 명령어를 작성해 놓은 파일입니다. 이 Docker 파일을 실행해야 이미지 파일을 빌드할 수 있습니다. 이 말은 Docker File을 읽어보면 이미지가 어떤 내용을 포함하고 있는지 알 수 있다는 뜻이기도 합니다.

Docker 생태계
Docker의 강력한 점 중 하나는 사용자들이 만든 이미지 파일을 손쉽게 공유하고 내려받아 곧바로 컨테이너 환경을 구성할 수 있다는 것입니다. Docker Hub는 사용자가 이미지파일을 업로드하거나 내려받을 수 있는 클라우드 기반의 저장소 플랫폼입니다. 말 그대로 중앙 허브 역할을 하기 때문에, Docker 환경에서 애플리케이션을 더 쉽게 빌드, 배포 및 실행할 수 있습니다.

Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며, 문제 없이 코드를 실행할 수 있게 될 것입니다.
Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
www.docker.com

'Backend' 카테고리의 다른 글
| [Backend][Deploy] Fly.io로 백엔드 배포하기 (0) | 2025.09.12 |
|---|---|
| [Docker] run / start / exec - Docker 컨테이너 생성 및 실행 (2) | 2025.08.04 |
| [Backend][Render] Render에 대해서 (0) | 2024.08.28 |
| [API] Pagination (0) | 2024.08.03 |
| [API] API versioning (0) | 2024.08.03 |