- 개발과 배포 환경을 일치시킨다.
- OS에 상관없이 즉시 애플리케이션 실행 환경을 구성할 수 있다.
- 프로그램 간의 의존성 문제를 없애준다.
- 높은 확장성을 제공한다.
- 각 서버에 새로운 리소스를 배포하기 쉽게 만들어준다.
컨테이너 기술은 애플리케이션을 컨테이너 내에 구성하며, 각 컨테이너는 실행 환경이 격리되어 있다.
Docker는 개발/배포 단계에서 발생하는 환경변수, 버전 불일치 등의 문제를
통일된 방식으로, 간편하게 처리할 수 있게 해준다.
Docker를 사용하면 OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있으며,
개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있다.
또한, AWS ECS 서비스를 이용하면 애플리케이션을 Docker 컨테이너째로 배포할 수 있게 해준다
이미지 : https://www.whizlabs.com/blog/docker-fundamentals/
프로세스
특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있으며, 다른 컨테이너의 프로세스에게 영향을 줄 수 없다.
네트워크
기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있다.
파일 시스템
컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있으며, 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있다.
이미지(IMAGE)
란, 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 실행되는 모든 컨테이너는 이미지로부터 생성된다.
하나의 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있기 때문에, 이를 이용해 애플리케이션의 수평 확장이 가능해진다.
이미지는 Dockerfile을 생성 + build해서 만들 수도 있고, base image 로부터 변경 사항을 commit 해서 또 다른 이미지를 만들 수도 있다.
레지스트리
는 생성된 이미지가 저장되는 곳이며, 대표적으로 Docker Hub, Amazon ECR이 있다.
Repository
: 레지스트리 내에 도커 이미지가 저장되는 공간이다.
컨테이너 기술과 VM은 둘 다 프로세스, 네트워크, 파일 시스템을 격리할 수 있지만, 몇가지 차이점이 존재한다.
Docker는 가볍기 때문에, 하나의 Host에 여러 개의 컨테이너를 띄워도 컴퓨터에 큰 무리가 가지 않음.
VM
을 사용하기 위해서는 해당 VM 위에 OS를 설치해야 한다.
반면, Docker Image는 보통 애플리케이션 단위로 만들어져 있다. Docker
의 경우 Docker 위에 컨테이너들이 올라가 있고 Docker는 Host OS 위에서 동작한다.
=> 각 컨테이너는 Host OS의 커널(Kernel, OS의 기능을 구현한 프로그램)을 공유하고 있으며, Host OS의 입장에서 컨테이너 하나는 하나의 프로세스에 불과하다.
윈도우나 macOS는 기본적으로 리눅스 커널을 쓰고 있지 않으므로, 해당 OS의 경우 리눅스 커널을 VM의 형태로 실행시키는 하이퍼바이저(VM 소프트웨어)를 자체적으로 구동한다.
윈도우용 또는 macOS용 Docker는 하이퍼바이저 위의 리눅스 커널을 사용하는 것이다.