도커 정의 및 이점 정리

OPTIMUS PRIME·2023년 3월 22일
1

도커(Docker) 란?

도커(Docker)는 애플리케이션 구축, 구현 및 테스트를 위해 격리된 가상화 환경을 생성하는 서비스형 플랫폼입니다.

도커(Docker)는 컨테이너 엔진으로 리눅스 커널 기능을 사용하여 운영 체제 위에 컨테이너를 만들고,

도커(Docker)자체는 서비스의 컨테이너를 관리하는 데몬으로 실행됩니다.

즉, 도커는 컨테이너 서비스를 지원하기 위한 플랫폼 입니다.

도커 이미지(Docker Image)와 컨테이너(Container)

도커 이미지(Docker Image) 란?

도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드, 라이브러리, 컴파일된 실행 파일을 하나의 도커파일(Dockerfile)로 묶어 빌드 한 것이 도커이미지(Docker image) 라 합니다.

Dockerfile이란 docker에서 이용하는 이미지를 기반으로 하여 새로운 이미지를 스크립트 파일을 통해 내가 설정한 나만의 이미지를 생성할 수 있는 일종의 이미지 설정파일입니다.

즉, 특정 프로세스를 실행하기 위한(컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로 더 이상의 의존성 파일을 컴파일 하거나 이것저것 설치 할 필요가 없는 상태의 파일을 의미 합니다.

예를 들어서 Ubuntu이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, Oracle이미지는 Oracle을 실행하는데 필요한 파일과 실행명령어, port정보 등을 모두 가지고 있습니다.

도커이미지의 용량은 보통 수MB 이며, 가상머신의 이미지에 비하면 굉장히 적은 용량 입니다.

이미지는 상태값을가지지 않고 변하지 않습니다.(Immutable Infrastructure (변경 불가능한 인프라))

불변 인프라 란 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념입니다.

필요할 때마다 이 이미지를 활용하여 같은 환경의 서버를 복제할 수 있고, 서버에 변경이 필요하다면 기존 인프라를 수정하는 대신 새롭게 수정된 서버를 구축하고 그 상태를 이미지로 저장한 다음 그 이미지를 복제 할 수 있습니다.

즉, 컨테이너 가상화를 이용하기 때문에 쉽고 빠르게 기존 인프라를 폐기하고 새로 구성할 수 있다는 특징이 있습니다.

도커이미지들은 GITHUB 와 유사한 서비스인 DockerHub를 통해 버전 관리 및 배포(push & pull)가 가능합니다.

다양한 API가 제공되어 원하는 만큼 자동화가 가능합니다.

도커는 DockerFile 이라는 파일로 이미지를 만듭니다. DockerFile에는 소스와 함께 의존성 패키지등 사용했던 설정 파일을 버전 관하기 쉽도록 명시되어 집니다. 즉 누구나 이미지 생성 과정을 확인 할 수 있으며 수정 또 한 할 수 있습니다.

즉, 도커의 이미지는 컨테이너를 만드는 '압축파일'이라고 생각하면 이해가 편합니다.

도커 레이어(Docker Layer) 란?

도커 이미지는 코드의 변경 사항이 있을 때 마다 새로 만들어야합니다 여기서 레이어라는 개념이 등장합니다.

도커 이미지를 빌드 하거나 이미지를 다시 빌드 할 때 변경된 부분의 명령과 그 이후의 모든 명령이 다시 빌드 된다는 의미입니다.

즉, 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일(기존에 없는)만을 추가하기 위한 개념 입니다.

이미지는 여러 개의 읽기 전용(read only) layer로 구성되고, 파일이 추가되면 새로운 layer가 생성된다.

도커는 여러 개의 layer를 묶어서 하나의 파일시스템으로 사용 할 수 있게 됩니다. 그래서 이미지와 레이어는 같은 의미로도 사용 됩니다.

Dockerhub 및 개인 저장소에서 이미지를 공유할 때는 바뀐 부분(layer=image)만 주고받기 가능하며 이것이 version 관리하는 원리입니다.

레이어 version 관리 실험 자료

docker pull nginx:1.15.1 명령어를 사용해서 nginx 이미지를 하나 다운로드 합니다.

nginx 1.15.1 설치
docker pull nginx:1.15.2 명령어를 사용해서 바로 다음 버전의 nginx를 다운로드 합니다.

nginx 1.15.2 설치
처음과는 다르게 be8881be8156 레이어가 이미 존재한다고 판단하여 다운로드 하지 않고 넘어감을 볼 수 있습니다.

따라서 nginx:1.15.1 과 nginx:1.15.2는 서로 같은 레이어(be8881be8156)를 공유한다는 것을 알 수 있습니다.

컨테이너(Container) 란?


컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 소프트웨어 패키지입니다.

도커 컨테이너의 경우 Hypervisor 같은 소프트웨어로 하드웨어를 에뮬레이팅 하고 그 위에 게스트 운영체제를 설치하는 가상머신과 달리 호스트 운영체제만 필요로 하고, Host OS의 커널을 공유 하며 동작합니다.

커널(Kernel) 이란?

커널(Kernel)은 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스 입니다. 그리고 두 가지 관리 리소스(하드웨어, 프로세스) 사이에서 최대한 효과적으로 통신 합니다.

커널의 주요 기능은 컴퓨터에 속한 자원들에 대한 접근을 중재 하는 것 입니다. 커널은 운영 체제의 핵심 부분이므로, 커널의 역할 역시 운영 체제의 핵심 역할이라 할 수 있습니다.

커널(Kernel)기능 정리

메모리 관리: 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다.

프로세스 관리: 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정합니다.

장치 드라이버: 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행합니다.

시스템 호출 및 보안: 프로세스의 서비스 요청을 수신합니다.

하이퍼바이저(Hypervisor) 란?

하이퍼바이저(Hypervisor)는 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼을 말합니다.

하나 이상의 가상머신(virtual machine)을 실행하는 컴퓨터가 “호스트(Host)” 가 되고 각 가상 머신들은 “게스트(Guest)“ 가 됩니다.

에뮬레이션(Emulation) 란?

에뮬레이션은 완전히 똑같은 방법으로 다른 대상을 하드웨어 동작까지도 흉내 내는 것을 말합니다.

소프트웨어 에뮬레이션: 원래 하드웨어적으로 수행되는 작업을 소프트웨어로 흉내 내어 처리하는 것 입니다.

Virtual Machine 과 Docker Container

가상머신(VM, VirtualMachine)

가상 머신은 하나의 서버를 여러 서버로 전환하는 물리적인 하드웨어의 추상화라고 정의 됩니다.

하이퍼바이저(Hypervisor) 가상화 엔진을 통해 단일 시스템에서 여러VM을 실행 할 수 있지만 각VM에는 운영체제(OS), 애플리케이션, 필요한 Binary 및 Libary의 전체 복사본이 포함되어 있습니다.

따라서 이 복사본은 수GB를 차지하기 때문에 VM의 부팅 속도 또한 느려 질 수 있다는 특징이 있습니다.

즉, 가상머신은 하이퍼바이저를 통해 하나의 호스트OS에서 여러 개의 OS를 사용하는 방법이며, 각각의 가상머신은 하나의 독립된 커널 공간을 가진 완전한 컴퓨터를 생산하는 식의 환경을 구성합니다.

도커(Doker Container)

하나의 HostOS (OperratingSystem)위에 도커(Docker Engine)를 설치하여 그위에 각각의 서비스(Application) 환경들을 설치 및 운영 하는 형태입니다.

Docker Engine은 Docker Components와 서비스를 제공하는 컨테이너를 구축하고 실행하는 기본 핵심 소프트웨어입니다.

Docker Engine은 Docker Daemon, REST API, API를 통해 도커 데몬과 통신하는 CLI로 모듈식으로 구성되어있습니다.

개발자들이 Docker라고 할 때, 주로 Docker engine을 의미합니다.

각각의 서비스(Application) 환경들은 각각 OS를 설치하는것이 아니라 하나의 HostOS 위에서 자원(Process)만 공유하기 때문에 상대적(Virtual Machine)에 비해 가볍습니다.

도커가 설치된 환경이라면 도커 이미지(Image)를 사용 가능하기 때문에 어디서든 사용 가능하다는 장점이 있습니다.

즉, 컨테이너란 프로세스 단위의 분리 독립된 환경(공간) 안의 가상 공간이라고 할 수 있습니다.

Virtual Machine 과 Docker Container 표 비교

도커 이점 정리

독립된 개발 환경 보장

Container는 격리된 공간이므로 그 자체에 특별한 권한을 주지 않는 한
내부에서 무엇을 하든 Host OS에는 영향을 끼치지 않습니다.

개발/운영 환경의 통합

Container 내부 작업을 배포하기 위해서는 해당 Container를 docker image라는 하나의 패키지로 만들어 운영 서버에 전달하기만 하면 됩니다.

서비스를 개발했을 때의 환경을 다른 서버에서도 똑같이 복제할 수 있기 때문에
각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요가 없습니다.

배포 신속성 및 H/W 효율

Kernel을 포함하고 있지 않기 때문에 image 크기가 비교적 작습니다.
따라서 Application의 배포 속도가 매우 빨라지며, H/W 용량을 작게 차지합니다.

profile
개발자에서 엔지니어로 쩜푸!

0개의 댓글