- 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 |
댓글