241214 TIL Docker Volume

윤수용·2024년 12월 14일
0

TIL

목록 보기
77/89

1. Docker Volume

Docker Volume

  • 컨테이너 간 데이터 공유 및 영구 데이터 저장을 위해 사용
  • 컨테이너는 기본적으로 독립된 환경을 가지며, 컨테이너 내부에서 생성된 데이터는 컨테이너가 삭제되면 함께 삭제됨
  • 이를 방지하고 데이터를 컨테이너 간 공유하거나 영구적으로 유지하기 위해 Docker Volume을 사용

특징

  • 데이터 영속성: 컨테이너가 삭제되어도 볼륨에 저장된 데이터는 유지
  • 컨테이너 간 데이터 공유: 여러 컨테이너가 동일한 볼륨을 참조하여 데이터를 공유 가능
  • 호스트와의 데이터 공유: Docker Volume은 호스트 시스템 디렉토리와 데이터를 공유 가능
  • 운영 효율성: 호스트 파일 시스템의 경로를 직접 사용하는 바인드 마운트보다 더 안전하고 편리

volume vs bind mount vs tmpfs mount!

  1. volume

    • 컴퓨터에 따로 만들어진 폴더 같은 것으로, Docker가 이 폴더를 관리해서 사용자가 쓰는 데이터를 이 곳에 저장
    • Docker는 보통 볼륨을 컴퓨터의 특정 폴더(대부분 /var/lib/docker/volumes/)에 만듦
    • 볼륨의 장점
      - 백업하고 옮기기 쉬움
      - Docker 명령어로 관리
      - 어떤 컨테이너에서도 잘 작동
      - 여러 컨테이너에서 안전하게 사용 가능
      - 볼륨 드라이버로 더 많은 기능을 추가 가능
      - Mac이나 Windows에서 더 빠르게 동작
  2. bind mount

    • 컴퓨터의 특정 폴더나 파일을 Docker 컨테이너 안에서 직접 사용할 수 있게 해줌
    • 컴퓨터에서 어떤 폴더나 파일을 골라서 Docker 컨테이너에 '붙여 넣는' 것과 비슷함
    • 컴퓨터 안의 정확한 위치(절대 경로)에 있는 파일이나 폴더를 사용해서, 컨테이너가 어디에 있든 그 파일이나 폴더를 똑같이 사용 가능
  3. tmpfs mount

    • 컴퓨터 메모리를 사용해서 일시적인 데이터를 저장하는 방법
    • 컨테이너가 임시 데이터를 만들 때, 이것을 영구적으로 저장하지 않고 메모리에만 잠시 두고 싶을 때 사용
    • 컴퓨터의 일반 파일 시스템 대신 메모리를 사용해서 데이터를 저장하기 때문에 데이터를 빠르게 읽고 쓸 수 있어서 컨테이너의 성능이 좋아짐
    • 다른 컨테이너와는 데이터 공유가 되지 않음



2. Docker Network

Docker Network

  • Docker 컨테이너끼리 서로 통신할 수 있게 도와주는 네트워크
  • 컨테이너들이 서로 통신하는 것을 더 쉽게 할 수 있고, 보안도 더 강하게 할 수 있음

Docker Network의 개념

  • 네트워크: 컨테이너들 사이에서 데이터 패킷을 주고 받을 수 있는 경로
  • 컨테이너 네트워크 모델(CNM)
    - 네트워크를 쉽고 효율적으로 구축할 수 있도록 도와주는 네트워크 모델
    - 컨테이너 네트워크를 구현할 때 필요한 기본 요건들을 정해줌
  • 샌드박스
    - 컨테이너를 외부 세계로부터 완전히 분리함
    - 컨테이너가 완전히 소통 불가능하면 안되기 때문에 엔드포인트가 필요
  • 엔드포인트
    - 외부 세계와 샌드박스(컨테이너가 아닌) 사이의 연결점
    - 엔드포인트는 샌드박스를 다음 요소인 네트워크에 연결
  • 네트워크
    - 엔드포인트에서 다른 엔드포인트로, 결국은 컨테이너에서 다른 컨테이너로 데이터를 보내는 길

Docker Network 종류

  1. 브리지 네트워크

    • 한 컴퓨터 안에서 여러 Docker 컨테이너가 서로 통신하는 네트워크
    • 컨테이너를 이 네트워크에 붙이면, Docker가 알아서 IP 주소를 할당함
    • 호스트 밖의 다른 네트워크랑은 일단 따로 동작하지만, 포트 매핑을 통해 바깥에서도 컨테이너에 접근 가능
  2. 공용 네트워크

    • 보통 외부에서 접근할 수 있게 하려면 브리지 네트워크에 포트를 열어주거나, 컨테이너가 직접 우리 컴퓨터의 네트워크를 쓰게 하는 '호스트 네트워크'를 사용
  3. 사설 네트워크

    • 특별한 컨테이너끼리만 통신할 수 있는 네트워크
    • Docker에서는 사용자가 직접 네트워크를 만들고, 그 안에 원하는 컨테이너만 연결하는 것이 가능
    • 다른 컨테이너나 외부 네트워크와는 격리되어서, 더 안전하게 정보를 주고받는 것이 가능
profile
잘 먹고 잘 살자

0개의 댓글