마이크로서비스를 사용하고 배포를 자동화하고 하면서 유동적인 컨테이너인 Docker가 많은 인기를 얻고 여기저기 회사에서 많이 사용되고 있다. 실제로 백엔드 개발자에게는 거의 필수로 알고 가야하는 툴중에 하나가 되어버렸다.

 

Docker란 무엇인가?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼 이라고 한다. 여기서 컨테이너는 다양한 프로그램, 실행환경을 컨터이너에  동일한 인터페이스로 제공하여 여러 프로그램의 배포와 관리를 단순하게 해준다.

 

컨테이너 (Container)

컨테이너는 OS 와 격리된 공간으로서 별도의 프로세스가 동작하는곳을 말한다. 그러면 기존에 OS에서 VM을 설치하여 사용하던 방식과 무엇이 다른지 알아보자.

 


VM과 Docker의 차이


기존의 VMware는 HostOS에 GuestOS가 올라가는 방식으로 추가로 OS 파일이 올라가야 하기 때문에 부담이 된다. 하지만 컨테이너에 경우 별도의 OS를 또 올릴 필요없이 프로세스를 격리하는 방식으로 이러어져있다. 그렇기 때문에 훨씬 가볍고 빠르며 CPU, 메모리 프로세스가 필요한 만큼 추가할 수 있다.

그리고 서로 다른 컨테이너는 서로 영향을 주지 않고 각각의 컨터이너에 접속하여 명령어도 별도로 사용할 수 있고 여러개의 프로세스를 백그라운드로 실행할 수도 있다.

컨터이너에는 보안적인 문제가 있다. 컨테이너는 host와 커널을 서로 공유하기 때문에 container가 뚫리게 되면 host 커널에도 영향이 갈 수있다. 또한 다른 컨터이너도 같이 공유하고 있기 때문에 문제가 될 수있다.

그렇다면 이런 컨터이너에 실행되는 파일과 설정값을 가지고 있는것이 무엇인가? 바로 이미지(Image)이다. 

 


이미지 (Image)


이미지는 컨터이너에 실행에 필요한 파일과 설정등이 다 들어있다. 컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 추가되거나 변하는 값은 컨터이너에 저장된다. 같은 이미지에서 여러 컨테이너를 생성하더라도 수정, 삭제 하더라도 이미지의 값이 바뀌지는 않는다. 이미지는 Docker hub에 이미 등록되어 있고 추가적으로 등록할수도 있다. 개인의 Docker Registry 저장소를 직접 만들어 관리할 수 있다.

 

 


이미지 경로는 다음과 같이 되어있는데 모두 사용할 필요없이 간단하게 ubuntu:14.04와 같이 사용할 수 있다.

 



레이어 저장방식



도커 이미지는 실행하는 정보를 가지고 있기 때문에 용량이 크다. 그래서 이미지에 파일이 추가되었다고 파일 하나를 다시 받는다면 문제가 된다. 그래서 도커는 레이어라는 개념을 사용하였다. 기본적인 레이어는 동일하게 유지하며(읽기모드) 나머지 부분에 대해서만 쓰기 레이어를 만들어 사용한다. 그렇기 때문에 이미지 레이어는 그대로 사용되고 실행중에 생성하는 파일, 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러 컨터이너를 생성해도 최소한에 용량만 사용된다.

 


다음시간에는 Mac에 Docker를 설치해보자.


 출처 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

+ Recent posts