Docker를 간단히 정의하면 Container들을 관리하는 플랫폼입니다. Container는 가상화를 이용하여 격리된 공간에서 애플리케이션을 실행할 수 있는 공간입니다.

우선, 가상화가 필요한 이유는 다양합니다. 한 컴퓨터에서 여러 애플리케이션을 구동시킬 때 필요한 dependency 들의 버전이 서로 달라서 여러 버전이 필요할 수도 있고, OS에 직접적으로 여러 프로그램을 설치하고 싶지 않은 경우도 많습니다.

Container와 VM의 차이

기존에 흔했던 가상화 방식은 OS 전체를 가상화 시키는 것이었습니다. Virtual Machine을 이용하면 서로 격리된 여러 OS를 구동시킬 수 있었습니다.

compare-container-and-vm.png

Container와 VM의 차이

VM의 문제는 각 공간마다 OS가 하나씩 필요하다는 것입니다. 위 그림과 같이, VM을 이용하면 여러 개의 애플리케이션을 구동시키는 상황에서 OS가 여러 개 필요하기 때문에 공간적, 성능적 낭비 손해를 보게 됩니다.

반면, Container를 사용하면, OS는 컴퓨터의 호스트 OS 하나만 존재하고 각 애플리케이션들이 Docker 위에서 따로 구동됩니다. 덕분에 VM에 비해 공간적, 성능적으로 많은 이득을 볼 수 있습니다.

Docker의 장점

Docker는 여러 장점을 갖고 있는데 그 중 가장 큰 장점은 환경을 저장할 수 있다는 것입니다. 프로그래밍을 하다보면 OS의 버전, 프로그램의 버전 등 환경의 변화에 의해 오류가 발생하는 경우가 잦습니다. 환경을 새로 구축하는데에 시간이 많이 낭비되는데, Container의 환경을 Docker Image로 만들어두면 언제든 똑같은 환경을 다시 구축할 수 있습니다. 컴퓨터를 바꿔야 하거나 프로그램을 재설치 해야하는 상황 등 에서 시간을 많이 절약할 수 있습니다.

그리고 Docker Hub라는 저장소에서 수많은 Docker Image 들을 다운로드할 수 있습니다. 이미 존재하는 환경이라면, 직접 만들 필요 없이 다른 사람이 만들어둔 잘 작동하는 환경을 다운로드 받아 사용할 수 있습니다.

또한, Docker Compose를 이용하면 서로 통신을 해야하거나 관련된 여러 컨테이너를 쉽게 생성, 제거 할 수 있습니다.