도커란 무엇인가(AI server setting 기반지식1)
도커
- 기본 개념 : 리눅스의 응용프로그램을 ‘프로세스 격리 기술’들을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트
기존의 가상화
전가상화
- 주로 OS를 가상화 하는 방식
- 호스트OS 위에 게스트OS 전체를 가상화하여 사용하는 방식 ex) VMware, VirtualBox
- 사용법 비교적 간단 , 무겁고 느림(게스트OS 전체가 )
반가상화
- “CPU 가상화 기술(Hardware-assisted Virtualization Machine)을 이용한 KVM(Kernel_based Virtual Machine)” 과 “반가상화(Paravirtualization) 방식의 XEN이 등장 –> 전체 OS를 가상화 하는 방식보다 성능 향상( OpenStack, AWS, Rackspace 같은 클라우드 서비스에서 가상 컴퓨팅 기술로 사용되었음)
프로세스를 격리(추가적인 OS 설치 x)
- 리눅스 컨테이너라 함, CPU나 메모리도 해당 프로세스가 필요한 만큼만 추가
- 실행 중 컨테이너에 접속하여 명령어 입력 o
apt-get
,yum
으로 패키지 설치 o- 사용자 추가 가능 여러개의 프로세스를 독립적으로 실행
- CPU, 메모리 사용량 제한 o
- 호스트의 특정 포트와 연결 o, 호스트의 특정 디렉토리를 내부 디렉토리처럼 취급 o
이미지
- 개념 : 컨테이너 실행에 필요한 파일과 설정값 (Immutable한 성질)
- 컨테이너는 이미지를 실행한 상태, 추가되거나 변하는 값은 컨테이너에 저장
- 같은 이미지로 여러 개의 컨테이너 생성 가능 (OS 설치 할 때의 그 이미지 파일과 동일한 개념인 듯..?)
- 새로운 서버가 추가되면 미리 만들어 놓은 이미지 파일을 다운 받아 컨테이너를 생성만 하면 됨
- 도커 이미지는 Docker hub, Docker Registry를 직접 만들어 관리 가능 (공개된 도커 이미지를 다운 받아 쓰거나 ,직접 이미지를 만들어 배포할 수도 있음)
레이어 저장방식 을 사용하여 컨테이너 방식의 효과를 극대화
- 도커 이미지 = 컨테이너를 실행하기 위한 모든 정보(용량그 수백MB)
- 기존 이미지에 파일하나 추가한다고 또 다른 도커 이미지를 다운 -> 비효율적
- 레이어 개념의 도입 ex) 우분투 OS 기반 nginx에 대한 이미지 = 필요한 우분투 이미지 + nginx 이미지 이 이미지 기반으로 webapp을 만들었다 가정하면 그에 해당하는 레이어로 구성 될텐데, 만약 webapp의 소스코드를 수정한다면, 수정된 webapp 소스코드에 해당하는 레이어의 이미지만 추가하면 됨
해당 내용을 읽으면서 궁금(단순 사실확인 필요, 사실 확인하면 좀 더 그 원리를 이해하는데 도움이 될 듯)
- 해당 webapp을 만들면 해당 레이어 추가해줘야 하는지, 따로 추가하는 과정이 없는지(아마도 이건 레이어 추가해야 할 것으로 보임)
- webapp의 경우 nginx를 통해 생성된 것이라 특별한 경우인것인지? 만약 아예 다른 프로그램을 추가적으로 탑재시키고 싶다면, 해당 이미지도 단순히 레이어 추가로 해결 될 수 있는지
도커에 대한 개념정도만 잡으려고 한건데 과해짐 아래의 내용은 추후에 더 읽어보며 정리하기로