1. Docker Volume
Docker Volume
- 컨테이너 간 데이터 공유 및 영구 데이터 저장을 위해 사용
- 컨테이너는 기본적으로 독립된 환경을 가지며, 컨테이너 내부에서 생성된 데이터는 컨테이너가 삭제되면 함께 삭제됨
- 이를 방지하고 데이터를 컨테이너 간 공유하거나 영구적으로 유지하기 위해 Docker Volume을 사용
특징
- 데이터 영속성: 컨테이너가 삭제되어도 볼륨에 저장된 데이터는 유지
- 컨테이너 간 데이터 공유: 여러 컨테이너가 동일한 볼륨을 참조하여 데이터를 공유 가능
- 호스트와의 데이터 공유: Docker Volume은 호스트 시스템 디렉토리와 데이터를 공유 가능
- 운영 효율성: 호스트 파일 시스템의 경로를 직접 사용하는 바인드 마운트보다 더 안전하고 편리
volume vs bind mount vs tmpfs mount!
-
volume
- 컴퓨터에 따로 만들어진 폴더 같은 것으로, Docker가 이 폴더를 관리해서 사용자가 쓰는 데이터를 이 곳에 저장
- Docker는 보통 볼륨을 컴퓨터의 특정 폴더(대부분
/var/lib/docker/volumes/
)에 만듦
- 볼륨의 장점
- 백업하고 옮기기 쉬움
- Docker 명령어로 관리
- 어떤 컨테이너에서도 잘 작동
- 여러 컨테이너에서 안전하게 사용 가능
- 볼륨 드라이버로 더 많은 기능을 추가 가능
- Mac이나 Windows에서 더 빠르게 동작
-
bind mount
- 컴퓨터의 특정 폴더나 파일을 Docker 컨테이너 안에서 직접 사용할 수 있게 해줌
- 컴퓨터에서 어떤 폴더나 파일을 골라서 Docker 컨테이너에 '붙여 넣는' 것과 비슷함
- 컴퓨터 안의 정확한 위치(절대 경로)에 있는 파일이나 폴더를 사용해서, 컨테이너가 어디에 있든 그 파일이나 폴더를 똑같이 사용 가능
-
tmpfs mount
- 컴퓨터 메모리를 사용해서 일시적인 데이터를 저장하는 방법
- 컨테이너가 임시 데이터를 만들 때, 이것을 영구적으로 저장하지 않고 메모리에만 잠시 두고 싶을 때 사용
- 컴퓨터의 일반 파일 시스템 대신 메모리를 사용해서 데이터를 저장하기 때문에 데이터를 빠르게 읽고 쓸 수 있어서 컨테이너의 성능이 좋아짐
- 다른 컨테이너와는 데이터 공유가 되지 않음
2. Docker Network
Docker Network
- Docker 컨테이너끼리 서로 통신할 수 있게 도와주는 네트워크
- 컨테이너들이 서로 통신하는 것을 더 쉽게 할 수 있고, 보안도 더 강하게 할 수 있음
Docker Network의 개념
- 네트워크: 컨테이너들 사이에서 데이터 패킷을 주고 받을 수 있는 경로
- 컨테이너 네트워크 모델(CNM)
- 네트워크를 쉽고 효율적으로 구축할 수 있도록 도와주는 네트워크 모델
- 컨테이너 네트워크를 구현할 때 필요한 기본 요건들을 정해줌
- 샌드박스
- 컨테이너를 외부 세계로부터 완전히 분리함
- 컨테이너가 완전히 소통 불가능하면 안되기 때문에 엔드포인트가 필요
- 엔드포인트
- 외부 세계와 샌드박스(컨테이너가 아닌) 사이의 연결점
- 엔드포인트는 샌드박스를 다음 요소인 네트워크에 연결
- 네트워크
- 엔드포인트에서 다른 엔드포인트로, 결국은 컨테이너에서 다른 컨테이너로 데이터를 보내는 길
Docker Network 종류
-
브리지 네트워크
- 한 컴퓨터 안에서 여러 Docker 컨테이너가 서로 통신하는 네트워크
- 컨테이너를 이 네트워크에 붙이면, Docker가 알아서 IP 주소를 할당함
- 호스트 밖의 다른 네트워크랑은 일단 따로 동작하지만, 포트 매핑을 통해 바깥에서도 컨테이너에 접근 가능
-
공용 네트워크
- 보통 외부에서 접근할 수 있게 하려면 브리지 네트워크에 포트를 열어주거나, 컨테이너가 직접 우리 컴퓨터의 네트워크를 쓰게 하는 '호스트 네트워크'를 사용
-
사설 네트워크
- 특별한 컨테이너끼리만 통신할 수 있는 네트워크
- Docker에서는 사용자가 직접 네트워크를 만들고, 그 안에 원하는 컨테이너만 연결하는 것이 가능
- 다른 컨테이너나 외부 네트워크와는 격리되어서, 더 안전하게 정보를 주고받는 것이 가능