- 서버를 쉽게 관리하고 어플리케이션들을 쉽게 설치할 수 있게 도와주는 가상 OS 플랫폼
- 어플리케이션을 이미지로 묶어 생성하고, 그 이미지를 실행하기 위한 컨테이너를 생성한다, 이는 Java의 클래스와 인스턴스와 유사하다고 보면 된다
구조
Docker 구조
Container
- 각 별도의 프로세스를 실행하여 CPU나 메모리를 필요한만큼만 사용하는 리소스
Image
Docker Image
Docker Volume
- 저장소, Docker 내 컨테이너들이 공용으로 사용하는 저장소를 필요로 할 때 사용 가능
- 3가지 방법이 있는데
- 호스트 디렉토리와 컨테이너 디렉토리를 공유하여 사용, 이렇게 쓰면 컨테이너가 삭제되어도 호스트 내 디렉토리엔 정보를 별도 저장할 수 있다
- 볼륨 컨테이너를 별도로 만들어서 사용, 다른 컨테이너들은 볼륨 컨테이너를 바라보며 데이터를 저장하고 관리할 수 있다 (이때 옵션은 volumes-from)
- 도커 자체의 볼륨을 사용한다, 도커 엔진에서 볼륨을 생성하고 관리할 수 있고, 컨테이너들이 볼륨을 참조하여 데이터를 저장하고 공유할 수도 있다
- 주로 3번째 방법을 많이 쓰는 듯 하다
Docker Network
- 기본적으로 컨테이너와 호스트 간의 통신을 할 때, 네트워크 환경이 위처럼 구성된다
- 컨테이너를 생성할때마다 veth 인터페이스가 생성이 되고, 저 인터페이스가 내부 컨테이너의 eth 인터페이스와 연동되어 host와 통신할 수 있게 해준다
- 컨테이너의 veth 인터페이스는 docker0라는 브릿지를 통해 호스트의 eth 인터페이스와 통신을 할 수 있는 것
- 이를 Docker 브릿지 네트워크라고 하는데, 기본 방식이며, 사용자가 원하는 방식대로 네트워크를 달리 설정하여 컨테이너를 생성할 수 도 있다
- 호스트 네트워크 - 호스트의 네트워크 환경을 그대로 사용, 그래서 외부 노출 할때 별도 설정 없이 호스트 IP로 컨테이너에 접근할 수 있다
- 논 네트워크 - 네트워크 사용을 하지 않음, 단절된 환경
- 컨테이너 네트워크 - 특정 컨테이너의 네트워크를 공유할 수 있다, 특정 컨테이너의 eth 인터페이스를 공유하여 외부와 통신이 가능하다
- MacVLAN 네트워크 - 물리 네트워크 환경인 라우터나 스위치를 통해 각각 연동된 서버끼리 통신할 수 있게 해주는 설정
- 예를 들면, 어떤 라우터에 Node1과 Node2번이 연결되어 있을 때, MacVLAN 네트워크 설정으로 각각 컨테이너를 생성하면 Node1의 컨테이너가 Node2의 컨테이너와 통신할 수 있다는 것
- 허나 Node1의 컨테이너는 호스트인 Node1과는 통신할 수 없다