Docker
💡 **가상 머신처럼 독립된 실행환경을 만들어 주는 것**을 말한다. 운영체제를 설치하는 것과 유사하지만 실제로 설치하는 것은 아니기 때문에 설치 용량이 작고, 속도가 빠르다.
❓ Docker를 왜 사용할까?
구성 단순화
Docker
는 하나의 Configuration
으로 모든 플랫폼에서 실행할 수 있다.
Configuration
파일을 코드에 넣고 환경 변수를 전달해서 다른 환경에 맞출 수 있다.
- 따라서 하나의 Docker Image를 다른 환경에서 사용할 수 있다.
코드 관리
- Docker는 일관된 환경을 제공하여 개발 및 코딩을 훨씬 편안하게 만들어준다.
- Docker Image는 변경이 불가하기에 개발환경에서 운영 환경까지 애플리케이션 환경이 변경되지 않는 이점이 존재한다.
개발 생산성 향상
- 개발 환경을 운영 환경에 최대한 가깝게 복제할 수 있다.
- Docker를 사용하면 코드가 운영 환경의 컨테이너에서 실행될 수 있다.
- 가상 머신과는 달리 Shared Volume을 사용해서 호스트에서 컨테이너의 어플리케이션 코드를 사용할 수 있도록 할 수 있다.
- 이를 통해서 개발자는 소스 코드를 편집할 수 있고 편집된 코드는 Docker내에 실행 중인 환경에 반영된다.
애플리케이션 격리
- Web Server (e.g. Apache, Nginx)와 연결된 API 서버를 격리를 해야할 때 다른 Container에서 API서버를 실행할 수 있다.
빠른 배포
- Container OS를 부팅하지 않은 상태에서 어플리케이션을 실행하기 때문에 Docker Container를 매우 빠르게 만들 수 있다.
🤔 Container와 Virtual Machine 비교
- Container :
Linux
, Window
, Mac
과 같이 Host OS 기반의 Docker 운영
- Container별로 각각
Process
단위로 bin/lbs
가 구동.
- Virtual Machine : Hypervisor위에 Full Host OS가 올라가고 이를 기반으로
bin/lbs
가 구동된다.
- Virtual Machine은 Full OS를 구동하기 때문에 OverHead가 높다.
Container와 Virtual Machine의 큰 차이점은 Host OS 설치 여부에 있다.
](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56a16f2e-c3e1-40da-a110-692551474138/Untitled.png)
출처: https://docs.docker.com/get-started/overview/
🧐 Image와 Container의 개념
Docker는 Client(docker)와 Server(dockerd)로 구성되어 있다. Docker의 Image
는 read only
의 Docker Container를 생성하기 위한 template이고, Container
는 Images
가 실제 메모리에 Loading된 Instance다.
- Images : libs와 package의 template, read only
- Container : Images가 설치되어 메모리에 Loading된 Instance