본문 바로가기
Tech/Docker

Docker 기능 개념 & 컴포넌트, 작동 구조의 이해

by Augustine™ 2018. 12. 24.
반응형

Docker 이미지를 만드는 기능(Build)

  •  Docker 는 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아서 Docker 이미지를 만들 수 있다.
  • Docker 이미지는 실행환경에서 움직이는 컨테이너의 바탕이 된다.
  • Docker에서는 하나의 이미지에는 하나의 애플리케이션만 넣어 두고, 여러 개의 컨테이너를 조합하여 서비스를 구축하는 방법이 일반적이다.
  • Docker 이미지는 Docker의 명령을 사용해서 수동으로 만들 수도 있고, Dockerfile이라는 설정 파일을 만들어 그것을 바탕으로 자동으로 이미지를 만들 수도 있다. 
  • 하지만 지속적 인티그레이션과 딜리버리의 관점에서 코드에 의한 인프라의 구성 관리를 생각하면 Dockerfile을 사용하여 관리하는 것이 바람직하다.


Docker 이미지를 공유하는 기능(Ship)

  • Docker 이미지는 Docker 레지스트리(Docker Hub)에서 공유할 수 있다.
  • Docker Hub에 로그인하여 레지스트리에 있는 이미지를 검색이나 업로드 다운로드할 수 있다.
  • Docker Hub는 GitHub나 Bitbucket와 연계할 수도 있다.
    • GitHub상에서 Dockerfile을 관리하고, 거기서 Docker 이미지를 자동으로 생성하여 Docker Hub에서 공개하는 것이 가능.


Docker 컨테이너를 작동시키는 기능(Run)

  • Docker 는 리눅스 상에서 컨테이너 단위로 서버 기능을 작동시킨다.
  • Docker 이미지만 있으면 Docker 가 설치된 환경이라면 어디서든지 컨테이너를 작동시킬 수 있다.
  • 또한, Docker 이미지를 가지고 여러 개의 컨테이너를 기동시킬 수도 있다.
  • 다른 가상화 기술로 서버 기능을 실행시키면 OS의 실행부터 시작하기 떄문에 시간이 걸리지만, Docker의 경우는 이미 움직이고 있는 OS상에서 프로세스를 실행시키는 것과 거의 똑같은 속도로 빨리 실행시킬 수 있다.(Docker의 가장 큰 장점으로 생각된다.)


Docker 컴포넌트

Docker는 다음과 같은 몇 개의 컴포넌트로 구성되어 있다.

  1.  Docker Engine(Docker의 핵심 기능)
  2. Docker Registry(이미지 공개 및 공유)
  3. Docker Compose : 여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령을 실행함으로써 애플리케이션의 실행 환경을 구성하는 컨테이너들을 관리하기 위한 툴이다.
  4. Docker Machine : VirtualBox, Amazon Web Services EC2나 Azure와 같은 클라우드 환경에 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴이다.
  5. Docker Swarm(클러스터 관리) : Swarm은 여러 Docker 호스트를 클러스터링하기 위한 툴이다. 클러스터를 관리하거나 API를 제공하는 역할은 Manager가, 컨테이너를 실행하는 역할은 Node가 담당한다.


Docker 작동 구조

Namespace

Docker는 컨테이너라는 독립된 환경을 만들고, 그 컨테이너를 구획화하여 실행 환경을 만든다. 이 컨테이너를 구획하는 기술은 리눅스 커널의 namespace라는 기능을 사용하고 있다.

  • PID namespace : PID namespace는 PID와 프로세스를 격리시킨다. 따라서, namespace가 다른 프로세스끼리는 서로 액세스할 수 없다.
  • Network namespace : 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등과 같은 네트워크 리소스를 격리된 namespace마다 독립적으로 가질 수 있다.
  • UID namespace : UID, GID(그룹 ID)를 namespace별로 독립적으로 가질 수 있다. 즉, namespace별로 UID/GID가 0인 root사용자를 각각의 권한을 가지게 할 수 있다. 
  • Mount namespace : namespace 안에 격리된 파일 시스템 트리를 만들수 있다. 
  • UTS namespace : namespace 별로 호스트명이나 도메인명을 독자적으로 가질 수 있다.
  • IPC namespace : 프로세스 간의 통신(IPC) 오브젝트를 namespace 별로 독립적으로 가질 수 있다.


네트워크 구성(가상 브리지/가상 NIC)

  • Linux는 Docker를 설치하면 서버의 물리NIC가 docer0이라는 가상 브리지 네트워크로 연결된다. 
  • 이 docker0은 Docker를 실행시킨 후에 디폴트로 만들어진다.
  • Docker 컨테이너가 실행되면 컨테이너에 172.17.0.0/16이라는 서브넷 마스크를 가진 프라이빗 IP 주소가 eth0으로 자동으로 할당된다.


반응형

'Tech > Docker' 카테고리의 다른 글

Virtualbox Ubuntu 네트워크 환경 구성  (0) 2019.02.28
Docker 명령어 모음  (4) 2018.12.27
클라우드 이해  (3) 2018.12.19
Docker Ubuntu 설치(feat. docker 명령어 모음)  (0) 2018.11.23
Setup oracle 11g xe for docker  (0) 2018.09.30

댓글