Docker 라는 개념이 나오기 전에 가상머신(VM) 이 개발 시 서로 다른 환경에서 App 을 실행하기 위한 Solution으로 사용되어 왔다. VM 은 Hypervisor 라는 소프트웨어를 통해 물리적 하드웨어 위에 여러 운영체제를 구동할 수 있게 해준다. 각 VM 은 완전한 운영체제를 포함하며, 해당 운영체제 위에 App이 설치되어 실행된다.
무거운 리소스 소비: 각 VM은 독립적인 운영 체제를 포함하기 때문에 상당한 양의 메모리와 디스크 공간을 소비한다. 이는 여러 VM을 실행할 때 리소스 낭비로 이어진다.
느린 속도: VM은 하드웨어 리소스에 직접 접근하지 않고 하이퍼바이저를 거쳐야 하므로, 애플리케이션 실행 속도가 느려질 수 있다. 특히, 하드웨어 성능이 중요시되는 애플리케이션에서는 이 속도 저하가 큰 문제가 될 수 있다.
복잡한 관리: VM 환경은 운영 체제의 설치, 설정, 업데이트 등이 필요한 복잡한 관리 작업을 수반한다. 이는 개발자와 운영팀 모두에게 추가적인 부담을 준다.
위와 같은 문제점과, 기술의 발전( 기술 스택의 다양성, 다양한 도메인 등) 을 어느 정도 해소하기 위해 Docker 의 필요성이 대두됐다.
주요 특징 및 장점
- 컨테이너화 : App 에 필요한 모든 것을 하나로 묶어 실행
- 경량 : 운영 체제의 커널을 공유하므로, 기존의 가상 머신보다 훨씬 가볍고 빠르게 실행됨
- 이식성 : 컨테이너화를 기반으로 어떤 환경에서든 동일하게 실행할 수 있음
- 확장성 : 여러 컨테이너를 독립적이고 확장성있게 관리 가능
Docker 를 시작하면 많은 내용을 새로운 용어들과 학습해야 하므로 우선 용어를 정리해보자.
코드, 런타임, 라이브러리, 환경 변수, 구성 파일
등이 포함.Bridge Network (브리지 네트워크)
- 기본적으로 Docker가 컨테이너를 실행할 때 사용하는 네트워크
- 일반적으로 단일 호스트에서 여러 컨테이너를 연결할 때 사용
docker network create my-bridge-network docker run -d --name container1 --network my-bridge-network nginx docker run -d --name container2 --network my-bridge-network nginx
Host Network (호스트 네트워크)
- 컨테이너가 호스트의 네트워크 스택을 직접 사용
- 네트워크 격리가 없기 때문에 성능상 이점이 있지만, 보안 및 네트워크 충돌 위험이 있다.
- 일반적으로 성능이 중요한 애플리케이션에 사용됨.
docker run -d --network host nginx
Overlay Network (오버레이 네트워크)
- 여러 Docker 호스트에 걸쳐 있는 컨테이너를 연결할 때 사용
- Swarm 모드나 Kubernetes 같은 오케스트레이션 도구와 함께 사용됨.
- Swarm : Docker 컨테이너의 오케스트레이션과 클러스터링을 지원하여 여러 호스트에서 컨테이너를 관리하고 배포할 수 있는 기능
- 데이터 센터 또는 클라우드 환경에서 분산 시스템을 구축할 때 유용함.
이번 글에서는 기존 가상머신과 비교하여 Docker 의 필요성과 장점에 대해 설명하고 용어에 대해 정리했다. 다음 글에서는 Docker 를 Spring Boot 와 함께 사용하는 것을 정리해보자.