[따배도] 8-2.Container가 사용하는 Storage (실습)

( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )


Contents

  1. mySQL DB data 영구 보존하기
  2. 웹데이터 readonly 서비스로 지원하기
  3. Container간 데이터 공유하기


Q1. mySQL DB data 영구 보존하기

goal : mySQL DB를 volume mount를 통해 HOST에 영구적으로 보존하기

figure2

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가 생성된다


figure2

docker exec -it db /bin/bash
mysql -u root -ppass
  • db에 접속한다


CREATE DATABASE ttabae;
show databases;
exit
  • 접속한 db에 ttabae라는 데이터베이스를 생성하고 exit한다

figure2


이렇게 해서 /var/lib/mysql/에 저장된 db는, mount되어 있는

HOST의 /dbdata/ 경로에도 저장이 된다.

mysql db가 삭제되었다 하더라도, HOST 상에는 존재하게 된다.


exit
cd /dbdata/ttabae

cd

docker rm -f db

cd /dbdata/ttabae

figure2


만약 host path를 /dbdata와 같이 명시적으로 지정해주지 않으면…

  • var/lib/docker/volume/UUID/_data가 임의로 생성된 뒤 이 곳에 저장!


Q2. 웹데이터 readonly 서비스로 지원하기

goal : web data를 HOST에 만들어 놓고, container에서 서비스할 수 있도록!

figure2


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

figure2


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

figure2


이러한 container를 build하는 dockerfile을 생성해보자.

dockerfile :

FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]

figure2


docker build -t smlinux/df:latest .
docker images

figure2


이렇게 생성된 container는 10초마다 /webdata/indx.html마다 매 10초마다 계속 내용을 바꿔주고 있을 것이다.

이 데이터는 web server를 통해 고객에게 계속 제공될 것이다.

figure2


# [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