도커란?
컨테이너 기반 가상화 도구
가상화?
등장배경
서버의 성능을 나눠서 사용하고 싶어서
서버 가상화
하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처
하이퍼바이저
- 서버 가상화 기술을 구현할 수 있게하는 소프트웨어
- 가상 머신이라는 단위로 구별
- 각 가상머신에는 여러 운영체제가 설치
- 하이퍼바이저에 의해 생성되고 관리되는 운영체제를 게스트 운영체제라 부름
하이퍼바이저는 OS들에게 자원을 나누어주며 조율
OS들의 커널을 번역해서 하드웨어에 전달
단점
가상화 작업은 하이퍼바이저를 반드시 거쳐야 함 → 이미지 거대화, 무거워짐
컨테이너 기반 가상화
- 프로세스 단위의 격리 환경
- chroot, 네임스페이스, cgroup을 사용함
- 이미지의 용량이 줄어듬
- 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재
- 성능 손실 거의 없음
컨테이너?
이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경
- 프로세스의 생명 주기를 관리
why?
- Host와의 격리를 통해 독립된 개발 환경을 보장
- 프로세스를 컨테이너 단위로 사용
- 프로세스의 관리, 확장에 용이
Docker Engine
유저가 컨테이너를 쉽게 사용할 수 있게 하는 주체
- 컨테이너 관리
- 이미지 관리
- 볼륨 관리
- 네트워크 관리
클러스터
각기 다른 서버들을 하나로 묶어 하나의 시스템 같이 동작하게 하는 것
도커 스웜 - 스웜 모드
MSA의 컨테이너를 다루기 위한 클러스터링 기능에 초점
- 필요에 따라 유동적으로 컨테이너 수를 조절(개발자가 직접)
- 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원
구조
- 매니저 노드 - 워커노드를 관리하기 위한 도커 서버, 워커 노드의 역할도 포함, 다중화하면 좋음
- 워커 노드 - 실제로 컨테이너가 생성되고 관리되는 도커 서버
클러스터 구축
클러스터에 서비스 시작 가능
서비스
도커 스웜의 제어 단위 서비스는 같은 이미지에서 생성된 컨테이너의 집합
스웜 모드
- 클러스터 관리
- 서비스 관리
- 네트워크 관리
- 노드 관리
why?
서비스 확장/관리를 편하게 하기 위함
도커 컴포즈
여러개의 컨테이너를 하나의 서비스로 정의 스웜 모드와 비슷
- 도커 엔진 밖에 위치
플로우
- docker compose + compose.yml 파일 작성
- compose up
- 컨테이너 생성
구조
- 프로젝트 - yml이 위치하는 폴더, 직접 지정 가능
- 서비스
- 컨테이너
- 컨테이너
- 서비스
- 컨테이너
- 서비스
why?
컨테이너의 생성을 편리하게 하기 위해