개발/TIL

[TIL#45] Docker 사용 이유 / 가상 머신과 비교

서해쭈꾸미 2025. 2. 27. 17:17

Docker 사용하는 이유

Docker를 사용하지 않으면 Linux Server에 Java깔고, DB깔고, 버전도 맞추고.. 이런 과정이 필요하지만Application에 Docker 사용해서 배포하면 버전 신경 안 써도 되고, Java와 DB도 명령어 한 줄로 깔 수 있고 명령어 실수 날 걱정도 없고 환경을 통일 할 수 있어 매우 편하다.

 

 

Docker를 언제 사용할까 ?

일관된 개발 환경이 필요할 때

애플리케이션을 빠르게 배포하고 싶을 때

마이크로 서비스 아키텍처를 도입 할 때 → 서비스 별로 컨테이너 나누고 DB 나누면 되겠다.

CI/CD 파이프 라인 구축 할 때

리소스 효율성을 높이고 싶을 때

쉽게 스케일링 하고 싶을 때 (수평 확장)

쿠버네티스와 함께 사용하고자 할 때

 

 

Docker 주요 명칭

Vloume : 컨테이너의 데이터를 local 저장소에 저장해두어 컨테이너가 삭제 되더라도 해당 데이터는 유지되도록 할 수 있음

Image : Application 및 실행에 필요한 것들이 포함되어있는 읽기 전용 템플릿

Container : Image를 실행하여 실제로 Application이 동작하는 환경

DockerFile : Docker 이미지를 생성하기 위한 스크립트

네트워크 :

  1. 브리지 네트워크 :
    1. Docker가 컨테이너를 실행할 때 사용하는 네트워크
    2. 동일한 브리지 네트워크에 연결된 컨테이너들은 서로 통신가능
    3. 외부 네트워크와는 NAT(내부 네트워크의 여러 장치가 하나의 공용 IP 주소를 통해 외부 네트워크와 통신할 수 있도록 IP 주소를 변환하는 기술)를 통해 통신
    4. 명시하지 않으면 동일한 브리지 네트워크에서 실행
  2. 호스트 네트워크 :
    1. 컨테이너가 호스트의 네트워크 스택을 직접 사용
    2. 네트워크 격리가 없어 성능이 이점이 있지만, 보안 및 네트워크 충돌 위험
    3. 성능이 중요한 Application에 사용
  3. 오버레이 네트워크
    1. 여러 Docker 호스트에 걸쳐 있는 컨테이너를 연결할 때 사용됨
    2. Swarm(Docker 컨테이너의 오케스트레이션과 클러스트링을 지원하여 여러 호스트에서 컨테이너를 관리하고 배포할 수 있는 기능) 모드나 Kubernetes같은 오케스트레이션 도구와 함께 사용됨
    3. 데이터 센터 또는 클라우드 환경에서 분산 시스템을 구축할 때 유용

 

Docker VS 가상 머신

가상머신 ?

하이퍼바이저(여러 운영 체제를 동시에 실행할 수 있도록 물리적 하드웨어를 가상화하는 소프트웨어)를 통해 물리적 하드웨어 위에 가상화된 운영 체제를 실행하는 기술

 

운영 체제 공유 차이에 따른 문제 발생 시 차이

Docker는 동일한 운영 체제 커널을 공유하기 때문에 하나의 컨테이너에서 보안 문제가 발생하면 보안 격리가 가상 머신보다 약하다.

그러나 가상머신은 완전히 독립된 운영 체제를 실행하므로 하나의 가상머신에서 문제가 발생해도 다른 가상머신이나 호스트 시스템에 영향을 주지 않는다.

 

리소스와 부팅 시간의 차이

Docker는 Application만 실행하고, 운영 체제의 핵심 부분은 공유하므로 가상머신보다 빠르게 시작할 수 있다.

가상머신은 한 물리적 서버에서 여러 종류의 운영체제를 동시에 실행할 수 있다. 그러나 오버헤드가 크고, (전체 운영체제를 실행해야해서 RAM과 CPU 자원을 소비) 가상 머신을 부팅할 때 운영 체제를 처음부터 시작해야해서 시간이 오래 걸린다.