Dev/CICD

[Docker] 도커(Docker)란?

김세진 2024. 6. 14. 11:02
반응형

 

 

 

도커(Docker)란?

 

도커란?

도커는 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징, 배포, 실행할 수 있게 해주는 오픈 소스 플랫폼이다. 컨테이너를 사용하여 개발자 및 고객에게 일관된 환경을 제공하며, 애플리케이션의 배포와 관리를 단순하게 한다.

 

도커는 동일한 컨테이너라면 항상 동일한 환경을 제공하기 때문에 사용자에게 일관된 경험을 제공할 수 있다. 따라서 애플리케이션을 실행하는 데 필요한 특정 버전의 라이브러리나 기타 도구를 직접 설치하지 않아도 된다.

 

컨테이너란?

컨테이너애플리케이션을 실행하기 위한 코드와, 종속적인 도구가 모두 포함되어 있는 표준화된 소프트웨어 유닛을 의미한다. 만약 NodeJS 애플리케이션을 도커로 빌드하여 컨테이너화 한다면, 이 컨테이너엔 애플리케이션을 실행하기 위한 코드, NodeJS 런타임 등 프로그램을 실행하기 위한 각종 도구들이 모두 포함되게 된다.

 

이는 동일한 개발 환경이 필요한 개발자들에게도 상당한 이점을 가져다준다. 만약 다른 개발자가 NodeJS 14 버전에서 성공적으로 돌아가는 코드를 작성했다고 가정해 보자. 하지만 나는 12 버전이 깔려있다면 코드 실행을 위해 버전업을 감내해야 한다. 심지어 원래 환경으로 돌아오기 위해 다시 다운그레이드까지 해야 한다. 만약 도커를 사용했다면, 단순히 컨테이너를 갈아 끼워 실행하기만 하면 됐을 것이다.

 

 


이미지 & 컨테이너

 

 

간단하게 요약하자면 DockerFile은 도커에서 이미지를 구축하기 위한 설정 파일이고, 이미지는 애플리케이션을 실행하기 위한 코드와 기타 도구를 포함한 패키지이며 컨테이너는 이러한 이미지의 실행 인스턴스이다.

 

전체적인 흐름을 위 사진과 같다. DockerFile의 설정을 바탕으로 애플리케이션 코드와 기타 도구를 이미지화한 뒤 도커에서 이미지를 실행해 컨테이너로 띄워 서비스하는 것이다. 이미지와 컨테이너는 1:N 관계라 할 수 있다. 동일한 이미지를 기반으로 같은 형상의 컨테이너 여러 개를 띄울 수 있다는 것이다.

 

 


가상 머신 vs 도커 컨테이너

 

가상 머신의 문제점

만약 일관된 환경을 제공하고자 하는 거라면 가상 머신을 사용하면 되는 것 아닌가? 굳이 도커를 사용해야 하는 걸까? 라는 의문이 생길 수 있다. 하지만 가상 머신은 다음과 같은 일부 문제가 존재한다.

 

1. 성능 및 자원 효율성

가상 머신은 하드웨어 수준에서 가상화가 필요하기 때문에 시・공간적 오버헤드가 존재한다. 각각의 VM마다 OS를 반복 설치해야 하고, 직접적으로 필요하지 않은 기능들도 함께 존재할 것이다. 그리고 각 머신마다 메모리, CPU, 디스크 공간 등을 할당해야 하므로 낭비되는 자원이 생긴다. 이로 인해 직・간접적인 오버헤드가 발생할 수밖에 없다.

 

반면 도커는 OS 수준 가상화를 사용하여 필요한 애플리케이션만 실행하면 되므로 성능 및 자원의 낭비가 적고 효율적이다.

 

2. 설정 및 관리의 어려움

가상 머신은 도커의 Dockerfile처럼 구성 파일이 따로 존재하지 않는다. 따라서 일부는 수동으로 설정해야 하거나 복잡한 스크립트를 통해 관리된다. 수동으로 설정된 가상 머신은 일관성이 떨어져 개발 환경과 프로덕션 환경이 일치하지 않는 문제가 발생할 수 있다.

 

도커는 컨테이너 실행을 위한 이미지를 구성할 때 DockerFile로 설정이 관리된다. 따라서 모든 개발, 테스트, 프로덕션 환경에서 동일한 환경을 제공할 수 있고 휴먼 에러가 적어진다.

 

3. 이식성 및 확장성

가상 머신은 운영체제를 포함하기 때문에 다른 환경으로의 이식성과 확장성이 떨어지는 반면, 도커는 컨테이너에 포함된 애플리케이션만 실행하면 되고, OS 구분 없이 어느 환경에서나 실행 가능하기 때문에 이식성과 확장성이 뛰어나다.

 

 

 

 

 

 

반응형