티스토리 뷰

docker

도커(Docker) 란?

sungjine 2017. 8. 19. 17:45
반응형

 도커는 컨테이너 기반의 가상화 플랫폼으로 다른 가상머신(VMWare, Oracle VM, Hyper v, 등등...)과 다른 방법으로 가상화 서비스를 제공하는데 가상머신의 경우 게스트 OS가 필요하며 매번 OS를 가상화하여 설치해야 한다. 하지만 도커의 경우 리눅스를 기반으로 하는 하나의 도커엔진을 가상화한 후 도커엔진 위에 원하는 프로그램만 컨테이너별로 나눠서 설치하는 방식으로 각각의 컨테이너를 개별적인 서버라고 생각하면 될 것 같다. 그렇기 때문에 도커는 하나의 OS에서 관리가 되기 때문에 OS의 자원을 컨테이너들이 공유하며 매번 OS를 설치하지 않기 때문에 다른 가상머신에 비해 빠르다.


 도커를 설치하기 위해서는 충족시켜야 하는 요구사항이 여러 가지 존재하는데 그중 하나를 말해보면 windows에서 사용하려면 Hyper v가 설치되어 있어야 한다. 만약 없다면 그냥 도커를 설치하는 것이 아닌 Docker-Toolbox를 설치해야 한다. Docker-Toolbox는 Hyper v가 없어도 Oracle VM을 자동으로 설치하여 리눅스 기반의 도커엔진을 가상화할 수 있게 해준다.



 도커에는 위에서 언급한 컨테이너와 이미지라는 개념이 있다.


 - 이미지


 이미지는 Dockerfile에 의해서 만들어지는데 도커 허브에서 다운받아 사용할 수 있고 직접 Dockerfile을 만들어 사용할 수도 있다. 도커 허브는 Dockerfile을 모아놓은 저장소로 생각하면 되는데 상당히 많은 양의 Dockerfile이 존재하고 있으며 개인이 만든 Dockerfile을 올릴 수도 있는데 공개 저장소는 무료이고 개인 저장소는 하나의 Dockerfile만 무료로 올릴 수 있다.

 이미지는 베이스 이미지와 도커 이미지로 나뉘는데 베이스 이미지는 OS를 실행시키기 위한 기본적인 내용을 담은 이미지를 뜻하고 부모 이미지가 없다. 도커 이미지는 베이스 이미지에 추가적인 내용을 담은 이미지를 뜻한다. 그리고 Dockerfile을 만들 때 반드시 이미지를 기반으로 Dockerfile을 만들어야 하는데 이때 기반으로 사용되는 이미지는 베이스 이미지가 될 수도 있고 도커 이미지가 될 수도 있으며 부모 이미지라고 부른다.

 이미지는 읽기 전용으로 컨테이너를 생성하는 데 사용되고 컨테이너를 만들 때 필요한 모든 정보를 가지고 있기 때문에 이미지에 필요한 설치파일이나 환경변수를 설정해 놓으면 컨테이너를 실행한 후 설치나 환경변수의 수정을 할 필요가 없다. 때문에 하나의 변경이 없는 이미지는 같은 컨테이너를 만들어 주고 협업을 할 때 같은 개발환경을 쉽게 만들 수 있다. 즉 반복적인 작업을 자동화하여 개발자가 개발에 집중할 수 있도록 한다.


 - 컨테이너


 컨테이너는 이미지를 통해서 만들어지며 실제로 실행되는 가상머신이라고 할 수 있어서 컨테이너를 생성, 실행, 중지, 재시작, 제거할 수 있으며 중지가 되더라도 컨테이너는 마지막 상태를 유지하고 제거를 하더라도 이미지는 삭제되지 않는다.

 컨테이너를 삭제할 경우 마지막 상태를 저장하고 싶으면 컨테이너를 이미지로 만들면 된다. 이때는 새로운 이미지가 생성된다.



 추가로 도커에는 레이어라는 개념이 있는데 이미지 레이어와 컨테이너 레이어로 나눌 수 있다.


 - 이미지 레이어

 이미지 레이어는 읽기 전용이다. 그래서 Dockerfile을 만들 때 부모 이미지 위에 레이어를 만들고 각각의 명령어마다 레이어를 생성하며 Dockerfile이 수정이 될 때는 수정된 내용을 포함한 레이어에 대해서만 수정이 된다. 즉 새로 생성된 레이어들은 이전 레이어에서 변경된 내용만을 담고 있다. 그렇기 때문에 이미지를 생성, 수정할 때 빠르게 만들 수 있다. 그리고 통합파일 시스템을 이용하여 단일 이미지로 결합하여 사용할 수 있다.

 이렇게 만들어진 이유는 이미지는 읽기 전용으로 수정이 안 되고 Dockerfile의 명령어가 수행될 때마다 새로운 이미지가 만들어지기 때문으로 파일 하나를 추가했다고 모든 내용을 다시 받는다면 매우 비효율적이기 때문이다.

 이미지 레이어의 마지막 레이어는 예외적으로 쓰기가 가능한 레이어이다.

 이미지 레이어를 사용함으로 이전에 빌드된 내용을 그대로 사용할 수 있어 빌드의 속도가 빠르다.


 - 컨테이너 레이어


 컨테이너 레이어에는 쓰기 가능한 레이어가 존재하는데 이 레이어를 통해서 읽기 전용의 레이어인 이미지로 컨테이너를 생성할 수 있다.



도커의 장점

1. 서버나 개발환경을 세팅하고 실행하는 데 있어서 적은 시간과 크기를 사용한다.

2. 컨테이너는 호스트의 환경에 독립적이기 때문에 도커가 설치되어 있다면 어디서든 동일하게 동작한다.

3. 컨테이너의 버전을 추적하기 쉽고 차이점을 검사하거나 롤백할 수 있다.

4. 레이어를 통해 구성 요소를 재사용하므로 속도나 크기를 경량화할 수 있다.

5. 다른 사람이 만든 Dockerfile을 공유받을 수 있다.

6. 응용 프로그램의 종속성에 관한 문제의 위험성과 유지보수를 위한 노력을 줄여준다.

반응형

'docker' 카테고리의 다른 글

자주 사용하는 도커 명령어 정리  (0) 2017.08.29
[docker + Elasticsearch5] max_map_count 설정  (0) 2017.08.16
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31