본문 바로가기
Docker/이론

[Docker] 8.Container Storage

by Haengsin 2021. 9. 23.

[Docker Container Volume]

 

- 컨테이너 이미지는 ReadOnly. 즉, 수정할 수 없고 새로운 내용을 집어넣을 수 없다.

- Docker run 후 컨테이너에 추가되는 데이터들은 이미지 Layer에 추가되는 것이 아니라 별도의 RW Layer에 저장

 

※ Union File System(=overlay)

: Docker가 가지고 있는 Layer를 관리해주는 기술.

- 컨테이너 이미지의 ReadOnly Layer와 RW Layer의 변경사항을 마치 하나인 것처럼 보여주는 기술.

 

MySQL 컨테이너를 잘 운영 중이었다고 가정하자. 실수로 docker rm 명령어를 입력할 경우, 이미지의 ReadOnly Layer와 추가된 데이터의 RW Layer가 삭제되고 DB데이터들은 복원할 수 없다.

 

 

[데이터 보존] "컨테이너가 만들어주는 데이터를 영구적 보존"

 

1. Volume Mount

MySQL 데이터베이스 컨테이너라면, RW Layer(/var/lib/mysql/) 아래에 수 많은 데이터들이 쌓이게 될 것이다.  

- Docker Host에 특정 저장공간을 하나 만든다. (디렉토리 혹은 디스크)

- 컨테이너가 만들어주는 데이터를 Docker Host의 저장공간에 보존하도록 만든다.

 

(1) Docker Host에 /dbdata 디렉토리를 생성 

$ mkdir /dbdata

 

(2) Docker run 명령어 사용 시 -v 옵션을 이용하여 Docker Host의 저장공간 경로:컨테이너에서의 데이터 경로 를 입력.

$ docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest

 

※ volume 옵션 사용법과 예시

-v <host path>:<container mount path>

$ docker run -d -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest

-v <host path>:<container mount path>:<read write mode>

$ docker run -d -v /webdata:/var/www/html:ro httpd:latest

-v <container mount path>

$ docker run -d -v /var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest

 

 

[컨테이너 간의 데이터 공유] "컨테이너 끼리 데이터 공유하기"

- Host의 저장경로(/webdata)를 여러 컨테이너에 volume mount 하여 사용 가능하다.

- 순서 주의하자.

$ docker run -v /webdata:/webdata -d --name df smlinux/df:latest

$ docker run -d -v /webdata:/usr/share/nginx/html:ro -d ubuntu:latest

 

 

 

 

 

※ 이성미, [따배도] 도커 시리즈 ,TTABAE-LEARN, https://www.youtube.com/watch?v=JcgrQnkIePE, 2021-09-23

'Docker > 이론' 카테고리의 다른 글

Docker-Compose 설치  (0) 2021.11.18
[Docker] 10. Docker-Compose (from build to operation)  (0) 2021.11.18
[Docker] 7.Container 리소스 관리  (0) 2021.09.07
[Docker] 5.Container 운영  (0) 2021.08.24
[Docker] 4.Container Registry  (0) 2021.08.12