본문 바로가기

따배도 스터디

8-2 Docker Container Storage - 실습편

728x90

Q1. mysql DB data 영구보존하기

 sudo docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:latest

 

:를 기준으로해서 앞은 호스트에 저장될공간 뒤는 컨테이너에디렉토리와 -v 불륨마운트하겠다(영구적으로 보존)

 

mysql container 에 접속하기

sudo docker exec -it 8f67a2803939 bash


mysql -u root -p

Enter password:

Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

 

테이블생성하기

mysql> create database ttabae;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| ttabae             |
+--------------------+
5 rows in set (0.00 sec)

테이블을 생성했으니 host안에 따배라는이름을가진 데이터가 있는지 확인해보자

'#ib_16384_0.dblwr'   binlog.index      ibtmp1               server-cert.pem
'#ib_16384_1.dblwr'   ca-key.pem        mysql                server-key.pem
'#innodb_redo'        ca.pem            mysql.ibd            sys
'#innodb_temp'        client-cert.pem   mysql.sock           ttabae
 auto.cnf             client-key.pem    performance_schema   undo_001
 binlog.000001        ib_buffer_pool    private_key.pem      undo_002
 binlog.000002        ibdata1           public_key.pem

sudo docker rm -f db 으로 삭제를 해도 과연 데이터가 남아있을까?

'#ib_16384_0.dblwr'   binlog.index      ibtmp1               server-cert.pem
'#ib_16384_1.dblwr'   ca-key.pem        mysql                server-key.pem
'#innodb_redo'        ca.pem            mysql.ibd            sys
'#innodb_temp'        client-cert.pem   mysql.sock           ttabae
 auto.cnf             client-key.pem    performance_schema   undo_001
 binlog.000001        ib_buffer_pool    private_key.pem      undo_002
 binlog.000002        ibdata1           public_key.pem

여전히 남이 있는 것을 확인할 수있다

 

-v <container mount path> 만 써도 데이터에 접근할 수 있을까 ?

마운트가 잘 된것을 확인할 수 있다.

"Mounts": [
            {
                "Type": "volume",
                "Name": "9b84bae7e7bceb7f90245e182aa55c6bf8af40a8070672a40154fe130c73f29f",
                "Source": "/var/lib/docker/volumes/9b84bae7e7bceb7f90245e182aa55c6bf8af40a8070672a40154fe130c73f29f/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

 

host container에서는 default로 /var/lib/docker/volumn/UUID/_data 폴더가 생기고 이곳에 영구적으로 저장됨

 

docker volumn은 어떻게 지우는걸까 ?

 

일단 volumn조회를 해보자 

docker volume ls

docker rm rm -<volum name>

Q2. 웹데이터 readonly 서비스로 컨테이너에 지원하기

 

mkdir /webdata
cd /webdata/
echo "<h1> YouTUBE SEUNGHAN-LEE</h1>" > index.html
cat index.html

index.html웹페이지를 웹서버를 통해서 고객에게 제공할 수 있도록 volumn마운트를 해보도록하겠다. readonly로

docker run -d --name web -p 80:80 -v /webdata:/usr/share/nginx/html:ro nginx:1.14

 

vi index.html 파일에 들어가서 다른 글씨로 바꾸기만 하면 바로바로 변경되는 것을 확인가능하다.

<h1> youtube:TTABAE SEUNGHAN-LEE</h1>

Q3. 컨테이너끼리 데이터 공유하기

 

df -h :: 디스크 사용량을 모니터링 할 때 사용

 

df.sh

#!bin/bash
mkdir -p /webdata
while true
do
	df -h / > /webdata/index.html
	sleep 10
done

## host 컨테이너 안에서 webdata 라는 디렉토리를 만들고
##10초마다 디스크할당량을 /webdata/index.html에 표현해주겠다

 

dockerfile

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

## df .sh를 ubuntu 에 있는 /bin/df.sh 에 옮기고
## permission 주고 df.sh동작하도록 설정함

 

이제 빌드를 해보겠습니다.

 docker build -t smlinux/df:latest .

 

이렇게 생성된 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

## webdata를 불륨마운트하는이유 10초마다 index.html를 만들어주기떄문에

잘 나온다 !! 성공

728x90