Docker와 Container

혀어어언·2023년 4월 4일
0

Docker

목록 보기
2/11
post-thumbnail

Docker와 Container

도커란?

  • 컨테이너 기반가상화 도구
    • 리눅스 커널 컨테이너 기술(LXC; Linux Containers) 을 기반으로 합니다.
  • 애플리케이션을 컨테이너 단위격리하여 실행하고 배포하는 기술
  • 불변 인프라(Immutable infrastructure)를 적용하기 위한 주요 도구 중 하나입니다.
    • Docker의 이미지는 불변 인프라의 핵심 개념에 따라 불변성을 유지하며 변경되지 않습니다.
    • Docker를 사용하면 애플리케이션 및 해당 의존성을 포함하는 이미지를 작성할 수 있습니다. 이 이미지는 변경되지 않으며, 새로운 인스턴스를 생성할 때마다 항상 동일한 상태로 생성됩니다.
    • Docker Compose를 사용하면 다수의 컨테이너를 연결하여 단일 서비스로 구성할 수 있다. 이러한 서비스는 불변성을 유지하며, 새로운 버전을 배포하면 기존 서비스와 함께 새로운 서비스 인스턴스를 생성하여 이전 버전과 구분합니다.
    • Immutable Infrastructure의 기본 원칙에 따라 불변 서비스를 유지하면서, 새로운 기능을 추가하고, 버그를 수정할 수 있도록 해줍니다.
  • 고(Go) 언어로 작성

공식 문서에서 말하는 도커

  • 앱 개발, 배포 및 실행을 위한 개방형 플랫폼(open platform)

  • 앱에서 인프라를 분리하여 신속합니다.

  • 앱을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다.

  • 앱 배포와 테스트에 있어서 Docker의 방법론을 활용하면 코드 작성과 프로덕션 환경에서의 실행 사이의 지연을 크게 줄일 수 있습니다.

  • 즉 Docker는 다양한 운영체제에서 사용될 수 있으며 컨테이너화된 앱을 손쉽고 효율적으로 빌드, 배포, 관리할 수 있는 다양한 기능 제공해줍니다.

[참고] 샌드박스(SandBox)란?
개발에서 샌드박스는 일종의 격리된 환경을 말합니다.이는 개발자들이 새로운 코드를 안전하게 실험하고 테스트할 수 있는 환경을 제공합니다. 일반적으로 개발 중인 애플리케이션을 복제하고 격리된 환경에서 실행하는 것을 의미합니다.

도커 플랫폼(docker platform)

  • 도커는 컨테이너라고 불리는 느슨하게 격리된 환경에서 앱을 패키징하고 실행할 수 있는 기능을 제공합니다.
  • 이러한 격리와 보안을 통해 특정 호스트에서 여러 컨테이너들을 동시에 실행 가능합니다.
  • 컨테이너들은 가벼우면서도 앱을 실행하기 위해 필요한 모든 것을 포함합니다.
    • 따라서 개발자는 호스트에 현재 설치된 것들에 의존할 필요가 없습니다.
  • 작업중 손쉽고 컨테이너 공유가 가능하며, 모든 사람이 동일한 방식으로 작동하는 동일한 컨테이너를 공유하는 것이 가능합니다.

컨테이너란?

  • 가상화 기술 중 하나로 호스트 머신의 다른 모든 프로세스로부터 격리되어(isolated) 별도의 머신에서 실행되는 샌드박스 프로세스(sandboxed process)

    • 격리는 리눅스의 기능인 커널 네임스페이스(kernel namespace)와 cgroup을 활용합니다.
    기능설명
    chroot파일 시스템 격리
    namespace프로세스 격리
    cgroup하드웨어 자원 격리하고 할당
  • 호스트 OS 위에 컨테이너 엔진(container engine)을 통해 여러 개의 격리된 환경을 생성합니다.

  • 각각의 컨테이너 환경 내부에서 라이브러리와 앱을 실행합니다.

  • 컨테이너는 OS나 파일에 대해서 알 수 없으며 Docker Desktop에 의해 제공된 환경에서 실행됩니다.

