데브옵스(DevOps)/Docker

[Docker] 도커(Docker)란 무엇인가?

잇트루 2023. 6. 19. 00:36
반응형

도커(Docker)

도커는 컨테이너 기술 기반의 가상화 플랫폼이다. 애플리케이션을 개발하다 보면 다양한 이유로 서버 환경과 개발 환경이 자주 바뀌게 된다. 만약 팀 단위로 개발을 하게 된다면 애플리케이션의 환경이 바뀔 때마다 각각의 개인 환경 또한 변경해야 할 것이다. 따라서 애플리케이션이 자주 변경될수록 개인 환경도 바뀌게 될 것이고 이 과정에서 에러가 발생할 수 있다. 이러한 문제점을 해결해 주는 것이 도커다.

 

도커를 사용하지 않는 경우 자주 발생하는 문제

개발팀에게 발생하는 문제

팀 단위로 Java를 이용하여 웹 서비스를 개발한다고 가정하자.

  • 각 팀원은 하나의 애플리케이션을 만들기 위해 개발 환경을 유사하게 구축할 것이다.
  • 특정 버전의 JDK, 특정 버전의 데이터베이스 등을 각자 OS 환경에 설치하고 개발을 진행한다.
  • 애플리케이션을 실행시키기 위한 시스템 환경 변수, JDK 등을 모든 팀원들이 유사하게 갖춰야 한다.

이러한 과정에서 문제 에러가 발생하기 쉽고, 문제를 해결하기 위해 많은 시간을 소모하게 된다.

새로운 프로젝트를 진행하거나, 기존의 프로젝트에 새롭게 투입될 경우 런타임 환경을 맞추기 위해 소요되는 시간과 노력은 만만치 않다.

 

배포 시 발생하는 문제

개발 환경의 일치 이슈는 서비스 배포 환경에서도 동일하게 발생할 수 있다. 웹 서비스의 배포는 어떤 애플리케이션이 특정 런타임 환경 위해서 실행되고, 사용자에게 이를 제공해야 하는 것인데, 앞서 개발팀에게 발생하는 문제와 다를 것이 없기 때문이다.

 

서버 배포 또한 도커를 활용하여 애플리케이션을 실행하는 방식으로 서비스를 제공한다.

AWS EC2에 도커를 설치하거나, 도커 컨테이너를 EC2 서버에서 실행할 수 있게 하는 서비스인 ECS를 이용하여 보다 쉽게 애플리케이션을 배포할 수 있다.

 

도커의 등장 이후로 개발자들의 밈(meme) 중 하나였던 “제 컴퓨터에서는 작동되는데요?”라는 말은 더 이상 유효하지 않게 되었다.

 

 

컨테이너(Container) 기술 방식

도커는 컨테이너 기술 기반의 가상화 플랫폼으로 컨테이너 기술은 기존의 가상 머신(VM: Virtual Machine) 방식과는 차이가 있다.

기존의 VM 방식은 호스트 OS 위에 존재하는 하이퍼바이저(Hypervisor)를 통해 VM을 생성하고 구동하며, 각각의 VM 구성 요소마다 OS가 존재한다.

반면에 도커 컨테이너에는 OS를 포함하고 있지 않다. 도커라는 플랫폼 위에 컨테이너들이 존재하고, 그 아래에는 호스트 OS가 존재한다.

이는 각 컨테이너는 호스트 OS의 커널을 공유하고 있다는 것을 의미한다. 도커는 애플리케이션을 컨테이너화 해서 실행하는 것에 목적을 가지므로 호스트 OS 입장에서는 각각의 컨테이너는 프로세스에 불과하다.

 

 

이미지(Image)

이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 실행되는 모든 컨테이너는 이미지로부터 생성된다. 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너로 만들 수 있다.

하나의 이미지를 통해 여러 개의 컨테이너를 생성할 수 있으며, 이를 이용해 애플리케이션의 수평 확장이 가능하다.

 

예를 들어, ubuntu 이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, MySQL 이미지는 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보 등을 가지고 있다. 이러한 이미지는 기본 이미지(base image)로부터 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수도 있다.

만약, 스프링 부트 기반의 애플리케이션을 이미지로 만들 경우, 스프링 부트 초기 세팅 이미지를 기본 이미지로 삼고 내가 만든 애플리케이션을 추가하여 새롭게 이미지화할 수 있다.

 

 

레지스트리(registry)

생성한 이미지는 레지스트리에 저장된다. 대표적인 이미지 레지스트리로 Docker Hub, Amazon ECR 등이 있다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면 기본 레지스트리로부터 다운로드하게 된다.

반응형