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를 만들어주기떄문에
잘 나온다 !! 성공
'따배도 스터디' 카테고리의 다른 글
9-2 컨테이너간 통신(네트워크)- 실습편 (0) | 2023.04.29 |
---|---|
9-1 컨테이너간 통신(네트워크)- 이론편 (0) | 2023.04.27 |
8-1 Docker Container Storage - 이론편 (0) | 2023.04.25 |
7-2 컨테이너 리소스를 관리해야지 -실습편 (0) | 2023.04.21 |
7-1 컨테이너 리소스를 관리해야지 -이론편 (0) | 2023.04.21 |