[Docker] 04. Docker Object

Date:     Updated:

카테고리:

태그:

[Docker] 04. Docker Object



🔔 (1) 이미지 (Image)


그림111212

(a) 도커 이미지

  • 이미지는 컨테이너를 빌드하는데 사용되는 읽기 전용 바이너리 템플릿으로 이미지안에는 컨테이너의 기능과 요구사항을 설명하는 메타데이터가 포함된다.

  • 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장되며, 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남는다.

(b) 도커 레이어

  • 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 수백 MB 용량을 가지며, 처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백 MB를 다시 받는것은 비효율적이다.

  • 이런 문제를 해결을 위해 Layer라는 개념을 사용하며, Layer란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운받는 방법이 아닌 해당 파일을 추가하기 위한 개념으로 이미지는 여러 개의 읽기 전용 레이어로 구성되고, 파일이 추가되면 새로운 레이어가 생성된다 그리고 도커는 여러 개의 레이어를 묶어서 하나의 파일 시스템으로 사용할 수 있게 해준다.

(c) 도커 파일

  • 도커 이미지를 만들기 위해 Dockerfile이라는 파일에 자체 DSLD (Domain specific language) 언어를 이용하여 이미지 생성 과정을 적는다.

  • 애플리케이션 실행에 필요한 과정들을 Dockerfile로 작성하여 관리할 수 있으며, 해당 Dockerfile을 보면서 이미지 생성 과정을 알 수 있어 수정하기도 용이하다.


🔔 (2) 컨테이너

도커 컨테이너는 이미지로부터 생성된 인스턴스이며, 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있고, 유니언 파일 시스템의 특성에 따라 하위 레이어는 읽기 전용이며, CoW(Copy On Write) 전략에 의해 쓰기 작업은 상위 레이어로 복사해서 이루어지기 때문에 하나의 이미지로부터 복수의 컨테이너가 실행되어도 문제되지 않는다.


ㄷㅂㄷㅂㅈㄷㅂㅈ23131

(a) 컨테이너 레이어

  • 쓰기 가능한 레이어로, 각 컨테이너 마다 최상단에 생성되어 컨테이너마다 자신만의 상태를 가질 수 있게 해준다.

  • 컨테이너가 생성된 후 모든 변경 작업은 이 레이어에서 이루어진다.

(b) 이미지 레이어

  • 읽기 전용 레이어로, 다른 컨테이너와 공유할 수 있다.

(c) 컨테이너 크기

  • 실행 중인 컨테이너의 컨테이너 레이어와 이미지 레이어의 크기를 확인할 수 있다.

  • 【Size】 : 컨테이너 레이어의 데이터 크기

  • 【Virtual Size】 : 컨테이너 레이어와 이미지 레이어를 합한 데이터 크기

  • 이미지 레이어는 여러 컨테이너가 공유하는 공용 레이어이므로, 여러 컨테이너를 운영하는 호스트에서 단순히 모든 컨테이너에 대한 가상 크기의 합계로 디스크 용량을 점유하고 있다고 판단하면 안된다.


🔔 (3) 스토리지

컨테이너가 실행 중에 작성 혹은 수정된 파일은 호스트 파일 시스템에 마운트 되지 않는 한 컨테이너가 파기될 때 파일들도 함께 삭제되기 때문에 별도의 저장 공간이 필요하다.

(a) 데이터 볼륨 (Data Volumes)


3131312ㄴㅇㅁㅇㅁㄴ

  • 데이터 볼륨은 데이터를 컨테이너가 아닌 호스트에 저장하는 방식, 따라서 데이터 볼륨은 컨테이너끼리 데이터를 공유할 때 활용할 수 있다.

  • 컨테이너 안의 파일 변경 사항은 UFS에 의해 관리되지만 데이터 볼륨은 유니온 파일 시스템을 통하지 않고 바로 호스트에 저장된다.

  • 따라서 docker 명령으로 통해 현재 컨테이너를 이미지로 생성해도 데이터 볼륨의 변경 사항은 이미지에 포함되지 않는다.

