도커(Docker)?
도커(Docker)란 리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램.
- Go언어로 작성된 Linux 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼
- 애플리케이션 실행 환경을 코드로 작성할 수 있고, 하나의 Host OS를 공유해 사용할 수 있다.
그러면 Container란?
- Linux 기반의 기술 중 하나로 필요한 라이브러리와 애플리케이션을 모아 별도의 서버처럼 구성한 것
- 네트워크 설정, 환경 변수 등의 시스템 자원을 독립적으로 소유하고 있다!
VM Virtual Machines
- Hypervisor 라는 것을 통해 컴퓨터가 가지고 있는 리소스들에 대해 VM별로 배분하고 각 VM이 독립적인 os를 갖고 동작한다
- 확장성 낮음
- 독립적인 플랫폼을 하나 증가시킬 때마다 OS를 계속 만들어야 한다.
- 메모리나 자원이 유동적으로 관리되는 것이 아닌 처음부터 정해놓고 실행하기 때문에 비효율적이다.
Containers
- 하나의 Host OS위에서 각각의 독립적인 프로그램처럼 관리되고 실행된다
- 확장성, 속도 높음
- 불필요한 os 만드는 작업이나 인프라를 독립적으로 나눌 필요 없이 실행할 수 있다.
- VM 보다 비교적 빠르게 세팅할 수 있고 VM과 비교해 크기가 작기 때문에 메모리를 덜 소모한다.
컨테이너를 쓰냐 안쓰냐의 차이?
: 컨테이너를 관리하는 프로그램만 있으면, 소스코드만으로도 동일한 프로그램 실행 가능하다.
Docker 아키텍쳐
Docker Daemon
- Docker API 요청 수신, Image, Container, 네트워크와 같은 Docker 객체 및 Docker 서비스를 관리한다.
Docker Client
- Docker 사용자가 Docker와 상호작용하기 위한 방법으로 기본적인 Docker 명령어를 통해 Docker Daemon과 통신한다
docker run
과 같은 명령어를 이용해 Docker를 실행할 수 있다.Docker Registry
- Docker 이미지 저장한다
- Docker Hub이라는 공용 Registry와 개인 private한 Registry에서 Docker이미지를 관리한다.
- 일반적으로는 Docker Hub이라는 공용 Registry에서 실행한다.
Docker Image
- 이미지 = 실행파일
- 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 Immutable(불변적)하다.
- 이미지는 Docker Hub에 저장되고, 그곳에서 다운받아 사용할 수 있다.