Docker란 무엇인가?
Docker는 컨테이너 기술로, 컨테이너를 생성하고 관리하기 위한 도구이다.
컨테이너에는 코드 패키지와 해당 코드를 실행하는 데 필요한 의존성과 도구가 포함되어 있으며, 이를 표준화된 소프트웨어 유닛이라 부른다. 컨테이너를 사용하면 애플리케이션과 그 환경을 하나의 독립된 단위로 실행할 수 있어 개발, 테스트, 배포가 간소화된다.
예를 들어 스프링 애플리케이션 실행하기 위해서는 JDK와 jar 파일이 필요하다. 이때, Docker를 사용하면 애플리케이션이 실행되는 환경을 컨테이너 이미지로 패키징할 수 있다. 이를 통해 동일한 환경에서 애플리케이션이 실행되므로 로컬 개발 환경과 운영 환경 간의 불일치를 최소화할 수 있다.
예를 들어 특정 jar을 실행하기 위해 JDK17 버전 이상이 필요하다면, 이를 환경을 컨테이너에 넣으면, 만약 자신의 컴퓨터에 JDK11만 설치되었더라도 실행이 가능해진다.
Docker와 가상 머신의 차이
결국 Docker는 앱을 실행하기 위한 환경과 앱을 감싸는 컨테이너를 만들어 어떤 환경에서도 앱을 실행하도록 만들어준다. 하지만, 이런 작업은 가상 머신을 통해서도 가능하다. 실제로 나는 의존성이 복잡한 애플리케이션을 실행하기 위해 가상 머신의 실행 환경을 받아서 실행해본 적이 있다.
그렇다면 가상 머신으로도 간편하게 실행 환경을 공유할 수 있는데, 왜 최근에는 가상 머신을 사용하는 것이 아닌 Docker을 사용하는 것일까?
가장 큰 이유는 가상 머신이 무겁기 때문이다. 가상 머신은 실제로 새로운 OS가 설치되고 실행되는 것이기 때문에 컴퓨터의 리소스를 많이 잡아먹는다. 일단 기본적으로 차지하는 용량이 크다. 게다가 가상 머신은 OS가 올라가야 하므로 실행 속도가 느리다. 가상 머신을 시작하려면 부팅 과정이 필요하고, 이는 몇 분 이상 걸릴 수 있다. 반면, Docker는 컨테이너를 실행할 때 운영 체제 전체를 새로 시작하는 것이 아니라 호스트 OS의 커널을 공유하기 때문에 몇 초 만에 시작할 수 있다. 속도와 효율성 면에서 Docker가 가상 머신보다 훨씬 유리한 이유다.
또 다른 차이점은 개발 및 배포 과정에서의 유연성이다. 가상 머신 이미지는 크기가 크고 다루기 어렵다. 이미지를 다른 팀원과 공유하려고 해도 용량이 너무 커 전송이 번거롭고, 환경 설정 과정도 복잡하다. 반면 Docker는 경량화된 컨테이너 이미지를 사용하므로 용량이 훨씬 작고, 공유 및 배포가 간편하다. Docker Hub와 같은 중앙 저장소를 이용하면 필요한 이미지를 가져오고, 바로 실행할 수 있는 점도 큰 장점이다.
결론적으로, Docker는 리소스 사용량, 실행 속도, 공유 및 배포의 간편함 등 여러 측면에서 가상 머신보다 효율적이다. 물론 가상 머신이 완전히 대체된 것은 아니다. 운영 체제 수준의 격리나 더 강력한 보안이 필요할 때는 여전히 가상 머신이 유용하다. 하지만 대부분의 현대 개발 환경에서는 Docker가 개발, 테스트, 배포를 간소화하는 데 최적화된 도구로 자리 잡았다.
결국 Docker는 "더 가볍고 빠르게, 그리고 더 간편하게"라는 목표를 달성한 기술이라 할 수 있다. 내가 느낀 Docker의 진가는, 적은 노력으로 동일한 환경을 여러 곳에서 재현하고, 복잡했던 작업을 간단하게 만들어주는 데 있다.
'Docker' 카테고리의 다른 글
[Docker] 명령어로 컨테이너 목록 확인하고 중지하기 (0) | 2025.01.22 |
---|---|
[Docker] Dockerfile 사용해 스프링 애플리케이션 이미지 만들고 컨테이너 실행해보기 (0) | 2025.01.21 |
Docker의 이미지와 컨테이너의 차이 알아보기 (0) | 2025.01.20 |