도커란?
도커란?
- 컨테이너 기반의 오픈소스 가상화 플랫폼 임
- 컨테이너가 도커를 의미하는것은 아님
- 컨테이너: 가상화 기술의 하나로써 다양한 환경에서 일관된 동작을 보장하도록 만들어짐
- 가상머신은 운영 체제 전체를 포함해 무겁고 부팅 시간이 길어짐
- 컨테이너는 커널만 공유하고 프로세스를 격리 하는것이기에 가볍고 빠르게 시작이 가능
- 프로세스 격리, 파일 시스템 격리, 리소스 격리 & 제한, 이미지 기반 배포 등의 특징
- 도커는 그럼 가상머신인가?
- 운영 체제 수준의 가상화를 제공하는것 이고 실제론 커널위의 도커엔진에서 구동되는것 이기에
가상머신이라고 볼순 없음
- 도커를 사용해 리눅스 컨테이너를 Window나 Mac에서 실행하려면 리눅스 커널 이 필요한데
이는 도커 데스크톱에서 내부적으로 하이퍼 바이저를 사용해 가상 머신을 생성하고
이 가상 머신 위에서 도커 엔진을 실행하는 방식으로 컨테이너가 구동됨
- 즉 도커와 도커 데스크톱은 같은 개념이 아님
도커 엔진만 필요하다면 윈도우 기준으로 WSL2를 설치해 CLI로 구동해야함
- 하이퍼 바이저
- 가상 머신을 생성하고 관리하는 역활을 함
- 물리적 머신에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어
등장 배경
- 서버 마다 환경이 다른데 이를 일일이 구성하기엔 많은 리소스가 들고 복잡함
- 컨테이너는 기존부터 존재했지만 이를 편리하게 사용할수 있게 한것이 도커
- 서버에 동일한 환경으로 배포가 용이해짐 → 이미지로 추상화가 가능해짐 → 다른 환경에서도 유연한 대처 가능
- 배포 방법
- 과거
- 서버 배포 메뉴얼(PPT, 워드) 문서를 제작한다
- 환경마다 다른점들이 존재해 오류가 나거나 업데이트가 안되는 문제가 생길수도 있다.
- 서버 OS까지는 맞추는게 일반적이라 이런 극단적인 예시는 발생하지 않았을것.
- 상태관리 도구를 사용한다(CHEF, puppet labs, ANSIBLE)
- 코드로 작성해두고 서버를 실행하기전 작동시킨다.
- 서버를 대상으로 돌리기에 설정이 날라가거나, 한 서버에 다른 버전을 여러개 설치 하기 어렵다
- 가상머신
- 한 서버에 여러개 설치는 가능하다
- 이미지 공유에 대한 규격이 파편화 되어있어 애매하다
- Hypervisor 위에 OS, OS, OS가 올라가 오버헤드가 발생한다…(느려짐)
장점
- 확장성/이식성
- 도커 엔진만 있다면 어디서든 컨테이너 실행 가능
- OS의 종속 없이 쉽게 구동가능 및 여러 컨테이너로 확장 가능
- 표준성
- 도커를 사용하지 않는다면 각각의 언어별로 만들어진 서비스들의 배포방식은 다를것이다.
- 이때 컨테이너라는 표준으로 서버를 배포하기에 모든 서비스의 배포과정이 동일해진다.
- 이미지
- 이미지에서 컨테이너를 생성하기에 반드시 이미지를 만드는 과정이 필요하다
- Docker File을 이용해 이미지를 만들고 재 빌드시 겹치는 레이어는 캐싱된다
- 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영 서버에서 이미지를
불러온다
- 관리성
- 설정은 보통 컨테이너를 띄울때 환경변수를 지정해 제어한다
- 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들 수있다.
- LOCAL, DEV, PROD
- 환경 변수에 따라 구동되는 설정값이 달라짐
- 컨테이너는 삭제후 새로 만들면 모든 데이터가 초기화 된다.
- 호스트의 저장소에 마운트 하면 데이터가 저장된다.
- 한정된 리소스만 사용하게 제어 할 수 있다(CPU, MEM, HDD)