본문 바로가기
INFRA/DevOps

[Docker] Docker container storage

by BTC_비웃는사나이 2022. 7. 11.
  • container image는 read only
  • container에 추가되는 data들은 별도의 rw layer에 저장
  • Union file system (Overlay) 기술로 가능
  • container가 만들어주는 data (rw layer)를 영구적으로 보존할 필요가 있음
  • Volume mount를 통해서 container끼리 data 공유 가능

 

Container vulume option

  • -v <host path>:<container mount path>
  • -v <host path>:<container mount path>:<read write mode>
  • -v <container mount path>

 

Docker volume과 관련된 command

docker volume [command]

 

 

[ Hands - on ]

Mysql DB data 영구 보존

- Host path 설정한 경우

  • Mysql container 생성
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
  • 생성한 container로 접속
docker exec -it db /bin/bash
  • Mysql database 접속
mysql -u root -ppass
  • Host에서 된 디렉토리에서 확인할 database 생성 및 확인
create database ttabae;
show databases;
  • /dbdata 디렉토리에서 생성한 database 확인
ls /dbdata

  • Mysql container 삭제
docker rm -f db
  • container 삭제 후에도 host에 data가 보존 되는 것을 확인
ls /dbdata

- Host path 설정하지 않은 경우

  • Mysql container 생성
docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
  • host에서 /var/lib/volume/{container UUID}/_data에서 mount 확인

  • Mysql container 삭제
docker rm -f db
  • container 삭제 후에도 host에 data가 보존 되는 것을 확인
ls /var/lib/volume/{container UUID}/_data

  • 사용하지 않은 volume 삭제
docker volume rm

 

 

Web data를 container에 지원하기

  • 실습을 위한 별도의 디렉터리 생성 및 이동
mkdir /webdata
cd /webdata
  • index.html 파일 생성
echo "<h1>YouTUBE TTABAE-LEARN</h1>" > index.html
  • nginx container 생성 및 확인
docker run -d --name web -p 80:80 -v /webdata:/usr/share/nginx/html:ro nginx:latest

  • host의 index.html 파일 수정 및 확인
echo "<h1>Youtube:TTABAE-LEARN</h1>" > index.html

 

 

Container끼리 data 공유

  • root 디렉토리의 디스크 사용량을 10초마다 모니터링 하는 container 생성
cat >> df.sh << EOF
#!/bin/bash
mkdir -p /webdata
while true\
do
  df -h / > /webdata/index.html
  sleep 10
done
EOF
cat >> dockerfile << EOF
FROM ubuntu:latest
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]
EOF
docker build -t df:latest .
docker run -d -v /webdata:/webdata --name df df:latest
  • host의 /webdata에서 index.html 확인
cat /webdata/index.html

  • nginx container 생성 및 확인
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:latest

 

 

참고 :

https://www.youtube.com/watch?v=JcgrQnkIePE&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=19 

https://www.youtube.com/watch?v=IHuU3rZATbg&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=20 

'INFRA > DevOps' 카테고리의 다른 글

Terraform으로 Aws Infra 구성하기 (기초)  (0) 2022.07.13
Github의 이해 2  (0) 2022.07.12
GitHub Script란 무엇일까요?  (0) 2022.07.06
[Docker] Docker container resource 관리  (0) 2022.07.05
Github의 이해 1  (0) 2022.07.01

댓글