출처 : 패캠 gitops
https://docs.docker.com/storage/volumes/
1. Bind mount
호스트에서 직접적인 관리된다.
docker run ~~ -v /host-volume:/app ~~
docker run ~~ --mount type=bind,source=/host-volume ~~ # 리눅스 mount와 유사
예시1 : redis 설치에 config 파일에 패스워드를 설정하여 그 파일을 바인트 마운트 한다.
예시2 : 파일 투 파일로 연동. 시간동기화: /etc/localtime (Dockerfile로 설정이 편하긴함)
2. docker volume
도커의 볼륨 드라이버로 도커가 관리함.(도커에서 권장하는 방법)
docker volume create my-volume
docker run ~~ -v my-volume:/app ~~
docker run ~~ --mount source=my-volume ~~
docker volume create mydb-data
docker volume inspect mydb-data
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=passwrod1 -e MYSQL_DATABASE=dockerdb -v mydb-data:/var/lib/mysql mysql:5.7-debian
sudo ls /var/lib/docker/volumes/mydb-data/_data
도커 호스트에서 mysql 컨테이너의 데이터 조회 가능
암시적 도커 볼륨 : 도커 볼륨 명시하지 않고 임의의 이름으로 마운트 된다.
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=passwrod1 -e MYSQL_DATABASE=dockerdb -v /var/lib/mysql mysql:5.7-debian
data container
--volumes-from : 여러 컨테이너가 데이터를 공유하기 위한 데이터 컨테이너
# 도커 볼륨
docker create -v /share-data --name=share-container ubuntu # 데이터 컨테이너는 실행하지 않고 생성만 한다.
docker run -it --rm --volumes-from share-container --name=data-1 ubuntu bash
echo data-1 > /share-data/share-test.txt # data-1컨테이너에서 파일 생성
docker run -it --rm --volumes-from share-container --name=data-2 ubuntu bash
cat /share-data/share-test.txt # data-1. 데이터 공유 확인.
docker rm share-container
# 바인딩 마운트
docker create -v $(pwd)/share-volume:/share-data --name=share-container ubuntu
docker run -it --rm --volumes-from share-container --name=data-1 ubuntu bash
echo data-1 > /share-data/share-test.txt # data-1컨테이너에서 파일 생성
docker run -it --rm --volumes-from share-container --name=data-2 ubuntu bash
cat /share-data/share-test.txt # data-1. 데이터 공유 확인.
docker rm share-container
읽기/쓰기 권한
--volumes-from share-container:ro # 읽기
--volumes-from share-container:rw # 읽기,쓰기(기본값)
3. tmpfs mount
메모리에 저장. 컨테이너 중지하면 데이터 소실.
docker run ~~ -tmpfs /var/www/html ~
docker run ~~ --mount type=tmpfs,destication=/var/www/html ~
데이터 컨테이너의 데이터 지속성 특징
1. DB데이터 지속성 및 업/다운그레이드
DB 데이터가 저장된 데이터 컨테이너를 다른 컨테이너에서 사용하면 온전히 사용 할 수 있다.
DB 종류와 버전에대한 호환은 당연히 안된다고 생각했지만 버전 호환은 가능하다!!
2. 컨테이너 log 확인
nginx,apache의 로그위치를 이용한다.
그럼 호스트에서 로그 확인가능. 게다가 호스트에서 로그를 파싱(shell script 등)할 수 있다.(=웹 로그 분석)
Volume 사용량 제한
docker run -it -v $(pwd)/myvolume:/webapp --name=mycontainer --storage-opt size=1G ubuntu bash
오류 : docker: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option.
도커 호스트 pquota 설정
sudo vi /etc/default/grub
10 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash rootflags=uquota,pquota"
sudo vi /etc/fstab
UUID=b~~~1 /var/lib/docker xfs defaults,pquota 0 0
sudo reboot
컨테이너 별 영역 제한
docker run -it -v $(pwd)/myvolume:/webapp --name=mycontainer --storage-opt size=1G ubuntu bash
df -h
Filesystem Size Used Avail Use% Mounted on
overlay 1.0G 8.0K 1.0G 1% /
모든 컨테이너 영역 제한
sudo vi /etc/docker/daemon.json
{ "insecure-registries": ["192.168.56.101:5000"],
"log-driver": "json-file",
"log-opts": {
"max-size": "30m",
"max-file": "10"
},
"storage-opts": ["overlay2.size=500m"]
}
docker run -it -v $(pwd)/myvolume:/webapp --name=mycontainer ubuntu bash
df -h
Filesystem Size Used Avail Use% Mounted on
overlay 500M 8.0K 500M 1% /
bind mount 구성하여 컨테이너 영역 제한
sudo -s # 관리자 로그인. sudo su -
dd if=/dev/zero of=tmpdisk.img count=512 bs=1M # zero로 채워진 512M 크기의 파일(영역) 생성
mkfs.xfs tmpdisk.img # xfs 파일시스템 포멧
fdisk -l tmpdisk.img # 파일시스템 조회
mkdir -p /home/{사용자}/volume-quota
mount -o loop tmpdisk.img /home/{사용자}/volume-quota # 마운트
df -h # 마운트 조회
/dev/loop18 507M 30M 478M 6% /home/{사용자}/volume-quota
chown -R {사용자}.{사용자} /home/{사용자}/volume-quota # 파일 소유자 변경
exit # 관리자 로그아웃
docker run -it -v /home/{사용자}/volume-quota:/webapp --name=myvolume ubuntu bash
df -h # /webapp 의 크기가 도커 호스트에서 조회한 내용과 같으면 성공
현재 Docker Host 가 proxmox CT ubuntu 이미지를 사용하고 있는데 ext4라서 지원이 안된다...
VM으로 도커 서버를 다시 구성하거나 다른 방법이 필요하다. 실습 없이 명령어라도 작성한다...
'Infra > IaC' 카테고리의 다른 글
[Docker] compose (0) | 2023.10.26 |
---|---|
[Docker] Dockerfile 경량화 (0) | 2023.10.26 |
[Docker] 리소스 모니터링과 자원 할당 관리 (0) | 2023.10.24 |
[Docker] Network 관리 (2) | 2023.10.20 |
[Docker] 컨테이너 운용에 필요한 CLI (0) | 2023.10.17 |