본문 바로가기

좋아하는 것_매직IT/8.docker

0.Docker, 도커(Docker)에 대해서 알아볼께요. ^^

반응형

우선적으로 도커를 알아보기 전에, 가상화의 종류에 대해서 간략하게 알아볼께요..^^

    • 호스트 가상화
      • 아키텍처

      • 호스트가상화는 Base가 되는 Host OS위에 Guest OS가 구동되는 방식
      • 종류
        • VM Workstation, VMware Server, VMware Player, MS Virtual Sever, Virtual PC, Virtual Box, Paralles Workstation 등이 존재함.
      • 장단점 정리
        • 장점
          • 가상의 하드웨어를 emulating 하기 때문에 Host OS에 크게 제약사항이 없음.
        • 단점
          •  OS위에 OS가 존재하는 방식이기 때문에 오버헤드가 클 수도 있음.
    • 하이퍼 바이저 가상화
      • 아키텍처

      • 하나 이상의 독립적인 머신이 중개 레이어(intermediation)을 통해 물리적 하드웨어에서 가상으로 동작
        • 즉, 하이퍼 바이저 가상화는 Host OS없이 하드웨어에 하이퍼바이저를 설치하여 사용하는 방식이라고 보면됨.
      • 종류
        • Xen, MS hyper-V, citrix, KVM 등이 존재함.
      • 장단점 정리
        • 장점
          • 별도의 Host OS가 없기 때문에 오버헤드가 적고, 하드웨어를 직접 제어하기 때문에 효율적으로 리소스를 사용할 수 있음
        • 단점
          • 자체적으로 머신에 대한 관리 기능이 없기 때문에 관리를 위한 컴퓨터나 콘솔이 필요함
      • 그리고, 하이퍼 바이저 가상화 아래와 같이 분류됨.
        • 전가상화(Full-Virtualization or Hardware Virtual Machine)
          • 하드웨어를 완전히 가상화 하는 방식으로 Hardware Virtual Machine 이라고도 불림.
        • 반가상화(Para-Virtualization)
          • 반가상화는 전가상화와 달리 하드웨어를 완전히 가상화 하지 않음.
          • 전가상화의 가장큰 단점인 성능저하의 문제를 해결하기 위해 하이퍼콜(Hyper Call)이라는 인터페이스를 통해 하이퍼바이저에게 직접 요청을 날릴 수 있음.
            • 다시말해서, 가상화된 각 OS들이 각각 다른 번역기를 갖고 있는 것.
            • 그 번역기는 각각 다른 OS에서 내리는 각각 다른 명령어를 “더해라”라고 번역해주게 되는 것과 같음.
    • 컨테이너 가상화
      • 아키텍처

    • 운영체제의 커널 위에 존재하는 사용자 공간(user space)에서 동작
    • 여러개의 독립된 사용자 공간(user space) 인스턴스를 하나의 호스트에서 사용 가능.
    • 도커는 그룹이나 네임스페이스를 제어하는 등의 현대 리눅스 커널의 기능을 갖고 있음.
      • 즉, 컨테이너가 하나의 호스트에서 여러 컨테이너들이 동시에 존재할 수 있도록 해주는 리소스 관리 기능 뿐만 아니라 독립적인 자신만의 네트워크나 스토리지 스택과 같은 강력한 고립 기능을 갖는다는 것 의미함.
    • 장점
      • 오버헤드가 적어 가볍고 빠른 장점이 있음
  • 참고페이지

도커(Docker) 란 무엇일까요?

  • 컨테이너 안에 있는 애플리케이션 배포를 자동화하는 오픈 소스 엔진.
  • 참고페이지
  • Docker, Inc 팀(이전에는 dotCloud Inc 였고, Platform-as-a-Service(PAAS) 개발 업체 중 하나였음)이 개발함.
  • 라이센스
    • 아파치 2.0 라이선스로 릴리즈 함.
  • 도커는 쿠버네티스와 관련된 여러기능을 제공함.
  • 도커의 아키텍처

그럼, 도커의 특징은?

  • 가상화된 컨테이너 실행 환경 위에 애플리케이션 배포 엔진을 추가함.
  • 경량화 및 빠른 환경을 제공하도록 설계됨.
  • 도커와 호환 되는 리눅스 커널과 도커 바이너리 정도만 실행될 수 있는 최소 사양의 호스트에서도 도커를 사용 가능.
  • 실제 상황을 모델링하기 위한 쉽고 경량화된 방법
    • 도커는 복사-쓰기(copy on write) 모델이어서 애플리케이션이 수정되어도 빠르게 대응할 수 있음.
    • 수정된 부분만 변경 해 적용 가능
  • 의무(duty)의 논리적 분리
    • 개발자는 컨테이너 내부에서 동작하는 애플리케이션에 집중하면 됨.
    • 오퍼레이션은 컨테이너를 관리하는 데 집중하면 됨.
    • 개발자가 코드를 작성할때의 환경과 개발한 애플리케이션이 배포되어 실행되는 환경을 보장. 일관성을 향상시키도록 설계됨.
  • 빠르고 효율적인 개발 라이프 사이클
    • 도커를 사용하는 목적
      • 개발 라이프 사이클에 걸리는 시간을 줄이는데 목적.
        • 개발 라이프 사이클이란?
          •  코드 작성, 테스트, 배포, 사용하는 것을 말함.

