[DevOps] Docker

Donghoon Jeong·2023년 5월 6일
0

DevOps

목록 보기
1/4
post-thumbnail

도커 (Docker)

도커(Docker)란 리눅스 컨테이너를 기반으로 하여 어플리케이션을 가볍고 효율적으로 구축, 테스트 및 배포할 수 있는 오픈소스 프로젝트입니다.


VM vs Container

도커를 사용하는 가장 큰 이유는 가상화 입니다.

기존의 우리가 아는 가상화 기술인 가상 머신(VM)은 하이퍼바이저라는 소프트웨어를 이용하여 하나의 물리적 서버를 여러 개의 가상 서버로 분할합니다. 각각의 가상 서버는 자체적인 운영체제와 애플리케이션을 가지고 있기 때문에, VM에서 실행되는 애플리케이션은 호스트 컴퓨터의 운영체제와 독립적입니다. 이로 인해 VM은 더욱 견고하고 안전한 환경을 제공할 수 있는 장점과 여러 개의 하드웨어를 사용하여 여러 개의 서버를 띄울 때보다 경제적인 측면에 장점이 있지만, 운영체제와 애플리케이션을 가상화하기 때문에 더 많은 하드웨어 자원을 소모하고 성능 저하의 가능성이 있는 단점이 있습니다.

도커는 이러한 단점을 해결하기 위해 컨테이너(Container) 개념의 가상화 기술을 사용합니다.

컨테이너는 애플리케이션을 실행하기 위해 필요한 파일과 라이브러리, 의존성 등을 패키지화하여 컨테이너라는 단위로 관리합니다. 컨테이너는 호스트 운영체제와 커널을 공유하고, 다른 컨테이너와 격리된 공간에서 동작합니다. 이로 인해 컨테이너는 가볍고 빠르게 실행되며, 더욱 효율적인 자원 활용이 가능하다. 또한, 컨테이너 간의 상호작용이나 컨테이너의 삭제와 같은 작업도 간편하게 수행할 수 있습니다.

따라서, 도커의 컨테이너는 애플리케이션을 격리된 환경에서 실행하고 필요한 종속성과 함께 패키징하여 효율적인 개발, 테스트 및 배포를 가능하게 해줍니다.

도커와 가상머신에서 커널의 공유 여부를 대중교통과 자가용을 비교함으로써 설명할 수 있습니다.

대중교통과 개인차량은 다음과 같은 특징을 갖고 있습니다.

  1. 버스는 여러 사람이 함께 이용하며, 좌석과 공간을 공유 합니다.

  2. 버스는 자가용과 동일하게 엔진을 소유하고 있지만 더 많은 사람을 운반할 수 있다는 점에서 개인 차량보다 연료 효율이 높습니다.

  3. 버스는 정류장에서 승객을 빠르게 태우고 내릴 수 있다는 장점을 갖고 있습니다.

  4. 버스는 여러 사람이 버스요금을 지불하기에 이동하는데 비용을 분담해서 지불하고 있다고 볼 수 있지만, 개인차량은 한 사람이 이동의 모든 비용을 지불합니다.

위의 예제에서 버스와 개인 차량을 다음과 같이 치환하면 다음과 같습니다.

  • 도커 : 대중교통(버스)

  • 가상머신 : 자가용(개인차량)

  1. 도커는 호스트 운영체제의 커널을 공유하여(버스의 좌석과 공간을 공유하는 것과 유사) 여러 컨테이너가 효율적으로 자원을 사용합니다.

  2. 도커 컨테이너는 독립적인 운영체제를 포함하지 않기 때문에 메모리와 디스크 사용이 가상머신에 비해 적습니다. 즉, 자원 사용 측면에서 효율이 좋습니다.

  3. 도커 컨테이너는 가상머신처럼 부팅 과정이 필요 없어서 즉시 시작하고 종료할 수 있습니다.

  4. 도커도 하이퍼바이저를 사용하지 않고 호스트 커널을 직접 사용하므로 성능 오버헤드가 적습니다.


Docker 구성요소

도커 이미지(Docker Image)

도커 이미지란 컨테이너 실행에 필요한 파일 시스템과 애플리케이션 설정을 포함한 읽기 전용 템플릿입니다.

도커 이미지는 여러 개의 계층(layer)으로 구성되며, 이를 통해 이미지의 재사용과 효율적인 배포가 가능합니다.

이미지는 도커 컨테이너를 생성하고 실행하는 데 필요한 모든 정보를 포함합니다.

도커 이미지는 변경 불가능하며 읽기 전용이므로 이미지를 수정하려면 새로운 이미지를 생성해야 합니다. 이미지는 도커 레지스트리에 저장되어 공유 및 배포될 수 있습니다.

도커 컨테이너(Docker Container)

도커 컨테이너란 도커 이미지를 기반으로 생성된 실행 가능한 인스턴스입니다.

각 컨테이너는 격리된 환경에서 독립적으로 실행되며, 애플리케이션과 그에 필요한 종속성을 포함합니다.

도커 컨테이너는 호스트 시스템의 운영체제 커널을 공유하며, 리소스 격리와 제한을 통해 안전하게 실행됩니다. 컨테이너는 가볍고 빠르게 시작되며 확장이 용이하므로 애플리케이션의 개발, 테스트, 배포에 적합한 환경을 제공합니다.

도커 레지스트리(Docker Registry)

도커 레지스트리란 도커 이미지를 저장하고 관리하는 중앙 저장소입니다.

도커 허브(Docker Hub)는 공개적으로 사용 가능한 도커 레지스트리 중 하나이며, 사용자들이 이미지를 공유하고 가져와 사용할 수 있습니다.

도커 허브 이외에도 개인적인 이미지 저장소를 구축하여 독립적으로 사용할 수 있습니다.

도커 레지스트리를 사용하면 이미지를 중앙 집중화하여 관리하고 버전 관리, 보안, 접근 제어 등을 효과적으로 처리할 수 있습니다.

profile
정신 🍒 !

0개의 댓글