도커란?
Docker Study Note1
도커란
도커란 오픈 소스 컨테이너화 플랫폼입니다. 조금 더 자세히 설명드리면 컨테이너 기술을 기반으로 한 오픈 소스 가상화 플랫폼입니다.
이번 글에서는 위의 설명에서 나오는 단어인 컨테이너는 무엇인지 알아보고, 도커의 가상화와 VM이라고 부르는 가상 머신과의 차이점에 대해서 알아보고 마지막으로 도커를 설치하는 방법까지 알아보겠습니다.
컨테이너란
컨테이너는 ‘용기’이다.
컨테이너(container)는 ‘용기, 그릇’이라는 의미를 가지는 단어입니다. 그리고 흔히 용기라고 하면 무언가를 담는 물건을 뜻합니다. 컨테이너가 무엇인지 이해하기 위해서는 이 용기에 담기는 무언가가 무엇인지에 대해 알고 있어야 합니다.
컨테이너에는 바로 애플리케이션과 그 종속성이 패키징 되어 담기게 되고 담긴 애플리케이션을 실행시킬 컴퓨터(IP, CPU, Memory 등)가 담기게 됩니다. 애플리케이션 뿐만 아니라 그를 실행시키킬 수 있는 가상 컴퓨팅 자원 또한 담기는 격리된 환경을 컨테이너를 통해 제공하는 것입니다. 그렇기 때문에 컨테이너는 다양한 외부 환경 ( 다양한 컴퓨팅 환경 ) 에서도 일관되게 동작할 수 있게 되는 것입니다.
컨테이너의 특징
격리된 환경을 제공하는 것 이외에도 컨테이너는 다음의 특징들을 가집니다.
- 격리 : 격리된 환경을 제공하기 위해 각각의 컨테이너가 파일 시스템, 네트워크, 프로세스 등 독립적인 가상 리소스를 가집니다.
- 경량성 : 컨테이너는 가상 머신보다 훨씬 적은 리소스를 사용하기 때문에 더 빠르고 가볍습니다. ( 이와 관련된 설명은 가상머신과의 차이를 알아보는데서 더 자세히 다루겠습니다. )
- 이식성 : 컨테이너는 애플리케이션 종속성과 함께 묶이기 때문에, 어떤 환경에서든지 컨테이너 내부의 애플리케이션과 종속성은 동일하기 때문에 환경에 상관없이 일관되게 동작합니다. 즉 환경에 종속적이지 않기 때문에 이식성이 좋다는 특징을 가집니다.
- 확장성 및 관리 용이성 : 컨테이너화를 통해 애플리케이션을 더 쉽게 스케일링하고 관리할 수 있게 됩니다.
여기서 주의해야 할 점은 컨테이너는 호스트 컴퓨터 ( 도커 엔진이 설치되어 도커를 동작시키는 컴퓨터 ) 의 리소스를 가상화한 것을 제공받아서 독립적으로 사용하는 것입니다. 호스트 컴퓨터는 여러 컨테이너를 실행 시킬 수 있고, 이 각각의 컨테이너는 호스트 컴퓨터의 자원을 공유하지만 각각의 가상화된 리소스는 독립적인 것입니다. ( 쉽게 이해하기 위해서, 호스트 컴퓨터의 자원을 n 빵한다고 생각하면 됩니다 )
Docker 는 이런 컨테이너화 플랫폼의 대표적인 주자로, 개발자가 애플리케이션을 빠르고 효율적으로 개발, 테스트 및 배포 할 수 있도록 지원해줍니다.
컨테이너 VS 가상머신(Virtual Machine)
도커는 컨테이너 기술을 기반으로 한 오픈 소스 가상화 플랫폼입니다. 위에서도 몇번 언급이 되었지만 호스트 컴퓨터의 자원을 가상화하여 컨테이너가 독립적으로 사용할 수 있도록 해줍니다. 그렇다면 기존의 가상머신과는 어떤 차이가 있는 것일까요?
기존의 가상머신은 가상머신마다 별도의 운영체제를 설치하여야 했습니다. 즉, 하나의 컴퓨터에 가상머신이 5개이면 각각의 가상머신에 OS를 하나하나 설치해주어야 했던 것입니다. 가상 머신도 결국은 호스트 컴퓨터의 자원을 사용하는 것이기 때문에, 자원을 많이 잡아먹는 운영체제를 가상머신마다 설치하게 되니 많은 수의 가상머신을 동작시키기가 어려운 것입니다. 또한, 운영체제를 설치 하고 끝나는 것이 아니라 업데이트, 라이센스 비용 등 추가적인 비용 등이 더 들어갑니다.
즉, 가상머신은 ‘밀집도’가 떨어집니다. 하지만 도커는 컨테이너가 호스트 컴퓨터의 운영체제를 공유하기 때문에 별도로 운영체제를 설치하지 않아도 됩니다. 그렇다보니 하나의 호스트 컴퓨터에서 훨씬 많은 수의 컨테이너를 실행시킬 수 있고 각각의 컨테이너마다 별도로 관리하는 비용이 훨씬 덜 들어가고 호스트 컴퓨터의 운영체제를 관리하는 것이 모든 컨테이너의 운영체제를 관리하는 것과 동일한 것이기 때문에 ‘밀집도’ 또한 올라갑니다.
이렇듯 도커는 ‘격리’와 ‘밀집’ 이라는 상반된 개념을 동시에 잡은 플랫폼입니다.
도커 설치하기
마지막으로 도커를 설치하는 방법에 대해서 알아보겠습니다. ( Mac M1 환경에서 설치하는 방법입니다!! )
mac 에서 도커를 설치하는 방법은 크게 두가지로 나뉘는 것 같습니다. 하나는 homebrew 를 이용해 설치하는 방법이고 하나는 바로 도커 데스크톱을 설치하는 방법입니다. 두가지 방법 모두 쉽고 특히 도커 데스크톱을 바로 설치하는 방법은 정말 간단하기 때문에 이번 글에서는 homebrew 를 이용해 설치해보도록 하겠습니다. ( homebrew 와 cask 는 설치되어 있다는 과정하에 진행하겠습니다. )
먼저 homebrew 를 업데이트 및 업그레이들 해주겠습니다.
brew update
brew upgrade
다음으로 brew 명렁어로 docker 가 설치할 수 있는 목록에 있는지 확인해보겠습니다.
brew search docker
그럼 아래와 같이 설치할 수 있는 리스트가 뜹니다
formulae 는 패키지를 다운로드하고 컴파일 하는 방법으로 설치하고, cask는 formulae와 유사하지만 컴파일이 아닌 단일 바이너리를 설치하는 방법으로 오픈 소스의 경우 formulae 비중이 높고 패키지 설치파일이나 바이너리로 배포되는 앱의 경우 cask를 이용하는 경우가 많습니다. Formulae 는 brew 를 이용해서 설치를 바로 진행할 수 있지만 cask 목록에 있는 항목들은 cask 가 별도로 설치되어 있어야 합니다.
도커의 경우, formulae 와 cask 모두 항목에 있는 것을 볼 수 있습니다. formualae 로 설치하는 경우, docker-compose, docker-machine을 추가로 설치해주어야 하고 가상머신에 도커를 띄우는 작업을 해주어야 한고 또 서버를 실행했을 때 호스트 OS에서 접근하기 위한 포트포워딩 설정도 해주어야 합니다…
하지만 cask로 설치 할 시, docker-compose, machine 모두 설치해주고 MAC OS에 도커를 띄우기 때문에 가상 머신에서 포트포워딩을 할 필요가 없습니다. 또한 cask로 설치해야 도커 데스크톱이 설치가 되기 때문에 cask로 설치를 진행하겠습니다.
brew install --cask docker
docker -v
설치가 완료되면 mac 의 application 을 열어보면 매우 간단하게 docker desktop이 설치가 된 것을 확인할 수 있습니다. 도커를 formulae 방식으로 설치하고 싶으신 분들은 아래의 링크를 참고해주시기 바랍니다.