- Linux 기반의 기술 중 하나로 필요한 라이브러리와 애플리케이션을 모아 별도의 서버처럼 구성한 것 - 네트워크 설정, 환경 변수 등의 시스템 자원을 독립적으로 소유하고 있다.
hypervisor
- 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼 - 하나 이상의 가상머신(virtual machine manager[VMM])을 실행하는 컴퓨터가 호스트(Host)가 되고 각 가상머신들은 게스트(Guest)가 된다.
VM 가상화 플랫폼(Virtual Machines)
Hypervisor라는 것을 통해 컴퓨터가 가지고 있는 리소스들에 대해 VM 별로 배분하고, 각 VM이 독립적인 OS를 갖고 동작
확장성 낮음 : 독립적인 플랫폼을 하나 증가시킬 때마다 OS를 계속 만들어야 한다.
메모리나 자원이 유동적으로 관리되는 것이 아닌 처음부터 정해놓고 실행하기 때문에 비효율적
Containers
하나의 Host OS 위에서 각각의 독립적인 프로그램처럼 관리되고 실행된다.
확장성 높고, 속도 높음 : 불필요한 OS 만드는 작업이나 인프라를 독립적으로 나눌 필요 없이 실행할 수 있다.
VM 보다 비교적 빠르게 세팅할 수 있고 VM과 비교해 크기가 작기 때문에 메모리를 덜 소모한다.
OS를 설치할 필요 없이 애플리케이션(파일)이랑 라이브러리만 있으면 됨
Docker
- Go 언어로 작성된 Linux 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼 - 애플리케이션 실행 환경을 코드로 작성할 수 있고, 하나의 Host OS를 공유해 사용할 수 있다. - Container를 관리 하는 것 => Docker
Docker Daemon
docker 컨테이너 관리자
Docker API 요청 수신, Image, Container, 네트워크와 같은 Docker 객체 및 Docker 서비스를 관리
Docker Client
Docker 사용자가 Docker와 상호작용하기 위한 방법으로 Docker 명령어를 통해 Docker Daemon과 통신
docker run과 같은 명령어를 이용해 Docker를 실행할 수 있다.
docker pulldocker daemon이 pull이라는 명령어를 받아 Registry에서 Images(설정 파일)을 받는다.
Docker Registry
Docker 이미지 저장
Docker Hub이라는 공용 Registry와 개인 private한 Registry에서 Docker 이미지를 관리
일반적으로 Docker Hub이라는 공용 Registry에서 실행
Docker Image
이미지 = 실행파일
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것 ⇒ Immutable(불변적)
#임의의 이름으로 컨테이너 생성
docker run 이미지이름
#컨테이너를 생성할 때, 이름을 지정해 생성
docker run —name 컨테이너이름 이미지 이름
#컨테이너 실행
docker start 컨테이너이름(or 컨테이너 ID)
#컨테이너 중지
docker stop 컨테이너이름(or 컨테이너 ID)
#docker 이미지 삭제 명령어
docker rmi 이미지이름
#docker 컨테이너 삭제 명령어
docker rm 컨테이너이름(컨테이너 ID)
#현재 있는 모든 이미지 출력
docker images
#현재 실행되고 있는 모든 컨테이너 출력 / 모든 컨테이너 출력
docker ps / docker ps -a