rueki

도커 컨테이너 Storage 본문

쿠버네티스, 도커

도커 컨테이너 Storage

륵기 2021. 11. 19. 16:22
728x90
반응형

컨테이너 내의 데이터를 영구적으로 보존하기 위해서 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의 파일을 수정하면 수정된 내용을 볼 수 있을 것이다.


 

728x90
반응형

'쿠버네티스, 도커' 카테고리의 다른 글

docker compose 실행해보기  (0) 2021.11.22
도커 컨테이너 통신  (0) 2021.11.21
Kubernetes namespace  (0) 2021.11.19
도커 컨테이너 리소스 관리  (0) 2021.11.18
도커 컨테이너 실행, 관리 명령어  (0) 2021.11.17
Comments