도커(Docker)란 무엇일까요?
도커(Docker)는 애플리케이션을 컨테이너라는 독립된 환경에 패키징하고 실행하여 개발, 배포 및 운영을 효율적으로 관리할 수 있도록 지원하는 플랫폼이며, 컨테이너 생성 및 관리 기술을 통칭하기도 합니다.
컨테이너는 뭐죠?
컨테이너(Container)는 애플리케이션 실행에 필요한 모든 것을(코드, 환경 설정, 종속성 등..) 패키징하여, 어떤 컴퓨팅 환경에서도 빠르고 신뢰성 있게 실행할 수 있도록 하는 소프트웨어의 표준 단위이자 애플리케이션 패키지라고 할 수 있습니다.
그래서 왜 사용하는 건가요?
컨테이너를 사용함으로써 얻는 이점은 다양하게 있으며 장점에 대해서는 후술하겠지만, 현 시점에서 우리에게 가장 와 닿는 장점은 어느 환경에서도 동일한 환경을 구축할 수 있다는 것이라고 생각합니다.
협업을 진행하거나 서비스를 배포하는 과정에서 “내 컴퓨터에서는 잘 되는데…”와 같은 경험을 해보신 적이 있으신가요?
나의 로컬 환경에는 최신 버전의 Node.js가 설치되어 있는데, 백엔드 개발을 좋아하는 나의 팀원의 컴퓨터에는 이미 지원이 끝난 예전 버전의 Node.js가 설치되어 있다고 생각해봅시다.
나는 async / await 문법을 사용해서 코드를 작성해서 문제가 없는 데, 팀원의 환경에 설치 된 Node.js는 해당 문법을 지원하지 않아 오류가 발생할 수 있으며, 이러한 문제를 찾는 건 꽤 어려울 수 있을 것 같습니다.
컨테이너에는 애플리케이션을 실행하기 위한 모든 것들이 존재하기 때문에 어떤 환경(Windows, Linux, Mac OS, 팀원의 컴퓨터, 클라우드 환경 등...)에서도 애플리케이션이 동일하게 동작합니다. 로컬 환경에 Node.js가 설치되어 있지 않더라도 말이죠.
우리는 이러한 궁금증이 생길 수도 있을 것 같습니다.
어느 환경에서도 재현 가능한 환경을 구축하는 것이 많은 이점을 갖는다는 건 알겠습니다, 그런데 왜 굳이 컨테이너를 사용하는 건가요?
쉽지 않겠지만 가상 머신을 사용해도 동일한 환경을 구축할 수 있을 것 같은데요?
가상 머신과 컨테이너 의 구조
가상 머신(Virtual Machine)과 도커의 유사점
이미지
도커 컨테이너와 가상 머신은 모두 이미지에서 생성됩니다. 각 이미지는 가상화된 환경의 청사진 역할을 합니다. 이미지를 사용하면 사용자는 환경을 매번 구성하지 않고도 일관된 환경을 만들고 공유할 수 있습니다.
이미지는 애플리케이션을 실행하는 데 필요한 모든 시스템 리소스를 지정합니다. 예를 들어 VM 이미지는 운영 체제 백업을 생성하는 반면 도커 컨테이너 이미지는 애플리케이션 환경 백업을(의존성과 환경 설정 같은 것들…) 생성합니다.
버전 관리
도커 컨테이너 이미지와 가상 머신 이미지 모두 버전 관리를 통해 시간 경과에 따른 환경 구성 변경을 추적할 수 있습니다.
도커의 버전 관리란 시간이 지남에 따라 도커 이미지의 변경 사항을 추적하고 관리하는 기능을 말합니다. 이를 통해 개발자는 애플리케이션의 여러 버전을 추적하고, 필요한 경우 이전 버전으로 롤백하고, 여러 버전의 애플리케이션을 동시에 배포할 수 있습니다.
마찬가지로 가상 머신의 버전 관리란 시간이 경과함에 따라 가상 머신 이미지의 변경 사항을 추적하고 관리하는 프로세스를 말합니다. 가상 머신 버전 관리는 업데이트 및 패치와 같은 가상 하드웨어 또는 운영 체제 구성의 변경 사항을 추적합니다.
이식성
가상 머신과 도커는 모두 서로 다른 유형의 기본 아키텍처에 대해 서로 다른 애플리케이션 구성을 개발해야 하는 어려움을 해결하도록 설계되었습니다. 도커와 VM 이미지는 모두 서로 다른 접근 방식을 취하지만 아키텍처 간에 이식성이 매우 뛰어납니다.
가상 머신(Virtual Machine)과 도커의 차이점
도커와 가상 머신 모두 애플리케이션을 격리된 환경에서 실행한다는 공통점이 있습니다. 하지만 근본적인 작동 방식에는 여러 차이점이 존재합니다.
주요 차이점
가상 머신은 원래 단일 물리적 시스템에서 여러 운영 체제를 실행할 수 있도록 설계되었습니다. 목표는 사용자가 기본 하드웨어로부터 격리된 가상 환경을 만들 수 있도록 하는 것으로 하드웨어에 미리 일정량의 리소스를 요청하며 가상 머신이 실행되는 한 계속해서 해당 양만큼 사용합니다.
가상 머신은 하드웨어 세부 정보를 추상화하여 다양한 하드웨어 아키텍처에서 애플리케이션을 보다 쉽게 실행하고 하드웨어 리소스를 더 효율적으로 사용할 수 있도록 합니다.
도커는 호스트의 운영체제 커널을 공유합니다. 여러 컨테이너가 동일한 운영 체제를 공유하기 때문에 컨테이너에 불필요한 운영 체제가 필요없으며 애플리케이션을 실행하기 위한 종속성만 포함됩니다. 가상 머신처럼 특정 양의 물리적 하드웨어 리소스를 요구하지 않고, 단일 운영 체제 커널에서 필요한 리소스만 요청하기 때문에 가상 머신에 비해 시스템 리소스를 적게 사용할 수 있습니다.
도커 컨테이너 사용의 장점 정리
도커 컨테이너를 사용함으로써 얻는 장점은 여러 가지가 있지만 대표적인 장점은 다음과 같습니다.
1. 일관된 실행 환경
컨테이너는 애플리케이션과 그 실행 환경을 패키징하여 모든 컴퓨팅 환경에서 일관되게 동작할 수 있게 합니다. 이를 통해 개발, 테스트, 스테이징, 프로덕션 환경 간의 차이로 인한 문제를 최소화할 수 있습니다. CI/CD(Continuous Integration/Continuous Deployment) 파이프라인에 통합하여 자동화된 테스트 및 배포를 구현할 수 있습니다.
2. 빠른 배포 및 확장
컨테이너에는 애플리케이션 실행을 위한 모든 파일이 들어가 있습니다. 하지만 컨테이너를 직접 공유하는 것이 아닌, 주로 컨테이너 이미지를 통해 공유합니다. 컨테이너 이미지는 애플리케이션과 그 실행에 필요한 모든 종속성을 포함하는 고정된 스냅샷입니다.
이미지는 불변성을 가지며, 이를 통해 사용자는 일관된 환경을 유지할 수 있습니다. 도커 이미지는 쉽게 저장, 공유, 배포될 수 있으며, Docker Hub와 같은 공용 레지스트리를 통해 다른 사용자와 공유할 수 있습니다. 이를 통해 이미지를 다운로드하여 동일한 환경을 쉽게 재현할 수 있습니다.
3. 효율적인 리소스 사용
컨테이너는 호스트 운영 체제의 커널을 공유하므로, 가상 머신보다 더 가벼우며, 리소스 사용이 효율적입니다. 하나의 호스트에서 더 많은 컨테이너를 실행할 수 있어, 서버 자원 활용도를 극대화할 수 있습니다.
'Docker' 카테고리의 다른 글
[Docker] 🦮월월월월의 컨테이너와 네트워크 (0) | 2024.08.25 |
---|---|
Docker Compose 한 줄로 빌드부터 컨테이너 구동까지 해결하기 (0) | 2024.08.25 |
[Docker] 🦮월월월월의 도커 볼륨이란 (0) | 2024.07.28 |
[Docker] 🦮월월월월의 도커 이미지란 (1) | 2024.07.21 |
[Docker] 🦮월월월월의 컨테이너란? (0) | 2024.07.14 |