Docker란?
도커는 소프트웨어를 실행하기 위한 컨테이너를 만들고 관리할 수 있게 도와주는 도구이다.
컨테이너란?
컨테이너는 소프트웨어를 실행하는 데에 필요한 모든 것을 하나로 묶은 표준화된 소프트웨어 단위이다.
쉽게 말해, 컨테이너에는 코드뿐만 아니라, 코드를 실행하는 데 필요한 환경(예: 라이브러리, 종속성, 도구 등)이 모두 포함되어 있다.
예시:
Node.js 애플리케이션을 도커 컨테이너로 만든다면?
해당 컨테이너에는
- 애플리케이션 소스 코드
- Node.js 런타임 (코드를 실행하기 위한 실행 환경)
- 기타 도구
결과적으로 Node.js 소스 코드와 동일한 환경을 사용하므로 항상 같은 동작과 결과를 보장할 수 있다.
선박의 컨테이너와 도커 컨테이너
컨테이너라는 개념을 선박에 실리는 화물 컨테이너로 비유하면 이해에 도움이 될 것 같다.
도커 컨테이너의 경우에는
- 선박 컨테이너는 다양한 상품을 표준화된 상자에 넣어 보관하고 운송한다.
- 각 컨테이너는 서로 완전히 격리되어 있으며 냉장이 필요한 상품이 있다면 컨테이너에 냉장 기능을 추가할 수도 있다.
- 이렇게 표준화된 컨테이너는 어떤 배나 트럭에서도 처리할 수 있어 어디로든 쉽게 이동이 가능하다.
도커 컨테이너의 경우에는
- 하나의 컨테이너에 소프트웨어와 실행 환경을 포함해 보관한다.
- 컨테이너 내부는 완전히 격리되어 있으므로 외부 환경에 영향을 받지 않고 동일한 조건에서 실행된다.
- 도커가 실행되는 곳이라면 어디서든 이 컨테이너를 가져다 사용할 수 있다.
도커를 사용해야하는 이유
도커를 사용하면 같은 환경에서 항상 같은 애플리케이션을 실행할 수 있다.
- 호환성 문제를 걱정할 필요가 없다.
- 도커를 사용하면, 애플리케이션 실행 환경을 컨테이너에 포함시킬 수 있습니다.
- 따라서 로컬, 서버, 팀원 간에 환경 차이로 인한 문제가 발생하지 않는다.
- 다른 곳에 배포하더라도 같은 환경임이 보장된다.
- 로컬에서 개발한 코드가 서버에서 동작하지 않는 문제를 방지할 수 있다.
- 팀원 간 개발 환경 차이로 인한 문제가 발생하지 않는다.
- 가상머신에 비해 실행 속도가 가볍고 빠르다.
- 가상머신(VM)에 비해 빠르고 가볍다.
- 불필요한 리소스 소모 없이 효율적으로 컨테이너를 실행할 수 있다.
가상머신 vs 도커 컨테이너
가상머신(VM)이란?
하나의 물리적인 컴퓨터(호스트) 위에 소프트웨어적으로 또 다른 컴퓨터 환경을 구현한 것이다.
쉽게 말해서, 하나의 컴퓨터 안에 여러 대의 컴퓨터가 있는 것과 마찬가지이다.
가상머신은 호스트 OS와는 별개로 운영 체제를 갖추고 있고 필요한 런타임이나 기타 도구들도 설치할 수 있기에 도커 컨테이너처럼 독립적인 환경을 제공한다. 언뜻 보면 비슷해보이는 가상머신과 도커 컨테이너의 특징을 비교해보자.
가상머신 VS 도커 컨테이너
| 구분 | 가상머신(VM) | 도커 컨테이너 |
| 기반 기술 | 하드웨어 가상화 | 운영 체제(OS) 가상화 |
| 운영 체제(OS) | 각 가상머신이 별도의 OS를 실행 | 호스트 OS를 공유 |
| 하드웨어 요구사항 | 가상머신마다 CPU, 메모리, 디스크 자원을 따로 할당 | 더 적은 자원을 사용 |
| 구성 파일 | 별도 구성 파일 없이 직접 설치 필요 | Dockerfile로 쉽게 구성 가능 |
| 성능 | 느림. 하드웨어 오버헤드 위험이 존재 (전체 OS 실행) | 빠름. 가벼운 구조로 최소한의 영향만 미침 (애플리케이션만 실행) |
| 사용 영역 | 장기적인 테스트나 운영 체제 수준의 테스트 | 개발과 배포 자동화, 가볍고 빠른 실행 환경이 필요할 때 |
서로 다른 장단점이 있기 때문에 사용 목적과 요구사항에 따라 다르기에 상황에 따라 선택하여 사용하면 된다.
'Docker' 카테고리의 다른 글
| 도커 이미지와 컨테이너 (0) | 2025.01.24 |
|---|