카테고리 없음

Docker 개념

혜wony 2023. 2. 28. 10:29

도커란

 

도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다. 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말합니다.

 

도커 엔진(Docker Engine)은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트입니다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다.

 

 

 

도커를 사용하는 이유?

어플리케이션을 개발하기 위해서는 운영체제에 여러 프로그램을 설치하고 개발환경을 구축한 뒤 개발을 시작한다.

입사 초반에는 클라우드 기반 프로젝트가 아니었는데 셋팅만 이틀이 걸린 기억이있다.

잘되면 잘되서 이상하고 한번에 안되면 멘붕이오는...개발 환경설정

도커를 사용하면 초기에 구축을 해놓고 그걸 기반으로 프로젝트를 시작할수 있기때문에 매우매우 편리하다.

 

즉 도커의 가장 큰 장점으로는

1.모듈성
컨테이너화에 대한 Docker 접근 방식은 전체 애플리케이션을 분해하지 않고도 업데이트 또는 복구를 위해 애플리케이션의 일부를 분해하는 기능에 중점을 둡니다. 이러한 마이크로서비스 기반 접근 방식 외에도 서비스 지향 아키텍처(SOA)와 거의 같은 방식으로 멀티플 애플리케이션 간에 프로세스를 공유할 수 있습니다.

2.계층 및 이미지 버전 제어
각 Docker 이미지 파일은 일련의 계층으로 구성되며 이러한 계층들은 단일 이미지로 결합됩니다. 계층은 이미지가 변경될 때 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성됩니다.

Docker는 이러한 계층을 재사용하여 새 컨테이너를 구축하는데, 이때 구축 프로세스 속도가 빨라집니다. 중간 변경 사항은 이미지 간에 공유되므로 속도와 크기, 효율성이 더욱 향상됩니다. 또한 계층화에는 버전 제어가 내재되어 있습니다. 새로운 변경 사항이 있을 때마다 변경 로그가 기본 제공되므로 컨테이너 이미지를 완벽하게 제어할 수 있습니다.

3.롤백
계층화의 가장 큰 장점은 아마 롤백 기능일 것입니다. 모든 이미지에는 계층이 있습니다. 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 됩니다. 이 기능은 애자일 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적 통합 및 배포(CI/CD)를 수행하는 데 도움을 줍니다.

4.신속한 배포
이전에는 새로운 하드웨어를 확보, 실행, 프로비저닝, 제공하는 데 며칠이 걸렸으며, 이를 위한 작업 및 오버헤드 부담도 상당했습니다. Docker 기반 컨테이너는 배포 시간을 몇 초로 줄일 수 있습니다. 각 프로세스에 대한 컨테이너를 생성하면 해당 프로세스를 새 애플리케이션과 빠르게 공유할 수 있습니다. 또한 컨테이너를 추가하거나 이동하기 위해 운영 체제를 부팅할 필요가 없으므로 배포 시간이 상당히 단축됩니다. 배포 시간이 단축되면 컨테이너에서 생성한 데이터를 쉽고 비용 효율적으로 생성하고 제거할 수 있습니다. 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다.

 

 

도커 컨테이너 구조

 

 

 

 

Docker Daemon
도커 데몬(dockerd)는 도커 REST API 요청을 듣고 도커 오브젝트들(이미지, 컨테이너, 네트워크 그리고 볼륨)을 관리한다. 또한 도커 데몬은 도커 서비스를 관리하는 다른 도커 데몬과 커뮤니케이션할 수 있다.

Docker Client
도커 클라이언트는 사용자가 도커와 상호작용할 수 있도록 해준다. 도커 클라이언트는 호스트의 데몬과 연결할 수 있으며, 하나 이상의 데몬과 소통할 수 있다. CLI를 제공함으로써 애플리케이션을 빌드, 실행, 중지할 수 있는 커맨드를 데몬에 전달할 수 있다. 도커 클라이언트의 주요 목적은 직접 레지스트리에서 이미지를 받아 호스트에서 실행할 수 있게 하는 것이다.

Docker Host
도커 호스트는 애플리케이션을 실행하도록 환경을 제공한다. 도커 호스트는 도커 데몬, 이미지, 네트워크, 스토리지, 컨테이너로 구성되어 있다. 이전에 언급했듯이, 데몬은 모든 컨테이너와 관련된 액션과 REST API를 통한 CLI 커맨드를 받는다. 또한 서비스를 관리하기 위해 다른 데몬들과 커뮤니케이션이 가능하다. 데몬은 클라이언트가 요청한 컨테이너 이미지를 받고 빌드한다. 요청된 이미지를 받으면, 빌드 파일로 컨테이너를 빌드한다.

Docker Objects
Images
이미지는 컨테이너를 빌드하기 위한 read-only 바이너리 파일이다. 이미지는 추가적인 구성과 함께 또 다른 이미지의 베이스가 될 수 있다. 컨테이너 이미지는 비공개 컨테이너 레지스트리를 사용하여 기업내에 있는 팀끼리 공유하거나 퍼블릭 레지스트리인 도커 허브를 사용하여 세계에 공유할 수 있다. 이미지는 전에는 가능하지 못했던 방식으로 개발자들 사이에 협업을 할 수 있게 해주기 때문에 가장 중요한 부분이다.

Container
컨테이너는 실행가능한 이미지의 인스턴스이다. 사용자는 컨테이너를 Docker API를 통해 생성, 삭제, 수정, 이동할 수 있다. 하나 이상의 네트워크에 컨테이너를 연결할 수 있다. 또한 스토리지를 분리 할 수 있으며 심지어 현재 상태를 기반으로 이미지를 생성할 수도 있다.