도커 컴포넌트에 대해서 알아볼께요.

  • 도커를 구성하고 있는 코어 컴포넌트
    • 도커 클라이언트 와 서버
      • 도커는 클라이언트/서버 애플리케이션.
      • 도커 클라이언트는 도커 서버 혹은 데몬과 통신하여 교대로 작업함.
      • 바이너리로 제공되는 커맨드 라인 클라이언트 바이너리인 docker 와 소스 코드 내에서 도커를 사용할 수 있는 API(http://docs.docker.com/reference/api/docker_remote_api/) 를 제공
      • 하나의 호스트(머신)에서 도커 데몬과 도커 클라이언트를 실행할 수 도 있고 다른 호스트에서 실행 중인 리모트 데몬에 호스트에 있는 로컬 도커 클라이언트를 리모트로 연결할 수 도 있음.
    • 도커 이미지
      • 이미지는 도커 세계의 빌딩 블럭(building block)
      • 이미지에서 컨테이너를 런칭(launch) 함.
      • 이미지는 도커의 라이프 사이클에서 "빌드" 파트에 해당.
      • 명령어들이 단계별로 구축 되어 있음.
        • 파일 추가
        • 명령어 실행
        • 포트 오픈
      • 컨테이너에서 이미지는 소스 코드에 해당함.
        • 컨테이너에서 사용하는 이미지는 호환성이 높으며, 공유, 저장 그리고 업데이트를 할 수 있음.
    • 레지스트리
      • 구축한 이미지를 레지스트리에 저장 함.
      • 레지스트리의 종류
        • public
        • private
      • 도커 허브(Docker Hub)
        • Docker, Inc는 이미지를 위한 public 레지스트리.
        • 계정(account)을 생성하고 도커 허브를 통해 이미지를 공유하거나 저장.
        • 공유이미지
          • 타인이 구축하고 공유한 10000개 이상의 이미지를 포함.
            • Nginx 웹서버, Asterisk 오픈 소스, MySQL 데이터베이스 등등이 존재함.
          • 개인적으로만 사용하고 싶은 이미지도 도커 허브에 저장 가능.
          • private 레지스트리를 사용하면 회사나 조직내부에서 사용할 수 있도록 네트워크 방화벽(firewall)내에서만 액세스할 수 있도록 구성도 가능함.
    • 도커 컨테이너
      • 도커는 개발한 애플리케이션과 서비스를 패키징하여 배포할 수 있도록 컨테이너를 구축하는 데 도움을 줌.
      • 컨테이너에는 이미지에서 런칭되고 하나이상의 동작하는 프로세스를 포함할 수 있음.
      • 컨테이너 특징
        • 이미지 포맷
        • 표준 오퍼레이션의 집합
        • 실행 환경
      • 도커를 사용하면 애플리케이션 서버, 메시지 버스, 유틸리티 어플라이언스, 애플리케이션을 위한 CI 테스트 베드, 서비스, 툴을 빠르게 구축 가능함.
      • 제품이나 개발 목적을 위한 복잡한 애플리케이션 스택을 복제할 수 도 있음.

도커의 사용 용도에 대해서 알아볼까요?

  • 고립된 컨테이너를 사용하게 되면 다양한 목적의 테스트를 위한 훌륭한 샌드박스(sandbox)를 만들 수 있음.
  • 컨테이너 자체가 미리 정의된 "표준"으로 사용하기 때문에 개발하려는 서비스를 위한 훌륭한 빌딩 블록을 만들 수 있음.
  • 도커 실제 사용을 했을때 장점을 요약해보면,
    • 첫째, 로컬에서 개발 할 때 도움이 되며 워크 플로우를 더 빠르고, 더 효율적이며, 더 경량화하도록 구축하는데 도움이 됨.
    • 둘째, 스탠드-얼론(stand-alone) 서비스와 애플리케이션에 대한 실행은 다중 환경에서도 일관성이 유지됨.
    • 셋째, 테스트를 하기위한 독립된 인스턴스를 만들 수 있음.
      • 예를 들어, 젠킨스(Jenkins) CI 와 같은 지속통합(Continuous Integration(CI)) 패키지를 사용하는 경우에 독립된 인스턴스를 만들어 테스트 가능.
      • 프로덕션을 생산 환경으로 배치하기 전에 로컬 호스트에서 복잡한 애플리케이션과 아키텍처를 구축하고 테스트 할 수 있음.

결론

  • 가상화의 종류는 아래와 같이 분류된다.
    • 호스트 가상화
    • 하이퍼바이저 가상화
    • 컨테이너 가상화
  • 도커는 컨테이너 안에 있는 애플리케이션 배포를 자동화하는 오픈 소스 엔진임.
    • 그리고, 컨테이너 가상화를 사용함.
  • 오늘도 도커에 대한 전반적인 개념에 대한 마술(?) 한가지 획득완료! 감사합니다. ^^
728x90
300x250