도커
인프런 - 초보를 위한 도커 안내서 수강 중
도커란?
도커란 컨테이너 기반의 가상화 플랫폼으로 이미지를 실행시켜 컨테이너로 생성, 관리가 가능하다
- 다른 라이브러리와의 충돌 방지
- 격리된 환경 적용 가능
- 어떤 환경이라도 동일한 조건에서 실행이 가능
- 일관된 결과 보장
이전 방식
- 문서 매뉴얼
- 상태 관리 도구
- 어렵고 서버에 다른 버전의 프로그램을 여러개 설치할 시 문제 발생
- ex) Puppet, Chef
- 가상 머신
- 한 서버에 여러개 설치하기 쉬움
- 용량이 커서 이미지 공유가 어렵고 느림
- 리눅스 기능을 이용한 자원 격리
- 파일, 디렉토리를 가상으로 분리
- CPU, 메모리, I/O 그룹별로 제한
- 기술을 적용하기 어려움
도커 등장
- 컨테이너: 격리된 환경에서 작동하는 프로세스
- 리눅스 커널 여러 기술 활용
- 가상머신 기술보다 가벼움
- 이미지 단위로 프로세스 실행 환경 구성
도커 특징
- VM에 Hypervisor와 Guest OS 부분이 속도 저하의 원인
- 도커는 가상머신이 아니라 격리만 해주는 역할
확장성/이식성
- 도커만 설치되어 있다면 어디서든 컨테이너 실행 가능
- 오픈소스이기 때문에 특정 회사/서비스에 종속적이지 않음
- 생성이 간편
표준성
- 도커를 사용하지 않으면 서비스별로 배포 방식이 제각각 다름
- 컨테이너라는 표준으로 서버 배포
이미지
- Dockerfile이라는 script를 이용하여 이미지에서 컨테이너 생성
- 빌드 서버에서 이미지를 만들면 이미지 저장소에 저장하고 필요시 운영서버에서 불러옴
설정관리
- 환경변수로 제어
- 컨테이너를 띄울때 환경변수 같이 지정
MYSQL_PASS=password
- 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야 함
자원관리
- 컨테이너 삭제 후 새로 만들면 모든 데이터 초기화
- 별도 저장소 필요
ex)외부 스토리지, AWS - S3 - 세션이나 캐시를 외부로 분리
ex) memcached, redis
강점
- 클라우드 이미지보다 관리하기 쉬움
- 가상머신처럼 사용하지만 성능저하가 거의 없음
- 간단함
- Git으로 이미지 빌드 기록을 남길 수 있음
- 코드, 설정으로 관리
컨테이너
스케줄링
컨테이너를 적당한 서버에 배포해 주는 작업을 의미한다.
- 여러 대 서버 중 할일 없는 서버나 순서대로 또는 랜덤하게 배포
- 컨테이너 개수를 여러 개로 늘려 서버가 죽었을 때 실행중이던 컨테이너를 다른 서버에 띄워 주는 것 가능
클러스터링
- 여러 개의 서버를 한 곳에서 관리 가능
- 가상 네트워크를 이용하여 분산되어 있는 컨테이너들을 같은 서버에 있는 것처럼 쉽게 통신 가능
서비스 디스커버리
- 클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없기 때문에 서비스를 찾아주는 기능이 필요
[참조] 인프런 - 초보를 위한 도커 안내서
끝!