Docker란?
일반적으로 우리는 프로그램 하나를 만들 때, 그에 맞는 환경을 세팅한 뒤에 개발을 합니다. 개발을 해보신 분들은 아시겠지만 환경 세팅하는 데 굉장히 많은 시간이 걸립니다. 특히 다른 사람이 작성한 코드를 나의 환경에서 실행할 경우 적힌대로 환경을 세팅해도 안되는 경우가 굉장히 많습니다. Docker의 개념은 이런 불편함에서 부터 시작되었습니다.
사람들은 이렇게 시간이 오래 걸리는 작업! 차라리 초기 개발자가 모든 환경을 묶에서 저장하고, 그 환경을 그대로 가져다가 쓰면 어떨까? 라는 생각을 하게 됩니다. 그렇다면 가상으로 환경을 만들고, 초기 개발자의 환경과 동일하게 하려면 어떻게 해야할까요?
가상 환경이라고 하면 VMware, virtualbox 등이 떠오르실겁니다. 이러한 가상환경 프로그램으로 초기 개발자의 환경과 동일하게 만들 수 있습니다. 하지만 현재 로컬 환경에 가상 환경 프로그램을 설치하고, 그 위에 OS를 또 설치하기에 하드웨어적으로 너무나 부담이 되는 일입니다. 그렇다면 현재 OS를 공유하되, 그 위에 환경만 따로 설치가 되면 어떨까요? 하드웨어적으로 부담도 적어지고, 환경 세팅에 매우 편리해지겠죠! 이게 바로 Docker입니다!!
Docker의 정의를 한번 살펴볼까요?
Docker의 정의는 "리눅스 container를 기반으로 애플리케이션에 필요한 환경을 빠르게 구축하고 테스트&배포 할 수 있게 해주는 플랫폼"입니다.
"container"라는 말이 나오는데, container가 뭘까요? 우리는 이미 위에서 container를 한번 봤습니다!
바로 위사진의 우측사진 docker 박스가 container입니다. 실제로 물리적으로 구분짓지는 않지만, 마치 서버가 있는 것 처럼 구분지어 리소스를 사용할 수 있게 하는 기술입니다. 실제로 우측 사진에서 로컬 하드웨어를 물리적으로 나누지는 않았죠! 하지만 리소스를 나눠 쓸 수 있도록 논리적으로 구분지었습니다. 이것이 바로 container입니다!
※ 리눅스 container를 기반으로 하면 mac/windows에서는 docker를 사용할 수 없나요?
Docker는 리눅스를 기반으로 하기 때문에, 리눅스 환경에서 container를 실행하면 바로 실행할 수 있기 때문에 성능 저하가 없습니다.
하지만 리눅스 환경이 아니라면, 환경 위에 가상환경을 깔고 리눅스를 설치해야하기 때문에 성능 저하가 있습니다. 이 때 docker가 알아서 리눅스 환경을 설치하기 때문에 별도의 설치는 필요없습니다.
Docker 관련 용어들
docker를 공부하다보면 docker hub, image, container 등의 용어를 많이 듣게 됩니다.
docker hub는 말 그대로 docker에 설치 가능한 환경들을 저장해두는 저장고입니다.
image는 환경들을 뜻하고, container는 그 환경을 실행한 것을 뜻합니다.
예를 들어서 애플리케이션으로 예를 들어보겠습니다.
우리가 애플리케이션을 다운 받기 위해서는 앱스토어에 들어갑니다. 그리고 앱스토어에서 원하는 애플리케이션을 다운받고, 실행하면 그것을 프로세스라고 하죠!(출처)
여기서 앱스토어 역할을 하는 것이 바로 docker hub, 애플리케이션 역할을 하는 것이 image, 프로세스 역할을 하는 것이 container라고 생각하시면 됩니다.
원하는 환경을 docker hub에서 image로 다운을 받고, 실행을 하면 container가 됩니다! 비유하니 참 쉽죠?
docker hub에서 image를 받을 때 사용하는 명령어는 pull
image를 실행하는 명령어는 run 입니다.
실행된 container를 다루는 명령어는 참 많기 때문에 다음 포스팅에서 다뤄보도록 하겠습니다.