Docker

조민철·2024년 6월 26일

Docker

목록 보기
1/4
post-thumbnail

Docker?


도커Docker란 컨테이너 기반의 가상화 소프트웨어이고 애플리케이션을 패키징,배포,실행하기 위한 플랫폼이다. 컨테이너화 하여 응용프로그램을 서로 다른 환경에서도 일관되게 실행이 가능하고, 경량화되어있어 가볍고 확장성이 좋아 개발 및 배포 프로세스를 간소화 하는 데 사용된다.

Virtual Machine VS Container

우리가 VM이라고 부르는(ex. Virtual Box, VMware 등) 가상장치는 물리적으로 존재하는 것이아닌 추상화로 만들어진 가상장치이다. 도커도 가상화기술에 속해있다.
그림과 같이 VM 와 Container는 차이점이 있다.

Virtual Machine

VM이라고 부르는 가상머신은 물리적인장치 Infrastructure위에 하이퍼바이저가 올라가게 된다. 이 하이퍼바이저는 V1 과 V2로 나누어지는데 우리가 일반적인 노트북에 사용하는 VM소프트웨어는(VMware(ESXI는 제외), VirtualBox)가 존재하는데 앞서 소개한 VM은 하이퍼바이저 V2에 해당하고 V1은 베어메탈 위에 바로 가상화OS가 올라가는 형식이다.(따로 자세히 정리해서 올림)
아무튼, 하이퍼바이저 위에 또 다른 Guest OS가 올라가게 되고 이로 인해 무거워진다는 단점이 생긴다.

Container

컨테이너라는 기술은 원래 존재했던 기술이다. 단지 도커를 통해서 쉽게 사용할 수 있는데, 컨테이너는 리눅스에 내장된 LXC(LinuX Container)기술로 부터 처음 소개되기 시작했다. 단일 머신에서 여러 개의 독립된 리눅스 커널 컨테이너를 실행하기 위한 기법으로, 리눅스의 배포판이 달라고 리눅스의 커널은 같다. 그래서 리눅스 배포판 상관없이 커널을 이용해서 여러개의 독립된 컨테이너를 생성하고 사용한다. 즉, 정리하자면 실행에 필요한 모든 파일을 포함한 전체 실행 환경(runtime)에서 어플리케이션을 패키징하고 격리할 수 있는 기술이다.

  • VM
    • 가상머신은 호스트 운영체제(사용자 PC)위에 가상화된 하드웨어 계층을 생성(하이퍼바이저)하고, 각 머신들은 운영체제, 커널, 드라이버를 가진다
    • 각 머신들은 따로 운영체제를 가지고있기 때문에 무겁고 높은 자원 소비가 필요
    • 시간이 오래 걸린다
    • 따로 머신을 생성하고 독립된 가상의 장치를 가지기 때문에 자원을 많이 소비한다.
  • Container
    • 컨테이너는 호스트 운영체제(사용자 PC)의 커널을 공유 하기때문에 경량화 되어있다.
    • 가상머신보다 더 가볍다.
    • 호스트의 운영체제의 커널을 공유함으로 가볍고 효율적으로 자원을 활용한다.

Docker 자세히 보기


도커는 Image, Registry, Container, Client로 구성되어 있다

Docker Image

도커의 모든 컨테이너는 이미지 기반으로 생성되게 된다. 도커에서 서비스(어플리케이션) 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image라고 부른다. 특정 프로세스를 실행하기 위한 모든 파일의 설정값을 지닌 것으로 실행할 수 있는 완전한 상태를 이야기한다.

Docker Registry

도커 레지스트리 는 말그대로 도커 컨테이너 이미지를 저장하는 보관소의 개념이다. 도커 Registry는 Pubilc(공용), private(개인적인 저장소)가 존재한다. Public으로 대표적인곳이 Docker에서 운영중인 Docker Hub가 존재한다. private은 개인적으로 구성하기 나름이고 AWS의 ECR 서비스로 private한 저장소를 만들수 있다.

Docker Container

도커의 핵심적인 기능이다. Image를 이용해서 실행시키면 컨테이너화 된다. 도커 기반 컨테이너 이미지에서 생성된 일반적인 리눅스 컨테이너이다. 실행 중인 컨테이너는 도커를 실행하는 호스트에서 실행되는 프로세스이지만 호스트와 호스트에서 실행 중인 완전히 다른 프로세스로 격리 되어있다.

Docker Client

도커 Client는 사용자가 docker 명령어를 사용하게 되면 docker daemon과 통신하게 된다. 즉, 도커와 상호작용을 하게된다

Docker Daemon

docker daemon은 Client에서 명령어를 수행하게 되면 docker api가 받아서 전달하게 되고 daemon은 받아서 명령어를 처리하게 된다. 그리고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리하게 된다.

profile
기록의 힘은 대단하다

0개의 댓글