Docker 알아보기
Docker
는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
Docker는 go 언어
로 작성되었으며 다음과 같은 Linux 커널
의 기능을 활용해 만들어졌습니다.
- namespaces
- cgroups
- Union file systems
docker는 OS를 가상화하는 방식이 아닌 프로세스를 격리하는 방식(Container)을 사용해 가상화보다 더 가볍고 빠릅니다.
가상화 머신(Virtual Machine)
- OS를 설치한 가상머신 이미지를 만들어 배포를 편하게 합니다.
- OS를 설치해야 하기 때문에 무겁고 성능이 좋지 못한 것이 단점입니다.
- 전가상화(Full Virtualization)의 느린 속도를 개선하기 위해 반가상화(Paravirtualization)방식이 개발되었지만 OS를 설치하여 가상화하는 방법은 성능문제가 있습니다.
도커(Docker)
- 반가상화보다 좀 더 경량화된 프로세스를 격리하는 방식입니다.
- OS를 설치하지 않고 프로세스를 격리시키는 방식이기 때문에 가볍고 성능이 빠릅니다.
- OS를 설치하지 않기 때문에 이미지 용량이 크게 줄어들고, 하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상 머신에 비해 월등히 빠릅니다.
Docker engine
docker engine
은 다음 같은 주요 구성 요소가 포함된 클라이언트-서버 애플리케이션
입니다.
- docker daemon
- REST API
- command line interface(CLI)
CLI
는 REST API
를 사용하여 docker daemon
과 상호작용하고 docker daemon
은 이미지, 컨테이너, 네트워크 및 볼륨과 같은 docker 객체를 생성하고 관리합니다.
Docker 아키텍처
Docker는 클라이언트-서버 아키텍처
를 사용합니다.
Docker daemon
Docker 데몬(dockerd)
은 Docker API
요청을 수신하고 이미지
, 컨테이너
, 네트워크
및 볼륨
과 같은 Docker 객체
를 관리합니다.
Docker client
Docker 클라이언트 (docker)
는 사용자가 docker명령
을 사용하여 dockerd
와 통신을 합니다.
예를 들어 docker run
같은 명령을 수행하면 클라이언트가 이 명령을 dockerd에 전송하여 실행합니다.
Docker registry
Docker 레지스트리
는 Docker 이미지를 저장합니다. Docker Hub
는 누구나 사용할 수 있는 공용 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성됩니다.
docker pull
또는 docker run
명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져옵니다.
docker push
명령을 사용하면 이미지가 구성된 레지스트리로 푸시됩니다.
Image
이미지
는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 읽기 전용 템플릿입니다.
이미지 생성에 필요한 명령어 및 설정을 저장하고 있는 Dockerfile
을 사용하여 이미지를 빌드합니다.
Dockerfile의 각 명령어는 이미지 레이어
를 만듭니다.
만약에 Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드하기 때문에 가볍고 빠르게 빌드할 수 있습니다.
Container
컨테이너
는 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 애플리케이션이 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키징 하는 소프트웨어의 표준 단위입니다.
이미지
를 Docker Engine
에서 실행하면 컨테이너
가 됩니다.
Docker API
또는 CLI
를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다.