공식문서에서 말하는 컨테이너

  • 실행가능한 이미지의 인스턴스(runnable instance of machines)
    • DockerAPI 또는 CLI를 통해 컨테이너를 생성, 시작, 중지, 이동 또는 삭제 가능합니다.
  • 로컬 머신, 가상머신에서 실행 가능하거나 클라우드에 배포 가능합니다.
  • 이식 가능(portable)
    • 모든 운영체제에서 동작합니다.
  • 다른 컨테이너로부터 격리되어 자체 소프트웨어, 바이너리, 설정을 실행합니다.

컨테이너 이미지란?

  • 컨테이너를 실행할때, 컨테이너는 격리된 파일시스템을 사용하며
  • 컨테이너 이미지는 이러한 커스텀 파일시스템을 제공합니다.
  • 이미지는 컨테이너의 파일시스템을 포함하기 때문에 앱을 실행하기 위해 필요한 모든 것을 포함해야만 합니다.
    • 모든 종속성
    • 설정들
    • 스크립트
    • 바이너리 등
  • 또한 환경 변수나, 실행을 위한 기본 명령어 또는 메타데이터와 같은 컨테이너를 위한 다른 설정들을 포함하기도 합니다.

도커의 구조(Docker Architecture)

  • 도커는 클라이언트-서버 구조를 사용합니다.

  • 도커 클라이언트는 컨테이너를 빌드, 실행 및 배포하는 등의 무거운 작업을 수행하는 도커 데몬과 통신합니다.

  • 실행 위치

    • 도커 클라이언트과 데몬은 동일한 시스템에서 실행되거나
    • 원격의 데몬에 클라이언트를 연결할 수도 있습니다.
  • 통신 방식

    • 클라이언트와 데몬은 UNIX 소켓이나 네트워크 인터페이스를 통한 REST API를 사용하여 통신합니다.

architecture

도커 호스트(docker host)

  • 도커 엔진이 깔려있는 디바이스. 즉, 컴퓨터
  • 컨테이너 엔진이 컨테이너를 만들고 컨테이너를 제어
  • 그 기능을 도커에서 만든 것이 도커 엔진입니다.

도커 데몬(docker daemon = dockerd)

  • 도커 데몬은 도커 엔진의 핵심 요소
  • Docker API 요청을 수신하며 도커 오브젝트 관리 및 실행
    • 컨테이너 라이프 사이클(생성, 시작, 중지, 삭제 등)의 작업 수행
    • 컨테이너 이미지 관리
    • 외부 이미지 다운로드 및 빌드하는 작업 수행
    • 네트워크
    • 볼륨 등
  • 또한 다른 데몬과 통신하며 도커 서비스들을 관리하기도 합니다.
  • 도커 데몬은 실질적으로 도커 호스트에서 이미지를 만들고 이미지를 통해 컨테이너를 만드는 작업을 해줍니다.

도커 오브젝트(docker object)

  • 도커 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 등
도커 이미지(docker image)
  • 도커 컨테이너 생성을 위한 읽기 전용(read-only) 템플릿
도커 컨테이너(docker container)
  • 도커 이미지 기반으로 생성된 도커 이미지의 실행 가능한 인스터스(runnable instance of an image)
  • 앱 실행을 위한 모든 파일과 설정 정보를 포함하는 패키지

도커 클라이언트(docker client)

  • 도커 데몬 제어를 위해 도커에서 클라이언트 CLI를 제공
  • 사용자가 도커 데몬과 상호작용(interaction)을 하기 위한 주요 방법
  • 사용자가 docker 명령어를 사용하면 이 명령어를 docker deamon으로 보내서 실행
  • docker 명령어는 Dokcer API를 사용하며 도커 클라이언트는 하나 이상의 데몬과 통신할 수 있습니다.

레지스트리(docker registries)

  • 도커 이미지를 저장하고 관리하는 장소
  • docker hub
    • 디폴트 레지스트리
    • 누구나 접근 가능한 공개형 저장소
  • docker pull 또는 docker run 명령어 실행 시 설정된 레지스트리로부터 요청한 이미지를 가져옵니다.
  • 예시
    • 도커 허브에서 이미지를 pull 받아 run하는 것은
    • 마치 앱 스토에서 프로그램을 다운로드 받아 실행하는 것과 같습니다.

0개의 댓글