<이론>
- 주제
- 컨테이너 볼륨
- 컨테이너에서의 영구적 데이터 보존법
- 컨테이너간의 데이터 공유법
Docker 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장할 수 있도록 Docker는 두가지 옵션을 제공하는데 첫번째는 Docker 볼륨(volume), 두번째는 바인드 마운트(bind mount)입니다.
컨테이너 볼륨
- 저장되는 파일의 속성
- 도커호스트 안에 있는 컨테이너 이미지 - ReadOnly(RO)
- 컨테이너 - ReadWrite(RW)
- 실행하면서의 변화
- 컨테이너 이미지 → 컨테이너
- RO Layer 위에 RW Layer 추가
- 이 자체로서의 문제점 docker container rm 하면 RW 레이어에 쌓인 데이터가 다 사라짐 (∵ 유니온 파일 시스템) ⇒ 데이터에 대한 영구적 보존 기술이 필요
컨테이너 데이터의 영구적인 보존법
- Volumn mount(볼륨 마운트) ”볼륨을 컨테이너에 마운트한다.” 도커 호스트에 특정 저장소 공간(디렉토리/디스크)을 하나 더 만들어서 컨테이너에 쌓이는 데이터가 한번 더 저장되도록 하는 것 (컨테이너 데이터를 호스트공간에도 생성되도록 해달라는 것)
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=pass mysql:latest
- 효과 컨테이너를 삭제해도 데이터는 여전히 디스크에 있으니까 변경없이 동일한 서비스 가지고도 데이터 유지가 가능
- docker run + volume 옵션 사용 ”호스트 데이터에다가 컨테이너데이터를 넣는다”
- -v <host path>:<container mount path>:<read write mode>
- RW 모드 생략 시, 기본으로 RW으로 설정됨.
- 컨테이너의 데이터를 도커호스트에다가 넣을 때, 도커호스트 데이터를 수정하게 하는 건 꼭 필요한 거 아닌 이상 ㄴㄴ ( ∵ 컨테이너에 보안이슈 → 해커가 컨테이너에 악성 파일 심음 → 디스크 손상 가능) ⇒ 대안 : ro(readonly) 옵션을 준다. ⇒ 호스트 데이터에 있는 데이터를 보호하면서 마운트 시키는 것
- -v <container mount path>컨테이너 디렉토리만 넣으면 호스트의 var/lib/docker/volums/uuid명/data 에다가 즉, 임의의 디렉토리 만들어서 알아서 저장시켜준다.
- -v <host path>:<container mount path>:<read write mode>
- ex)
- 컨테이너의 /var/lib/mysql에다가 host의 db데이터를 싣는다
docker run -d -v /dbdata:/var/lib/mysql -e MYSQL..PASSWORD=pass mysql
- 호스트의 webdata는 html로 볼륨마운트가 돼서 호스트의 웹데이터에있는문서들이 컨테이너에서 읽기전용으로만 서비스
-
docker run -d -v /var/lib/mysql -e MYSQL..PASSWORD=pass mysql
- 컨테이너의 /var/lib/mysql에다가 host의 db데이터를 싣는다
컨테이너간의 데이터 공유법
여러 개의 컨테이너가 하나의 볼륨에 접근 가능 ⇒ 컨테이너 간 데이터 공유 가능 즉, 어떤 볼륨에 데이터를 저장해두고 여러 컨테이너에 마운트만 해주면 해당 데이터를 모든 컨테이너에서 접근 가능함.
- A<->B PROCESS web content generator가 index.html를 만들어서 호스트에 있는 디렉토리 webdata에 넣어주면 webserver가 index.html를 가져다가 80포트로 열어서 웹컨텐츠로 서비스 해주는 과정 만약 고객이 웹서버에 접속해서 문서 요청 시, 웹서버는 웹서버의 데이터에 있는 걸로 응답해서 송출해주는 식
-
web content generator 역할하는 A 컨테이너가 만들어지면서 webdata에다가 데이터를 쌓는 볼륨마운트 옵션도 넣음 → index.html을 만듬 → 근데 실제로 저장은 디스크(호스트) 안에 됨docker run -v /webdata:/webdata -d --name A smlinux/A
-
또 다른 컨테이너 B가 만들어지고 앞 단계에서 만든 webdata를 똑같이 사용docker run -v /webdata:/usr/share/nginx/html:ro --name B ubuntu
-
이런식으로 볼륨마운트를 통한 데이터 공유를 통해, 각각 rw,ro 성질 부여해서 누군가는 만들어내고 누군가는 서비스하는 식
<실습>
- mysql db data 영구 보존하기
- 웹데이터 readonly 서비스로 지원하기
- 컨테이너간 데이터 공유하기
mysql db data 영구 보존하기
웹데이터 readonly 서비스로 지원하기
컨테이너간 데이터 공유하기
'DEVOPS > Docker' 카테고리의 다른 글
[따배도] 10장 - 빌드에서 운영까지 (0) | 2022.06.01 |
---|---|
[따배도] 9장 - 컨테이너간 통신(네트워크) (0) | 2022.06.01 |
[따배도] 7강 - 컨테이너 리소스 관리 (0) | 2022.05.12 |
[따배도] 6강 - 컨테이너 사용하기 (0) | 2022.05.12 |
[따배도] 5강 - 컨테이너 Registry (0) | 2022.05.12 |
Uploaded by Notion2Tistory v1.1.0