Docker (1)

SaeSimCheon·2021년 8월 16일
0

Docker

목록 보기
1/6

본 글은 초보를 위한 도커 안내서 - 도커란 무엇인가?에 대한 개인적인 요약으로 직접 작성하지 않았습니다.

컨테이너 기반의 오픈소스 가상화 플랫폼

  • 컨테이너(Container)

    프로그램, 실행환경을 컨테이너로 추상화하고
    동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화 시켜줌.

    백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등
    어떤 프로그램도 컨테이너로 추상화 가능.

    격리된 공간에서 프로세스가 동작하는 기술. 가상화 기술의 일종

  • 기존 방식과의 비교

    기존의 가상화 방식은 주로 OS를 가상화
    호스트 OS 위에 게스트 OS 전체를 가상화하여 사용

    문제점 :
    비교방법이 간단하지만 무겁고 느림

    대안 :
    CPU 가상화 기술(HVM) -> Kernel-based Virtual Machine
    반가상화 방식의 Xen

    게스트 OS가 요구 되지만 전체 OS가 가상화 되는 것은 아니여서 호스트형 가상화 방식에 비해 성능 향상

    문제점 :
    추가적인 OS를 설치하여 가상화하는 방법은
    여전히 성능문제 존재

    대안 :
    프로세스를 격리하는 방식의 등장

  • 리눅스 컨테이너

    추가적인 OS를 사용하는 가상화는 성능저하를 일으키기 때문에 프로세스를 격리하는 방식의 등장

    리눅스에서는 이 방식을 리눅스 컨테이너라고 하고
    프로세스를 격리시켜 빠르게 동작.

    실행중인 컨테이너에 접속하여 명령어 입력, 사용자 추가, 여러개의 프로세스 백그라운드 실행 가능.

    하드웨어 사용 제한, 호스트와의 포트 연결로 디렉토리 연결 가능

  • 이미지

    컨테이너 개념은 도커 이전에도 존재 했고, 프로세스 격리를 하는 여러 방법들이 있었음.

    컨테이너와 함께 도커의 핵심을 이루는 것은 이미지 개념

    컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않음.
    (immutable).

    컨테이너는 이미지를 실행한 상태
    추가되거나 변하는 값은 컨테이너에 저장.

    같은 이미지에서 여러 개의 컨테이너 생성 가능하고
    컨테이너의 상태가 바뀌거나 컨테이너가 삭제돼도 이미지는 그대로

    특정 이미지는 실행에 필요한 모든 파일과 명령 정보를 가지고 있기 때문에 이것저것 설치할 필요 없음.

    새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하면 됨.

    한 서버에 여러 컨테이너를 구동할 수 있고
    더 많은 서버에서도 쉽게 구동 가능함.

  • 왜 이렇게 핫한가?

    컨테이너, 오버레이 네트워크, 유니온 파일 시스템 등 이미 존재하는 기술을 잘 조합

    • 레이어 저장 방식
      경우에 따라 도커 이미지는 용량이 매우 큼.

      문제 :
      맨 처음 다운 받을때에는 문제가 되지 않을 수 있으나,
      기존 이미지가 수정 되었을 때 아예 다시 다운 받는다면 매우 비효울적

      대안 :
      레이어(Layer)라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용하게 해줌.

      이미지1 = :Layer A + Layer B +Layer C(read only)라면

      이를 바탕으로 새로운 이미지2를 만들때

      이미지2 = :Layer A + Layer B +Layer C + Layer D(read only)

      컨테이너 실행 <-이미지

      컨테이너를 생성할때도 레이어 방식 사용 / 기존의 이미지 레이어 위에 읽기 / 쓰기 레이어 추가. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기 쓰기 레이어에 저장
      -> 용량 최소화

      ; 이미지 용량이 크고 여러대의 서버에 배포하는 점을 감안

    • 이미지 경로
      이미지는 url 방식으로 관리하며 태그 붙이기 가능

    • Dockerfile

      도커는 이미지를 만들기 위해 Dockerfile이라는 파일 자체 Domain speccific language 언어를 사용하여 이미지 생성과정 적음.
      소스와 함께 버전관리 되고 누구나 이미지 생성과정을 보고 수정할 수 있음.

    • Docker Hub

      큰 용량의 이미지를 서버에 저장하고 관리 어려움
      공개이미지 무료 관리

    • Command와 API
      Docker stacks -> 여러개의 컨테이너 한 번에 관리
      system 커맨드 추가
      Secrets Management 비밀번호 관리 기능

    • 훌륭한 생태계

    • 커뮤니티 지원

0개의 댓글