Docker란 무엇인가?
- Docker란 애플리케이션을 개발, 제공, 실행하기 위한 개방형 플랫폼이다.
- 소프트웨어를 제공할 때, 하드웨어에 따라 issue가 발생할 수 있는데 Docker를 사용하면 앱을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있게 해준다.
- 즉, Docker를 사용하면 앱을 인프라에서 분리해 소프트웨어를 제공할 수 있다.
Docker 플랫폼
- Docker는 컨테이너라 하는 느슨히 격리된 환경에서 애플리케이션을 패키징하고 실행하는 기능을 제공한다.
- 각각의 컨테이너는 앱을 실행시키기 위해 필요한 모든 정보를 포함하지만 용량이 적은 것이 특징이다.
- 컨테이너 각각은 격리되어 있기 때문에 동시에 여러개의 컨테이너를 사용하는 것도 가능하다.
- 또한 컨테이너는 공유가 가능하기 때문에 작업을 같이하는 모든 사람이 같은 환경 속에서 앱을 실행 시키는 것이 가능하다.
Docker의 장점
- 개발자가 표준화된 로컬 컨테이너에서 작업을 개발 속도를 향상시킬 수 있다.
- 컨테이너는 CI/CD 워크플로우에도 적합하기 때문에 자동화에도 도움이 된다.
- 컨테이너의 이식성이 좋기 때문에 노트북, 서버, 클라우드 플랫폼 등 여러 환경에서 실행이 가능하다
- 하이퍼바이저 기반 가상 머신에 대해 더 빠르고 가볍기 때문에 같은 리소스 하에서 더 많은 앱을 실행시킬 수 있다
Docker 아키텍쳐
![Docker Architecture](https://docs.docker.com/get-started/images/docker-architecture.png)
Docker demon
- Docker API 요청을 수신하고, 이미지, 컨테이너, 네트워크, 볼륨과 같은 Docker 개체를 관리해준다.
- Client와 Rest api를 사용해 통신하거나, Docker 서비스를 관리하기 위해 다른 데몬과 통신할 수도 있다.
Docker client
- 사용자가 docker 서비스에 접근하기 위해 docker client를 사용한다.
- Docker demon에 요청을 보내면 데몬이 이를 수행하게 된다.
Docker registry
- 실제 도커 이미지파일이 저장된 부분을 docker registry라 부른다.
- 로컬에 이미지 파일을 저장할 수도 있고, 기본값으로는 docker hub에서 이미지를 찾게 된다.
- docker pull 또는 docker run 명령어를 사용했을 시 docker는 레지스트리에서 필요한 이미지를 가져오게 된다.
Docker image
- Docker 컨테이너를 생성하기 위한 정보가 포함되어 있는 읽기 전용 템플릿을 docker image라 한다.
- 운영체제 실행을 위한 정보와 애플리케이션을 실행하기 위한 정보가 포함되어 있다.
- 이미 만들어진 image를 가져올 수도 있고, dockerfile 생성을 통해 자신만의 이미지를 생성할 수도 있다.
- Dockerfile의 각 줄은 이미지의 레이어를 형성하고, 파일을 수정해 이미지를 다시 빌드할 때는 변경된 레이어만을 다시 빌드하게 되어 성능상에 이점을 가질 수 있다.
Docker container
- 실제 실행 가능한 이미지 인스턴스를 docker container라 부른다.
- Docker api 또는 cli를 통해 생성, 시작, 중지, 삭제 등의 작업이 가능하며, 컨테이너에 스토리지를 연결하거나, 네트워크에 연결하거나, 현재 상태를 기반으로 한 새로운 이미지를 생성할 수도 있다.
- 컨테이너는 기본적으로 다른 컨테이너나 호스트와 격리되어 있지만, 격리 수준은 제어 가능하다.
출처:
https://docs.docker.com/get-started/overview/