[Docker] Docker의 기능(Build, Ship, Run)과 컴포넌트

Fabro·2021년 9월 13일
0
post-thumbnail

Docker의 기능과 작동 구조

Docker의 기능

Docker 이미지

  • 애플리케이션의 실행에 필요한 파일들이 저장된 디렉토리
  • Docker 명령을 사용하면 이미지를 tar 파일로 출력 가능
  • 이미지는 Docker 명령을 사용해 수동으로 만들 수도 있으며, Dockerfile이라는 설정 파일을 만들고 그것을 바탕으로 자동으로 만들 수도 있다.
  • CI/CD 관점에서 코드에 의한 인프라의 구성 관리를 생각하면 Dockerfile을 사용하는게 바람직하다.
  • Docker 이미지는 겹쳐서 사용 가능

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

  • 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아서 Docker 이미지를 만든다.
  • Docker 이미지는 실행 환경에서 움직이는 컨테이너의 바탕이 된다.
  • 하나의 이미지에는 하나의 애플리케이션만 넣어 두고, 여러 개의 컨테이너를 조합하여 서비스를 구축하는 방법 권장

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

  • Docker 레지스트리에서 공유 가능
  • Docker 공식 레지스티리인 Docker Hub에서 Ubuntu나 CentOS의 기본 기능을 제공하는 베이스 이미지를 배포하고 있음
  • 이러한 베이스 이미지에 미들웨어나 라이브러리, 전개 할 애플리케이션 등을 넣은 이미지를 겹쳐서 독자적인 Docker 이미지를 만들어 나가는 것
  • 공식 이미지 외에도 개인이 작성한 이미지를 Docker Hub에서 자유롭게 공개 및 공유 가능

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

  • Docker는 Linux 상에서 컨테이너 단위로 서버 기능을 작동시키고 이 컨테이너의 바탕이 Docker 이미지이다.
  • Docker가 설치된 환경에 Docker 이미지만 있으면 컨테이너를 작동시킬 수 있다.
  • 하나의 이미지로부터 여러 개의 컨테이너를 만들 수 있다.
  • Docker는 하나의 Linux 커널을 여러 개의 컨테이너에서 공유하고 있으며 컨테이너 안에서 작동하는 프로세스에 파일 시스템이나 호스트명, 네트워크 등을 할당하여 각각 그룹으로 관리하는데 그룹이 다르면 프로세스나 파일에 대한 액세스가 불가능하다.
  • 이러한 구조로 컨테이너를 독립된 공간으로 관리하기 위해 Linux 커널 기능(namespace, Cgroup 등)이 사용된다.


Docker 컴포넌트

Docker는 몇 개의 컴포넌트로 구성되어 있다. Docker Engine을 핵심으로 컴포넌트를 조합하여 애플리케이션 실행 환경을 구축한다.

  • Docker Engine(Docker의 핵심 기능)
    • Docker 이미지를 생성하고 컨테이너를 가동시키기 위한 Docker의 핵심 기능
    • Docker 명령의 실행이나 Dockerfile에 의한 이미지도 생성

  • Docker Registry(이미지 공개 및 공유)
    • Docker 이미지 공개 및 공유하기 위한 레지스트리 기능
    • 공식 레지스트리인 Docker Hub도 Docker Registry 사용

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

  • Docker Machine(Docker 실행 환경 구축)
    • 로컬 호스트용인 Virtual Box를 비롯해 AWS EC2나 MS Azure와 같은 클라우드 환경에 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴

  • Docker Swarm(클러스터 관리)
    • Docker 호스트를 클러스터화하기 위한 툴
    • ⭐️Kubernetes⭐️와 비슷한 플랫폼

References

  • 완벽한 IT 인프라 구축을 위한 Docker
profile
엔지니어 유망주의 곡괭이질

0개의 댓글