도커(Docker)는 리눅스 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

 

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

컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.

 

컨테이너는 OpenVZ, LXC, cri-o 등 여러 개가 있지만 도커가 사실상 표준으로 사용되고 있다

 

도커는 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다.

리눅스 자체 기능인 namespace, cgroups, chroot 등과 같은 리눅스 커널의 기능들과 OverayFS, aufs와 같은 파일 시스템의 리소스 격리 기능을 사용하여  프로세스 단위의 독립된 가상 공간을 만든다.

도커는 리눅스 컨테이너에 여러 기능을 추가함으로써  애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 해준다.

 

도커 관련 프로젝트는 도커 컴포즈, 레지스트리, 도커허브, 도커 데스크탑 등 여러 가지가 있지만
도커라고 하면 일반적으로 도커 엔진을 의미한다.
도커 엔진은 컨테이너를 생성하고 관리하는 주체로써 컨테이너를 제어할 수 있는 다양한 기능을 제공하는 핵심기술로써

도커 엔진에서 사용하는 가장 중요한 요소가 이미지와 컨테이너

 

[Docker Architecture]

 

컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 어플리케이션을 구동하는데 필요한

라이브러리 및 실행 파일만 존재한다.
도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다.
컨테이너 내부에 수많은 SW를 설치하고 설정 파일을 수정해도 호스트 OS에는 영향을 끼치지 않는다.

컨테이너 내부에서 SW개발 및 라이브러리 설치 등의 작업을 마친 후 운영 환경에 배포할 경우
컨테이너를 도커 이미지로 패키징하여 운영 서버에서 실행할 수 있다.
운영 서버에서 SW 설치 및 라이브러리 의존성을 고민할 필요가 없다.
서비스 개발 환경을 다른 서버에서 컨테이너로 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다.
컨테이너를 이미지로 만들어 배포하는 시간이 빠르고 가상화된 공간을 사용할때 성능 손실도 거의 없다.

 

○ 도커 이미지
컨테이너 생성할때 필요한 요소.

이미지는 여러 개의 계층으로 된 바이너리 파일, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.

이미지 이름은 [저장소이름]/[이미지이름]:[태그] 로 구성된다.
- 저장소 : 이미지 저장된 장소. 기본 저장소는 도커 허브(Docker Hub)
- 이미지이름 : 이미지 역할, 종류 등 나타내는 이름
- 태그 : 이미지 버전, 생략시 latest 사용

○ 도커 컨테이너
이미지 목적에 맞게 독립된 SW, 자원 및 네트워크을 사용할 수 있는 독립된 공간

대부분의 도커 컨테이너는 생성될 때 사용된 이미지의 종류에 따라 알맞은 설정 파일을 가지게 된다.

하나의 이미지로 부터 여러 개의 컨테이너를 생성 할 수 있다.

컨테이너는 이미지를 읽기 전용으로 사용, 변경된 내용은 컨테이너 내부에 저장하므로 원래 이미지에 영향을 미치지 않는다.

생성된 컨테이너는 독립된 파일시스템을 사용, 호스트와 분리되어 있으므로

특정 컨테이너에서 어떤 애플리케이션이 설치하거나 삭제되어도 다른 컨테이너와 호스트에는 영향이 없다.

 

 

 

 

'Docker' 카테고리의 다른 글

Docker - image  (0) 2023.09.19
Docker 설치  (0) 2023.09.19
Docker Volume  (0) 2022.11.13
Docker 사용법  (0) 2022.11.03

+ Recent posts