[docker] 완벽가이드 책 리뷰 3일차

오현우·2022년 5월 9일
0

docker

목록 보기
3/11

Docker Component

Docker는 핵심 기능인 Docker Engine을 중심으로 컴포넌트를 조합하여 어플리케이션 실행 환경을 구축함. CLI 환경에서 도커를 다루는게 매우 중요함

1. Docker Engine

도커의 이미지를 생성 및 컨테이너를 기동시키기 위한 도커의 핵심 기능
도커 명령 실행 및 Dockfile을 통한 image를 생성

2. Docker Registry

컨테이너의 바탕이 되는 도커 이미지를 공개 및 공유하기 위한 레지스트리 기능
도커 허브도 도커 레지스트리를 사용

3. Docker Compose

여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령을 실행함으로써 애플리케이션의 실행 환경을 구성하는 컨테이너를 일원 관리하기 위한 툴

4. Docker Machine

쿨라우드 환경에 도커의 실행환경을 명령으로 자동 생성하기 위한 툴

5. Docker Swarm

도커 스웜은 여러 도커 호스트를 클러스터화하기 위한 툴
클러스터를 관리하거나 API를 제공하는 역할은 Manager 가 컨테이너를 실행하는 역할은 Node가 담당
오픈 소스인 쿠버네티스가 대표적인 도커 스웜

도커의 작동 구조

컨테이너를 구획회 하는 장치 NameSpace

도커는 컨테이너라는 독립된 횐경을 만들고 그 컨테이너를 구획화하여 애플리케이션의 실행환경을 만듬

이 컨테이너를 구획하는 기술은 리눅스 커널의 nameSpace라는 기능을 사용하고 있음.

namespace란 한덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 하는 개념

따라서 리눅스의 오브젝트에 6개의 독립된 환경을 구축할 수 있음

  1. PID namespcae : 각 프로세스에 할당된 고유한 ID, 네임 스페이스가 다르면 다른 프로세스끼리 서로 액세스가 불가하다.(장고 뷰 프로젝트 도커환경에서 장고 리소스 파일들을 뷰에서 액세스가 불가했었다.)

  2. Network namespace: 네트워크 디바이스, ip주소, 포트번호, 라우팅 테이블, 필터링 테이블등 과 같은 네트워크 리소스를 격리된 namespace 마다 독립적으로 가질 수 있다. (장고 vue 연동했던 프로젝트에서도 도커 환경을 이용해서 포트번호를 다르게 부여 했었다.)

  3. UID namespace: namespace 안과 밖에서 서로 다른 UID GID를 가질 수 있음.
    예를들어 ubuntu docker 환경에서 루트 이용자 이지만, ubuntu host root 이용자는 아닌 이런 환경을 세팅해서 컨테이너 별로 권한을 격리시켜서 보안환경을 구축할 수 있음.

  4. Mount namespace: namespace 안에서 수행한 마운트는 호스트 os나 다른 namespace에서 액세스 할 수 없음.

  5. UTS namespace: namespace 별로 호스트명이나 도메인명을 독자적으로 가질 수 있음.

  6. IPC namespace: 프로세스간의 통신 오브젝트를 namespace별로 독립적으로 가질 수 있음.
    IPC는 프로세스 간의 통신 오브젝트라고 하는 공유 메모리나 메세지 큐를 말함.

도커는 이러한 네임스페이스 장치를 사용하여 호스트 상에서 컨테이너를 가상적으로 격리시킨다.

profile
핵심은 같게, 생각은 다르게

0개의 댓글