만자의 개발일지

[Docker] Docker란 본문

Docker

[Docker] Docker란

박만자 2021. 11. 12. 13:46

도커(Docker)

도커(Docker)는 리눅스 컨테이너에 여러 기능을 추가함으로써 어플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 오픈소스 프로젝트입니다. 도커는 Go 언어로 작성돼 있으며, 2013년 3월 첫 번째 릴리스가 발표된 이후 지금까지 꾸준히 개발되고 있습니다. 기존에 쓰이던 가상화 방법인 가상 머신과는 달리 도커는 컨테이너의 손상이 거의 없기에 클라우드 인프라 솔루션으로서 많이 사용됩니다.

도커를 사용하는 가장 큰 이유는 가상화 입니다. 기존의 우리가 아는 가상화 기술은 여러 개의 운영체제를 하나의 컴퓨터(host)에서 생성해 사용하는 방식이었습니다. 이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상머신에는 Ubuntu, CentOS 등의 운영체제가 설치되어 사용됩니다. 대표적으로 VirtualBox, VMware 등이 있습니다.

그러나 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저 를 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생합니다. 이러한 단점을 보안하기 위해 도커는 컨테이너라는 것을 사용합니다.

하이퍼바이저란 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼 입니다.

 

컨테이너

도커 컨테이너는 가상화된 공간을 생성하기위해 리눅스의 자체 기능인 chroot, 네임스페이스(namespace), cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없습니다. 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 대 이미지의 용량 또한 가상 머신에 비해 대폭 줄어듭니다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있습니다.

도커 이미지로 컨테이너를 생성하면 해당 이미지의 목적에 맞는 파일이 들어 있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성되고, 이것이 바로 도커 컨테이너가 됩니다.

대부분의 도커 컨테이너는 생성될 때 사용된 도커 이미지의 종류에 따라 알맞은 설정과 파일을 가지고 있기 떄문에 도커 이미지의 목적에 맞도록 사용되는 것이 일반적입니다. 예를들어, 웹 서버 도커 이미졸부터 여러 개의 컨테이너를 생성하면 생성된 컨테이너의 개수만큼 웹 서버가 생성되고, 이 컨테이너들은 외부에 웹 서비스를 제공 하는데 사용될 것입니다.

 

그렇다면 도커 컨테이너에서 사용되는 이 도커 이미지는 무엇일까요?

 

 

도커 이미지(Docker Image)

도커 이미지는 컨테이너를 생성할 떄 필요한 요소이며, 가상 머신을 생성할 때 사용하는 iso 파이로가 비슷한 개념입니다. 이미지는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용됩니다.

도커 에서 사용하는 이미지의 이름은 기본적으로 [저장소 이름]/[이미지 이름]:[태그] 의 형태로 구성됩니다. 도커 허브(Docker Hub)라는 중앙 이미지 저장소에서 이미지를 내려받습니다. 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소입니다. create, run, pull 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받습니다. 필요한 대부분의 이미지는 도커 허브에서 공식적으로 제공하거나 다른 사람들이 도커 허브에 이미 올려놓은 경우가 대부분이라서 어플리케이션 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있다는 장점이 있습니다.

Comments