Docker란?
- Docker는 애플리케이션을 개발, 제공 및 실행하기 위한 개방형 플랫폼
- Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있음
Docker 플랫폼
Docker는 컨테이너라고 하는 느슨하게 격리된 환경에서 애플리케이션을 패키징하고 실행하는 기능을 제공
Docker는 컨테이너의 수명주기를 관리하기 위한 도구와 플랫폼을 제공
Docker의 사용 용도
- 빠르고 일관된 애플리케이션 제공
- 반응형 배포 및 확장
- 동일한 하드웨어에서 더 많은 워크로드 실행
- 하이퍼바이저 기반 가상 머신에 대한 실행 가능하고 비용 효율적인 대안을 제공하므로 더 많은 서버 용량을 사용하여 비즈니스 목표를 달성할 수 있음
Docker 아키텍처
- Docker는 클라이언트-서버 아키텍처를 사용
- Docker 클라이언트는 Docker 컨테이너를 구축, 실행 및 배포하는 무거운 작업을 수행하는 Docker 데몬과 통신
- Docker 클라이언트와 데몬은 동일한 시스템에서 실행될 수도 있고 Docker 클라이언트를 원격 Docker 데몬에 연결할 수도 있음
- Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신
Docker 데몬
- Docker 데몬(dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리함
- 데몬은 Docker 서비스를 관리하기 위해 다른 데몬과 통신할 수도 있음
Docker 클라이언트
- Docker 클라이언트(
docker
)는 많은 Docker 사용자가 Docker와 상호 작용하는 기본 방법
docker run
와 같은 명령을 사용하면 클라이언트는 이러한 명령을 dockerd
에 보내고, 이를 수행
- 이
docker
명령은 Docker API를 사용
- Docker 클라이언트는 둘 이상의 데몬과 통신할 수 있음
Docker 데스크탑
- Docker Desktop은 컨테이너화된 애플리케이션과 마이크로서비스를 구축하고 공유할 수 있는 Mac, Windows 또는 Linux 환경을 위한 설치가 쉬운 애플리케이션임
Docker 레지스트리
- Docker 레지스트리는 Docker 이미지를 저장
- Docker Hub는 누구나 사용할 수 있는 공개 레지스트리이며, Docker는 기본적으로 Docker Hub에서 이미지를 찾음
docker pull
또는 docker run
명령을 사용하면 Docker는 구성된 레지스트리에서 필요한 이미지를 가져옴
docker push
명령 을 사용하면 Docker는 이미지를 구성된 레지스트리에 푸시
Docker 객체
- Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 생성하고 사용하게 됨
Docker image
- Docker image는 파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, Docker 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 템플릿
- 도커 이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일
- 이미지는 읽기 전용이므로 스냅샷이라고도 하며, 특정 시점의 애플리케이션과 가상 환경을 나타냄
- 이러한 일관성은 도커의 큰 특징 중 하나로 개발자가 안정적이고 균일한 조건에서 소프트웨어를 테스트하고 실험할 수 있도록 함
- 이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없음
- 컨테이너를 생성하면 쓰기 가능한 레이어가 immutable image(불변 이미지) 위에 추가됨
- 컨테이너를 생성하는 이미지 베이스는 별도로 존재하며 변경할 수 없음
- 컨테이너 환경을 실행할 때는 기본적으로 컨테이너 내부에 해당 파일 시스템(도커 이미지)의 읽기-쓰기 복사본을 만듦
- 이렇게 하면 이미지 전체 복사본을 수정할 수 있는 컨테이너 레이어가 추가됨
Docker container
- 컨테이너는 실행 가능한 이미지 인스턴스
- Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있음
- 중요 기능
- 컨테이너 내부에서 실행되는 컴퓨팅 환경의 표준화 (standardization of the computing environment running inside the container.)
- 응용 프로그램이 동일한 환경에서 작동하도록 할 뿐 아니라 다른 사람과의 공유도 단순화
- 컨테이너는 자율적(autonomous)이기 때문에 strong isolation을 제공하며 서로 방해하지 않음
- 하드웨어 수준에서 가상화가 이루어지는 VM과 달리 컨테이너는 애플리케이션 계층에서 가상화됨
- 하나의 머신을 활용하고 커널을 공유하며 분리된 프로세스를 실행하기 위한 운영 체제를 가상화할 수 있음
- 따라서 컨테이너가 매우 가벼워져 리소스를 많이 사용하지 않을 수 있음
Docker image VS Docker container
- 컨테이너가 존재하려면 이미지를 실행해야 하는 반면, 이미지는 컨테이너 없이 존재할 수 있음
- 따라서 컨테이너는 이미지에 종속되어 런타임 환경을 구성하고 애플리케이션을 실행하는 데 사용됨
- 도커 이미지는 도커 컨테이너에서 코드를 실행한다. 실행 중인 컨테이너를 만들려면 도커 이미지에 핵심 기능의 쓰기 가능 계층을 추가함(Writable container)
- 도커 컨테이너는 실행 중인 이미지 인스턴스로 간주한다. 각각의 고유한 데이터와 상태를 가진 동일한 이미지에서 여러 개의 컨테이너를 만들 수 있음
- 컨테이너 채택의 주요 이점은 개발, 운영 및 테스트의 표준화 및 단순화임
참고