rueki
도커 컨테이너 Storage 본문
컨테이너 내의 데이터를 영구적으로 보존하기 위해서 host 내에 하나의 저장소를 만들어주는데 volume mount를 통해서 할 수가 있다.
그러면 컨테이너를 혹시나 삭제하더라도 데이터를 영구적으로 보관할 수 있는 것이다.
volume 옵션은 -v를 통해서 할 수가 있다. read wirte mode는 생략 가능하며 default가 read write이다.
docker run -d -v '<host path>:<container mount path>:<read write mode>'
실습으로 컨테이너의 mysql 데이터를 영구적으로 보관할 수 있는지 해보자.
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
-e 옵션에 root 계정 패스워드를 설정하고 run을 진행해야한다.
-v 옵션을 보면 host의 dbdata 경로와 컨테이너의 /var/lib/mysql 경로를 connect 시켜주었다.
이제 mysql 컨테이너에서 예제 데이터 베이스를 생성해보자.

이렇게 만든 db관련 정보들은 현재 컨테이너의 /var/lib/mysql/에 존재하는데 host의 /dbdata에도 같이 존재하게 된다.
mysql 컨테이너를 벗어나서 host에 /dbdata를 한번 가보자.

뭔지는 모르겠지만 mysql관련된 파일들이 여러개가 있는 것을 볼 수가 있다. 우리가 생성한 temp라는 데이터베이스 이름도 보인다.
우리가 확인하고 싶은 것은 영구 보존이기에 db 컨테이너를 삭제하고도 데이터가 존재하는지 확인을 해보자.
docker rm -f db

삭제가 되어도 계속해서 남아있는 것을 볼 수 있었다.
그럼 만약에 run 할 때, host path를 명시 안하면 어떻게 될까?
docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
위의 명령어를 입력해서 생성하고 mount 정보를 확인해보자.

inspect 명령어를 통해서 mount 관련 정보를 봤더니 destination은 우리가 설정한 container path가 나오고 source에 host path가 나오는 것을 볼 수 있었다.
컨테이너는 삭제되었는데 volume 정보도 필요 없게 된다면 아래의 명령어로 삭제 할 수 있다.
docker volume rm "uuid"
이번에 해볼 것은 host에 있는 데이터를 컨테이너에 mount 해서 배포까지는 아니지만 서비스를 제공해보겠다.
index.html을 예제로 만들어 보자.
mkdir /webdata
echo "<h1>hello world</h1>" > index.html

docker run -d --name web -p 80:80 -v /webdata:/usr/share/nginx/html:ro nginx:1.14
여기서는 파일을 read only 타입으로 volumn mount를 하였다.
80포트로 포트포워딩을 했으니 우리가 만든 hello world 파일이 제대로 열리는지 확인해보면 아래처럼 나온다.
host의 파일을 수정하면 수정된 내용을 볼 수 있을 것이다.

'쿠버네티스, 도커' 카테고리의 다른 글
docker compose 실행해보기 (0) | 2021.11.22 |
---|---|
도커 컨테이너 통신 (0) | 2021.11.21 |
Kubernetes namespace (0) | 2021.11.19 |
도커 컨테이너 리소스 관리 (0) | 2021.11.18 |
도커 컨테이너 실행, 관리 명령어 (0) | 2021.11.17 |