본문 바로가기
DevOps/Docker

Docker & Container 개념 간단 정리

by Kallunar 2023. 11. 27.

1. Docker란?

  • 컨테이너(Container)를 생성하고 관리하기 위한 도구.
  • docker가 살행되는 모든 곳에서 Container를 가져올 수 있다.

 

2. Container란?

  • 독립적이고 표준화된 소프트웨어 유닛
    • 코드와 그 코드를 실행하기 위한 종속성들(dependencies)이 들어있는 패키지이다.
  • 누가 어디에서 Container를 실행하든 관계없이 동일한 application에 대하여 동일한 실행결과를 얻을 수 있게 해준다.

 

3. 어떤 때 Container를 사용할까?

  • 개발 환경과 배포 환경이 다를 경우
    • 가령 배포 환경의 버전이 낮으면 개발한 서비스의 정상 동작이 이루어지지 않을 수 있는데, Container의 특성 덕분에 별도의 조치 없이도 동일하게 실행할 수 있다. 
  • 팀 또는 회사 멤버들 간에 개발 환경이 다를 경우
    • 멤버들 각각의 로컬 환경이 어떠하든 관계없이, 해당 프로젝트에 한해서는 동일한 환경을 가질 수 있다.
  • 프로젝트 간에 사용하는 tool이나 tool의 버전이 서로 다를 경우
    • 각 프로젝트에서 사용하는 tool 간의 충돌 또는 tool 버전 간의 충돌이 일어날 수 있다.
    • 따라서 프로젝트 전환 시 해당 tool을 삭제하고 재설치하는 번거로움이 있을 수 있는데, Container를 사용하면 그러한 번거로움을 없앨 수 있다.

 

4. Virtual Machine vs. Docker

가상머신 구조 docker 구조
이미지 출처 : acade mind
  • 가상머신 역시 독립적인 환경을 갖출 수 있으므로 라이브러리, 종속성, 각종 도구들을 프로젝트에 맞게 구성하고, 공유할 수 있다.
  • 그러나 host 컴퓨터의 자원을 공유하므로 가상 머신이 많아질수록 속도가 느려지며, 각 가상머신은 개별 OS를 가지고 있으므로 공간 낭비 역시 심하다.
  •  또한 각 가상 머신은 결국 별도의 컴퓨터이므로 하나 하나 설정을 다시 해야하기 때문에, 동일한 환경 구축 과정이 까다로울 수 있다.
  • 반면 container는 개별적으로 OS를 가지고 있지 않으며, host 컴퓨터의 OS에 맞게 빌드된 환경에서 docker engine 기반으로 실행되므로, 훨씬 가볍고 공간 낭비가 없다.
  • 전체 컴퓨터 단위가 아니라 app과 그걸 위한 환경 단위로 캡슐화하므로 공유, re-building, 배포가 더 쉽다.

 

 

댓글