[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 |