[따배도] 8-2.Container가 사용하는 Storage (실습)
( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )
Contents
- mySQL DB data 영구 보존하기
- 웹데이터 readonly 서비스로 지원하기
- Container간 데이터 공유하기
Q1. mySQL DB data 영구 보존하기
goal : mySQL DB를 volume mount를 통해 HOST에 영구적으로 보존하기
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
- container directory :
/var/lib/mysql
- host directory :
/dbdata
- 없으면, 자동으로 해당 directory가 생성된다
docker exec -it db /bin/bash
mysql -u root -ppass
- db에 접속한다
CREATE DATABASE ttabae;
show databases;
exit
- 접속한 db에 ttabae라는 데이터베이스를 생성하고 exit한다
이렇게 해서 /var/lib/mysql/
에 저장된 db는, mount되어 있는
HOST의 /dbdata/
경로에도 저장이 된다.
mysql db가 삭제되었다 하더라도, HOST 상에는 존재하게 된다.
exit
cd /dbdata/ttabae
cd
docker rm -f db
cd /dbdata/ttabae
만약 host path를 /dbdata
와 같이 명시적으로 지정해주지 않으면…
var/lib/docker/volume/UUID/_data
가 임의로 생성된 뒤 이 곳에 저장!
Q2. 웹데이터 readonly 서비스로 지원하기
goal : web data를 HOST에 만들어 놓고, container에서 서비스할 수 있도록!
mkdir /webdata
cd /webdata/
echo "<h1> YouTUBE SEUNGHAN-LEE</h1>" > index.html
cat index.html
cd
docker run -d --name web -p 80:80 -v /webdata:/usr/share/nginx/html:ro nginx:1.14
docker ps
Q3. Container간 데이터 공유하기
우선, 디스크 사용량을 확인해보자 ( human readable하게 )
df -h /
매 10초마다 df 명령이 시행하는 컨테이너를 만들어볼 것이다.
df.sh
:
#!bin/bash
mkdir -p /webdata
while true
do
df -h / > /webdata/index.html
sleep 10
done
이러한 container를 build하는 dockerfile을 생성해보자.
dockerfile
:
FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]
docker build -t smlinux/df:latest .
docker images
이렇게 생성된 container는 10초마다 /webdata/indx.html마다 매 10초마다 계속 내용을 바꿔주고 있을 것이다.
이 데이터는 web server를 통해 고객에게 계속 제공될 것이다.
# [1] df:latest ---> /webdata/index.html
docker run -d -v /webdata:/webdata --name df smlinux/df:latest
# [2] webdata/index.html ---> web server
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14