Docker
초보를 위한 도커 안내서 - 도커란 무엇인가?
Docker
는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
도커의 핵심은 경량화된 가상화 컨테이너이다.
Docker를 활용하면 OS 및 개발, 테스트, 실행 환경을 모두 포함하여 하나의 컨테이너 형태로 배포가 가능하다.
기존의 가상 머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이다.
하이퍼바이저를 이용해 게스트 OS를 설치하고 그 위에 어플리케이션을 올리는 구조.
이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고, 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었다.
Docker는 리눅스 컨테이너(LXC, Linux Container)
를 기반으로 OS를 프로세스 단위로 격리하여 사용한다.
단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다.
LXC
의 핵심은 Linux Kernel을 공유한다는 점이다.
커널을 공유함으로써 마치 하나의 운영체제에서 어플리케이션과 같은 형태로 가상화된 OS가 돌아갈 수 있게 되는 것이다.
도커는 LXC를 기반으로 시작해서 0.9버전에서는 자체적인 libcontainer 기술을 사용했고 후에 runC기술에 합쳐졌다.
리눅스는 운영체제 레벨에서 가상화를 제공한다.
OS를 통으로 가상화 하는 것이 아닌 리눅스 커널 레벨에서 제공하는 일종의 격리된 가상 공간이다.
OS가 설치되는 것이 아니기 때문에 가상 머신이라고 하지 않고, 컨테이너라고 부른다.
리눅스 컨테이너는 격리된 공간만 제공할 뿐, 개발이나 서버 운영에 필요한 부가기능은 부족했다.
Docker가 리눅스 컨테이너를 기반으로 하여 편리하게 이미지를 관리하고 배포할 수 있도록 해준다.
A Docker image is containing everything needed to run an application as a container.
이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 상태값을 가지지 않고(Stateless) 변하지 않는다(Immutable).
컨테이너는 이미지를 실행한 상태 라고 볼 수 있고, 추가되거나 변하는 값은 컨테이너에 저장된다.
같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
도커 이미지의 핵심은 레이어의 형태로 되어있다는 것이다.
도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 적지 않은데, 처음 다운받을 땐 크게 부담되지 않지만 기존 이미지에 파일 하나를 추가했다고 다시 다운받는다면 매우 비효율적인 일이다.
이런 문제를 해결하기 위해 레이어layer라는 개념을 사용한다.