Technical Architecture

가상화(2) 도커란?(Docker)

seongduck 2022. 12. 27. 23:11

Hypervisor vs Docker

Docker

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

Hypervisor Docker
  Container안에 OS가 없다!!!
(리눅스 파일시세틈, 쉘은 사용가능.... 오..?)
(통상적으로 Docker 컨테이너 안에는 없다라고 생각!)

 

Docker의 특징

  • 하나의 컨테이너 안에 하나의 서비스만 올리는 것이 일반적이다. 즉, 활용효과를 극대화할 수 있다.
  • 소스 코드 자체를 배포 ㄴㄴ, 이미지를 만들어서 배포 ㅇㅇ
장점 단점
H/W, O/S 환경에 상관 없이 동일한 이미지 배포 가능 모든 컨테이너가 커널을 공유하므로 Host의 영향이 전체에 미침
대규모 서비스 운영 시, H/W, O/S의 차이에 무관하게 동일환 환경이 서비스 배포 가능 VM당 독립된 운영환경을 제공해야 하는 경우 불가
이미지 중앙관리, 배포 용이 네트워크 상황에 따라 실 운영 환경에 적합하지 않을 수 있음
운영체제의 공유로 자원의 효율성 확보, 비용절감 효과  

 

Docker 이미지와 컨테이너

  • Container는 Image로부터 생성됨.
  • Image는 읽기 전용의 패키지로 코드, 런타임, 라이브러리, 환경 변수, 설정 파일들이 들어있음
  • Image를 Docker Registry에서 다운받아 사용
    • 로컬의 이미지로 컨테이너 생성
  • Container는 파일시스템, 격리된 자원 및 네트워크를 사용할 수 있는 독립된 공간, 기존 이미지와도 완전히 분리
  • 같이 이미지에서 생성된 다른 컨테이너와도 독립적

 

Docker 컨테이너 접속

  • 서버 IP의 81번 포트로 접속하면 컨테이너 80번 포트로 접속할 수 있다.

 

Docker 볼륨

  • 컨테이너가 생성될 때, 이미지의 파일을 복제해서 만드는 것이 아니라, 이미지는 그대로 두고, 컨테이너를 사용하다가 발생하는 변경분만 따로 컨테이너 레이어에 저장된다.
  • 컨테이너가 2개 만들어지면 한 이미지 레이어는 공유, 각각 컨테이너 레이어 생성(달라지는 부분)되어 저장
    • 이미지는 쓰기전형이라 절때 바뀔 수 없다.
  • 컨테이너 데이터 보존하기위해 호스트의 파일시스템을 마운팅 가능

호스트의 data의 디렉토리를 컨테이너 밑에 마운트할 수 있다.

 

  • 이미 Host의 볼륨을 사용하는 컨테이너의 볼륨을 다른 컨테이너와 공유할 수 있다.

 

Docker 네트워크

  • Host안의 컨테이너는 가상의 네트워크로 통신한다.
  • 가상의 호스트 NIC를 만드는데 (veth) 컨테이너 NIC(eth0)와 연결한다.
  • veth라는 가상의 NIC이다. docker0로 밖과(eth0)와 통신한다.
  • 알아서 도커가 해주는 부분(커스텀가능)

 

하나의 컨테이너 NIC에 (컨테이너도 있음) 2개의 컨테이너를 붙여서 쓸 수도 있다.

 

하나의 Host Name으로 여러 컨테이너에 로드벨런싱할 수 있다.

(라운드 로빈 방식)

 

Docker 이미지

  • 처음의 이미지(ubuntu)를 통해 컨테이너를 만든다. commit을 하면서 새로운 이미지가 생성
  • nginx를 깔고 이 때 새로운 이미지는 변경된 부분만(레이어 A,B,C 말고)을 새로 저장
  • 명령어로 데이터구조 볼 수 있음.
  • 만들어진 이미지는 도커 Repository에 업로드하여 배포

 

Docker Swarm

  • 동일한 기능의 컨테이너들을 (Workers) 여러 Host로 뿌려서 관리한다.
  • 색깔이 같은 것이 똑같은 기능
  • 모아서 서비스로 한다.
  • 레플리카모드: 이 서비스에 레플리카(Replica)를 정해줄수 있는데 이의 갯수만큼 컨테이너가 존재 (3개)
  • 글로벌모드 :  모든 노드에 컨테이너를 하나씩 올리는 방법