(b) 데이터 볼륨 컨테이너 (Data Volumes Container)


3131312ㄴㄴ

  • 데이터 볼륨 컨테이너는 데이터 볼륨을 설정한 컨테이너를 뜻하며, 일반 컨테이너에서 데이터 볼륨 컨테이너를 연결하면 데이터 볼륨 컨테이너 안의 데이터 볼륨 디렉토리에 접근할 수 있다.


🔔 (4) 네트워크


ㅂㄷㅂㅈ231

(a) 도커 네트워크 - 도커를 설치하면, 기본적으로 설정된 네트워크

【브릿지(Bridge)】

  • 컨테이너가 사용하는 Private 네트워크로서, 같은 bridge에 연결되어 있으면 컨테이너의 IP 주소로 통신할 수 있다.

    • docker0 : 도커를 설치하면 생성되는 리눅스 브릿지

    • veth : 컨테이너를 실행하면, 브릿지 네트워크에 veth를 통해 연결

【호스트(Host)】

  • 호스트에서 컨테이너의 네트워크 격리를 해제하여 호스트의 네트워크 정보를 공유해서 사용하는 방법

  • 컨테이너가 이 네트워크를 사용할 때 컨테이너의 포트가 호스트에서 사용하는 포트와 충돌해서는 안된다.

【null(none)】

  • 컨테이너의 네트워크 기능을 사용하지 않는 방법


(b) 사용자 정의 네트워크

【브릿지 (Bridge) 네트워크】

  • 사용자 정의 브릿지는 자동으로 컨테이너 간의 DNS 문제를 해결함

    • 기본 브릿지 네트워크를 사용하는 컨테이너들은 –link 옵션을 사용하지 않는 이상, 서로의 IP 주소를 통해서 접근해야 한다.

    • 하지만 사용자 정의 브릿지에서는 따로 컨테이너의 이름/별칭을 지정하지 않고도 이름이나 별칭을 통해 접근이 가능하다.

  • 사용자 정의 브릿지는 더 나은 고립을 제공함

    • ”–network”를 따로 지정하지 않은 모든 컨테이너는 자동으로 기본 네트워크에 할당되며, 이는 연관되지 않은 컨테이너들 까지 통신이 가능하다는 의미한다.

    • 사용자 정의 브릿지는 해당 브릿지에 속해있는 컨테이너끼리만 통신한다.

  • 컨테이너를 정지시키지 않고 네트워크에 접근/분리 가능

    • 컨테이너를 정지시키지 않고 네트워크에 접근/분리 할 수 있다.
  • 각각의 사용자 정의 브릿지는 설정이 가능하다.

    • 물론 기본 브릿지도 설정이 가능 하지만 기본 브릿지에 속한 모든 컨테이너가 같은 설정을 갖게 되고 네트워크 설정을 적용시키기 위해 도커를 재시작 해야한다.


【오버레이 네트워크】

  • 여러 호스트에 각각의 브릿지 네트워크가 있으며, 다른 브릿지 네트워크와는 격리된 상태이기 때문에 다른 브릿지 네트워크와 통신 할 수 없다.

  • 오버레이 네트워크는 서로 다른 도커 호스트의 컨테이너가 서로 통신할 수 있도록 하며, 이때 스웜(Swarm) 기능을 통해 통신이 가능하다.

  • 스웜(Swarm)이란 여러 도커 호스트를 클러스터로 묶어주는 컨테이너 오케스트레이션 도구의 한 종류이다.


【MAC VLAN 네트워크】

  • MAC 주소를 컨테이너에 할당하여 도커 데몬이 트래픽을 컨테이너의 MAC 주소로 라우팅할 수 있게 한다.

  • 호스트의 네트워크를 통해 라우팅하는 것이 아니라 컨테이너가 실제 네트워크에 직접 연결해야 할 때 사용된다.


DOCKER 카테고리 내 다른 글 보러가기

댓글 남기기