가상화란 제한된 하드웨어 환경에서 여러가지 OS 및 서비스를 구축하기 위해 하이퍼 바이저 위에 각각의 OS를 따로 구축해서 사용하는 방법이다.
이렇게 가상머신 위에 사용하다보니 자연스레 각각의 Virtual Machine마다 OS를 설치해 주어야했고 OS가 사용하는 리소스가 따로 소모되기 때문에 낭비되는 자원이 상당히 많다.
OS버전의 EOS(End Of Service)가 만료될경우 신규 OS를 설치하고 거기에 다시 App을 설치하려면 꽤나 복잡하고 호환성도 테스트해야되는 많은 번거로움이 있다.
그래서 2013년 출시된 도커는 다른방향으로 구현이 됐습니다
여러개의 Guest OS에서 각각의 App을 띄우는게 아닌 하나의 종속된 OS에서 Docker 위에 각각의 컨테이너에 App을 하나씩 띄우게 되면서 OS 커널을 다른 컨테이너와 공유 할 수 있으며, 각 컨테이너는 사용자 공간에서 격리 된 프로세스로 실행된다.
컨테이너는 VM보다 적은 공간을 차지하고 적은 리소스를 사용하기때문에 효율이 더 좋아졌다.
Image / Container
기본적으로 도커에서 이미지&컨테이너는 도커를 효율적으로 사용하게끔 도와주는 기능.
Image
먼저 이미지는 OS image와 같다고 보시면됩니다. Windows OS를 설치할때 ISO파일을 확인할 수 있듯이 ISO로 설치되는 윈도우에는 기본적으로 윈도우에 필요한 모든것들이 설치되어있다. 도커에서 사용되는 각각의 이미지들에는 이미지이름에 맞춰 필요한 것들이 기본적으로 설치되어있으며 추가적으로 필요한경우 직접 이미지에 필요한 툴을 추가설치해서 새로운 이미지를 만들 수도있다.
위 도커 이미지를 사용해서 컨테이너를 생성하게 된다면 기본적으로 Docker위에 Ubuntu 환경이 구축되는것이며 이미지를 생성할때 apt install nginx 과정을 추가한다면 Ubuntu + Nginx의 이미지가 생성되는것이다.
다만 ubuntu 이미지 자체가 용량이 꽤나 크고 무거운 이미지에 속하므로 nginx만 docker로 사용하려면 아래처럼 nginx 공식이미지가 따로확인 가능하다.
공식이미지의 경우 문서를 보면 OS Layer가 어떤걸로 사용됐는지 나와있다. 가벼운 OS종류인 Alpine 이나 데비안 종류가 많이 사용된다.
Container
컨테이너는 위에 설명한 Image를 통해 만들어진 것이라고 보시면 될 것같다.
아래 컨테이너를 보면 도커의 관리를 도와주는 portainer이미지로 만들어진 컨테이너임을 확인할 수 있다. 사용하고있는 port나 언제 생성되었는지 정보도 포함되어있다.
portainer를 이용하면 도커에서 실행되는 컨테이너, 이미지등을 편하게 확인할 수 있기 때문에 초보자 분들께는 추천드리는 이미지이다.
각각의 컨테이너는 용도에 맞춰서 만들어주고 잘 배치해주면 하나의 OS 하나의 Docker아래 여러가지 서비스를 쉽게 운영할 수 있으며 추후에 OS환경, 클라우드 환경을 바꾸더라도 쉽게 마이그레이션 가능하다.