도커는 환경의 제약 없이 어디서나 동일하게 동작하도록 하는 오픈소스 컨테이너 기술입니다.
컨테이너 기술은 뭐고 왜 환경의 제약을 받지 않는 것이 필요할까요?
기존의 방식
기존에는 한 대의 서버에서 한 개의 어플리케이션을 운영하거나 혹은 여러개의 어플리케이션을 운영했습니다.
이런 방식의 경우 각각의 애플리케이션이 사용하는 리소스를 제어하기 힘든 문제가 있습니다.
전체를 같이 사용하기 때문에 여분의 리소스가 남아도 활용할 수 없고, 특정 애플리케이션이 리소스를 과도하게 점유해서 전체 서버가 중단되면 다른 애플리케이션도 같이 중단되는 문제가 발생할 수 있습니다.
Virtual Machine
이를 극복하기 위해 가상머신이 도입되게 되었는데요.
한 대의 서버에서 여러개의 운영체제를 실행시키고, 이 운영체제 안에서 각각의 어플리케이션 실행하도록 만들어주는 기술입니다.
이것은 하이퍼바이저(가상화, Hypervisor) 기반의 Virtual Machine(이하 VM)을 통해서 가능합니다.
하이퍼바이저란 한대의 시스템(Host)으로 다수의 운영체제(Guest)를 동시에 구동할 수 있게 하는 프로세스를 말합니다.
VM에는 각각 OS가 독립적으로 설치되고, 여기에는 바이너리와 라이브러리도 포함됩니다.
그리고 VM마다 리소스를 각각 설정할 수 있기 때문에 원하는대로 리소스를 조절하여 활용도를 높일 수 있습니다.
또한 각 VM간에는 영향을 미치지 않아 애플리케이션 간 격리가 가능하기 때문에 애플리케이션 추가/삭제에 용이해지는 장점이 있습니다.
예전에는 지금처럼 금융인증서나 민간인증서가 없었기때문에 무조건 공동인증서로만 인증이 가능했었는데요.
특정 공동인증서 프로그램은 윈도우에서만 동작하고 맥OS 등에서는 온라인뱅킹이 지원되지 않았습니다.
그래서 맥을 사용하는 사람들은 부트캠프나 버츄얼박스, 패러렐즈 등의 가상머신으로 윈도우OS를 설치해서 은행을 써야 했었는데요,
OS내에서 돌리는 프로그램이다보니 무척이나 느렸습니다.
OS 안에 OS를 설치하고 돌리다보니 VM은 용량도 상당히 클 뿐 아니라 속도도 빠르지 않은 문제가 있었습니다.
컨테이너 런타임
OS에 종속적인 기존의 VM의 단점을 극복한 컨테이너 기술이 개발되었습니다.
기존에는 하이퍼바이저 기반의 VM에서 애플리케이션이 실행되었다면, 컨테이너 기술에서는 컨테이너 런타임을 통하여 독립적인 컨테이너 환경을 만들고 애플리케이션을 실행할 수 있습니다.
컨테이너 런타임은 OS 커널을 공유하는 가상화 기술입니다.
하나의 OS에서 cgroups와 namespace를 통해 컨테이너로 분리하여 각각 독립적으로 자원을 사용할 수 있습니다.
cgroups(control groups)에서는 프로세스들의 자원을 할당하고 제한하는 역할을 합니다. 그리고 namespace는 프로그램 간의 간섭을 일으킬 수 없도록 칸막이를 칩니다. 이름에서 알 수 있듯 특정 이름으로 공간을 분리합니다.
도커
이런 컨테이너를 만드는 것을 쉽게 만들어주는 것이 도커(Docker)입니다.
컨테이너 포맷과 런타임을 표준화하여 도커 컨테이너는 어느 환경에서도 일관되게 실행할 수 있도록 보장해줍니다.
모든 도커 컨테이너는 이미지로부터 실행되고, 이 이미지는 코드, 런타임, 시스템도구, 라이브러리, 설정 등 애플리케이션을 실행하는데 필요한 모든 것을 포함한 패키지 입니다.
이미지는 Github와 유사한 서비스인 https://hub.docker.com를 통해 버전관리가 되고 있습니다.
하나의 이미지를 통해 여러개의 컨테이너를 실행할 수도 있습니다.
참고자료
남에게 설명할 때 비로소 자신의 지식이 된다.
포스팅이 도움되셨다면 하트❤️ 또는 구독👍🏻 부탁드립니다!! 잘못된 정보가 있다면 댓글로 알려주세요.