Docker 란?
리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트.
Docker는 컨테이너를 위한 운영 체제(또는 런타임)이다. 컨테이너를 실행하려는 각 서버에 Docker Engine이 설치되어 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령 세트를 제공한다.
구조
도커는 클라이언트-서버 아키텍처를 사용한다. Docker 클라이언트는 Docker 데몬과 REST API를 사용하여 UNIX 소켓 또는 네트워크 인터페이스를 통해 통신한다. Docker 데몬은 Docker 컨테이너를 빌드, 실행 및 배포하는 무거운 작업을 수행한다.
- 도커 데몬
Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 개체를 관리한다. 다른 데몬과 통신하여 도커 서비스를 관리할 수 있다.
- 도커 클라이언트
사용자가 Docker와 상호 작용하는 기본 방법(커맨드). 사용자가 cmd, powershell 등을 통해 명령어를 입력하면 도커 클라이언트가 REST API로 변환하여 데몬에게 전달한다. 클라이언트는 둘 이상의 데몬과 통신할 수 있다.
- 도커 데스크톱
Mac 또는 Windows 환경에 쉽게 설치할 수 있는 응용프로그램으로, 컨테이너형 응용프로그램과 마이크로 서비스를 구축하고 공유할 수 있다. 도커 데스크톱에는 도커 데몬(dockerd), 도커 클라이언트(docker), 도커 컴포지트, 도커 콘텐츠 트러스트, 쿠버네티스 및 자격 증명 도우미가 포함된다.
- 도커 레지스트리
Docker 이미지를 저장하는 곳. 도커 허브는 누구나 사용할 수 있는 공용 레지스트리이며, 도커는 기본적으로 도커 허브에서 이미지를 검색하도록 구성되어 있다.
구성 요소
도커의 구성요소에는 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 등이 있다.
- Images
Docker 컨테이너를 만드는 지침이 포함된 읽기 전용 템플릿. 응용 프로그램을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정)을 포함하는 가벼운 독립 실행 소프트웨어 패키지를 의미한다.
- Container
컨테이너는 이미지의 실행 가능한 인스턴스. 기본적으로 컨테이너는 다른 컨테이너와 해당 호스트 시스템으로부터 격리되어 있다. 컨테이너는 휘발성이라 도커 볼륨을 사용해야한다.
컨테이너 이미지는 런타임에 컨테이너가 되며 도커 컨테이너의 경우 이미지가 도커 엔진에서 실행될 때 컨테이너가 된다. Linux 및 Windows 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너형 소프트웨어는 인프라에 관계없이 항상 동일하게 실행된다. 컨테이너는 소프트웨어를 환경으로부터 격리하고 개발 및 스테이징 간의 차이에도 불구하고 소프트웨어가 균일하게 작동하도록 보장한다.
도커 컨테이너 특징
- 표준: Docker는 컨테이너에 대한 산업 표준을 만들어 이식성을 높임
- 경량: 컨테이너는 시스템의 OS 시스템 커널을 공유하므로 애플리케이션당 OS가 필요하지 않으므로 서버 효율성을 높이고 서버 및 라이센스 비용을 절감
- 보안: 애플리케이션은 컨테이너에서 더 안전하며 Docker는 업계에서 가장 강력한 기본 격리 기능을 제공
Docker를 사용하면 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보하게 된다. Docker의 간단한 구문을 사용해 완벽하게 제어할 수 있다.
Docker 작동 방식
https://avengersrhydon1121.tistory.com/287
도커는 이미지를 통째로 생성하지 않고, 바뀐 부분만 생성한 뒤 부모 이미지를 계속 참조하는데 이 계층을 레이어라고 부른다. 이미지는 여러개의 읽기 전용 레이어로 구성되고 파일이 추가/수정되면 새로운 레이어가 생성된다. 도커는 여러 개의 layer를 묶어서 하나의 파일 시스템으로 사용할 수 있게 해준다.
조금 더 쉬운설명을 하자면, ubuntu 이미지가 레이어 a,b,c으로 구성되어있고, ubuntu 이미지를 베이스로 만든 nginx 이미지는 ubuntu가 가지고 있는 레이어에 nginx의 레이어가 추가되고, web app 이미지를 nginx 이미지 기반으로 만들었다면 nginx 레이어 위에 source 레이어가 추가된다. web app 이미지를 수정하면, 레이어 a,b,c, nginx 를 제외한 새로운 source(v2) 레이어만 다운 받으면 되기때문에 효율적으로 레이어 관리를 할 수 있다. 이것이 도커허브 및 개인 저장소에서 버전을 관리하는 원리이다.
컨테이너를 생성할때도 레이어 방식을 사용하며, 기존의 이미지 레이어 위에 읽기/쓰기 레이어를 추가한다. 컨테이너가 실행 중일 때 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장이 되기 때문에 여러개의 컨테이너를 생성해도 최소한의 용량만 사용한다.
그리고 이미지는 Url방식으로 관리하며 태그를 붙일 수 있다.
위 그림에서 docker.io/library/는 생략가능하여 바로 ubuntu:14.04 로 사용 할 수 있다.
도커 스웜
도커 컴포즈
참조