도커(Docker)
컨테이너 기반의 오픈소스 가상화 플랫폼
Hypervisor: host 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 플랫폼
(예 VMWare, VirtualBox)
→ 하지만 hypervisor는 성능문제가 있엇고,
이를 개선하기 위해 프로세스를 격리하는 방식인 컨테이너 등장
•
컨테이너: 하나의 Application 프로세스. 컨테이너는 가상머신이 아니라 도커 엔진 위에서 동작한다. 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.
별도의 Guest OS가 사용되지 않아 성능이 많이 개선되고 메모리 용량도 적게 차지한다.
•
이미지: 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것 (안 변함 =immutable).
컨테이너는 이미지를 실행한 상태이고 추가되거나 변하는 값은 컨테이너에 저장된다.
이미지는 여러 개의 layer로 된 binary 파일들로 구성되어 있고, 읽기 전용으로 사용된다.
저장소이름/이미지이름:태그 형태로 구성된다.
•
도커 데몬 : API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 도커 객체를 관리하는 백그라운드 프로세스이다. dockerd 로도 많이 불린다.
•
도커 호스트 : 현재 도커 데몬이 동작되고 있는 리눅스 커널이 있는 시스템
•
도커 레지스토리 : 도커의 이미지들을 저장하는 저장소이다. 사내(개인)에서만 공유하는 저장소인 Private 레지스트리가 있고 누구나 사용할 수 있는 공용 레지스트리인 Docker Hub가 있다.
◦
Docker Hub: 도커 이미지를 등록하거나 배포할 수 있는 곳.
docker run [이미지이름] 명령어를 입력했을 때, 만약 로컬 서버에 해당 이미지가 없으면 도커 허브(Docker Hub)에서 자동으로 다운로드 받는다.
•
도커 볼륨 : Host에서의 파일시스템과 도커 컨테이너의 파일시스템을 연결해(디렉토리를 공유) 중요한 데이터를 저장하는 곳. 볼륨은 서로 다른 컨테이너끼리도 공유할 수 있다.
-v {Host의 공유디렉토리}:{컨테이너의 공유 디렉토리}
•
도커 소켓 (Docker Socket) : 도커데몬과 통신하기 위해 사용되는 Docker API의 진입점이다. 기본적으로 Docker CLI에 의해 도커 커맨드를 실행하기 위해 사용된다.
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied
sudo chmod 777 /var/run/docker.sock 명령어를 입력하면 된다.
도커 소켓 파일은 /var/run/docker.sock 에 위치한다.
이제 도커 데몬과 도커 클라이언트가 소통이 가능해진다.