Docker는 개발, Shipping, 어플리케이션 실행을 위한 오픈 플랫폼 입니다.
Docker는 어플리케이션을 환경(Infrastructure)으로 부터 분리하여 빠르게 전달할 수 있습니다.
Docker를 사용하면 배포하고자 하는 어플리케이션의 환경(Infrastructure)을 관리할 수 있습니다.
Shipping, 테스팅, 그리고 신속한 코드 배포를 위한 도커의 방법론의 이점을 취함으로써, 코드 작성과 서비스간에 지연시간을 눈에띄게 줄일 수 있습니다.
Docker 의 정체성 : 플랫폼
Docker 가 지향하고 자랑하는 방향성 :
- 신속한 배포,
- 환경 관리,
- 느슨한 환경 분리 (Loosely Isolated Environment) = Container
Docker Daemon은 Docker API 의 요청(request)을 listen 하고 이미지, 컨테이너, 네트워크, 볼륨과 같은Docker 객체들을 관리합니다.
또한 Docker 서비스를 관리하기위해 통신할 수 있습니다.
대부분의 Docker 사용자들이 주요하게 Docker와 상호작용하는 방법 입니다. docker run 과 같은 커맨드를 사용할 때, 클라이언트가 dockerd 에게 명령어들을 전하고 실행합니다. docker 는 Docker API를 사용합니다. Docker 클라이언트는 한개 이상의 Docker Daemon과 통신할 수 있습니다.
Docker Registeries 는 Docker 이미지들을 저장합니다. Docker Hub는 누구나 사용할 수 있는 공개 레지스트리이고, default로 Docker Hub에서 이미지들을 찾아보도록 설정되어 있습니다.
docker pull 또는 docker run 과 같은 명령어들을 사용할 때, 필요한 이미지들이 설정된 레지스트리에서 받아옵니다.
docker push 명령어를 사용하면, 설정된 레지스트리로 올라가게 됩니다.
Docker를 사용할때 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 그리고 다른 객체들을 생성하고 사용하게 됩니다.
1. Images
이미지는 Docker 컨테이너를 만드는 지시사항이 있는 읽기 전용 템플릿 입니다. 이미지가 다른 이미지를 기반으로 하는경우가 많으며 일부 추가 사용자 지정/설정 이 있습니다. 예를 들어, Ubuntu 이미지를 기반으로 하지만 Apache 웹 서버와 응용 프로그램을 설치하고 응용 프로그램을 실행하는데 필요한 구성 상세 사항을 설치할 수 있습니다.
자신의 이미지를 만들거나 다른 사용자가 만들어 레지스트리에 게시된 이미지만 사용할 수 있습니다. 자신의 이미지를 구축하려면 이미지를 만들고 실행하는데 필요한 단계를 정의하는 구문들 사용하여 Dockerfile 을 작성합니다. Dockerfile 의 각 지시사항은 이미지에 계층(Layer)를 만들게 됩니다. Dockerfile 을 변경하게 되어 이미지를 재구성할 경우 변경된 계층만 재구성 됩니다. 이것은 다른 가상화 기술과 비교하면 매우 가볍고, 작고 빠르게 만드는 요소중 하나입니다.
컨테이너는 docker 만이 가지고 있는 특유의 기술이 아니다.
Linux 운영체제에서 컨테이너란 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다.
커널을 공유하기 때문에 실행 속도가 빠르고, 성능상의 손실이 거의 없는것이 특징이고, 리눅스의 네임 스페이스, 컨트롤 그룹, 루트 디렉토리 격리 등의 커널 기능을 활용해 격리되어 실행되는 것이다.
이러한 격리 기술 덕분에 호스트 머신에게는 프로세스로 인식되지만 컨테이너 관점에서는 마치 독립적인 환경을 가지는 가상 머신처럼 보이게 되는것이다.
Docker 가입 (https://www.docker.com)을 진행하고 자신의 레지스트리를 등록하여야 자신이 만들어 배포하려고 하는 이미지를 pull / push 할 수 있습니다.
회원가입과 plan을 선택하여 진행하시길 바랍니다.
회원가입을 완료 한 후, 레지스트리에 접근하려면 반드시 로그인을 한 상태에서 진행해야 합니다.
# dockerd 로그인 명령어
$ docker login -u <username> --password-stdin
레지스트리는 Public 과 Private 로 만들 수 있으니, 용도에 알맞게 생성하여야 합니다.