독립적인 환경을 만들어서 하드웨어를 효율적으로 관리할 수 있게 도와주는 소프트웨어?
- 여기서 말하는 독립적인 환경은 컨테이너라 부릅니다.
각각의 컨테이너는 플랫폼을 가리지 않고 실행이 가능합니다.
- 그렇다면 컨테이너는 가상머신인가? (그렇지 않습니다.)
- 가상머신처럼 독립적으로 실행가능합니다.
- 가상머신보다 빠릅니다.
- 가상머신보다 쉽습니다.
- 가상머신보다 효율적입니다.
- 문서 관리
- 서버를 운영하기 위해서 문서로 서버 운영 방법을 기록 -> 시간이 흘러 문서의 정확성
- 서버 업데이트와 관련된 이력들을 관리하기가 힘들어지는 문제가 있습니다.
- 상태 관리 도구
- 프로그램을 실행할 때 프로그램이 참조하는 설정 파일을 코드로 작성하여 협업도 하고 버전도 관리할 수 있었습니다.
- 단점은 러닝커브가 높고, 한 서버에서 다른 버전 여러개를 설치하는게 어려웠습니다.
- 가상 머신
- 가상 머신은 한 서버에 여러개 설치가 쉽습니다.
- 현재 상태를 저장할 수 있습니다.
- 처음부터 다시 세팅하려면 어떻게 해야할까요?
- 서버 이미지 공유가 어렵습니다. (용량 이슈...)
- 속도가 느립니다.
- 자원 격리
- 프로세스를 가상으로 분리합니다.(기술적 X)
- 파일, 디렉토리도 가상으로 분리합니다.
- CPU, Memory, I/O 그룹별로 제어합니다.
- 리눅스 기능을 이용한 빠르고 효율적인 서버 관리방법입니다.
- 사용 방법이 너무 어렵습니다.
- 구글과 같은 대형 기업에서만 사용 가능해보입니다.
2013년에 DotCloud에서 첫 공개했습니다.
- 컨테이너 격리된 환경에서 작동하는 프로세스
- 리눅스 커널의 여러기술을 활용합니다.
- 하드웨어 가상화 기술보다 가볍습니다.
- 이미지 단위로 프로세스 실행환경을 구성합니다.
-
확장성/이식성
- 도커가 설치되어 있다면 어디서든 �컨테이너를 실행할 수 있습니다.
- 서비스에 종속적이지 않습니다.
- 쉽게 개발자가 만들 수 있습니다.
-
표준성
- 언어마다 서비스들의 배포 방식이 제각각 다릅니다.
- 컨테이너라는 표준으로 서버를 배포하므로 동일한 운영이 가능합니다.
-
이미지
- 이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요
- Dockerfile 이미지를 만들고 처음부터 재현이 가능합니다.
- 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옵니다.
-
설정관리
- 설정은 보통 환경변수로 제어합니다.
- 컨테이너를 띄울때 환경 변수를 같이 지정합니다.
-
자원관리
- 컨테이너는 삭제후 새로 만들면 모든 데이터가 초기화됩니다.
- 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요합니다.
- 세션이나 캐시를 memcached나 redis와 같은 외부로 분리합니다.
- 클라우드 이미지 보다 관리가 쉽습니다.
- 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하가 적습니다.
- 복잡한 기술을 몰라도 사용이 가능합니다.
- 이미지 빌드 기록이 남습니다.
- 코드와 설정으로 관리되기 때문에 재현 및 수정이 가능합니다.
- 오픈소스기 때문에 특정 회사 기술에 종속적이지 않습니다.