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개)
- 글로벌모드 : 모든 노드에 컨테이너를 하나씩 올리는 방법