7-1. Docker Container Storage

몽자비루 ㅣ 2024. 5. 1. 12:13

  1. 컨테이너 볼륨
    1. 컨테이너 이미지는 read only (수정 X)
    2. 컨테이너에 추가되는 데이터들은 별도의 RW 레이어에 저장
      • 컨테이너 이미지를 실행하여 하나의 프로세스 상태가 되어도 여전히 read only 상태.
      • 단, read/write 레이어가 만들어진 뒤 연결되고, 모든 데이터가 rw 레이어에 쌓임.
      • 유니온 파일 시스템 : readonly 레이어에 readwrite 변경사항이 하나인것처럼 보여짐 (=overlay)
      • docker rm 명령어로 컨테이너 삭제 시, ro 와 rw 데이터는 모두 삭제됨 (복원 X)
      • 위 케이스를 방지하기ㅏ 위해 컨테이너 볼륨, 데이터 보존 기술이 중요함.
  2. 데이터 보존 방법
    1. 컨테이너가 만들어주는 데이터 영구적 보존
      • mysql 컨테이너라는 가정 하에, /var/lib/mysql 안에 수많은 rw 데이터들이 쌓임 (read/write layer)
      • 이 상황에서 영구적으로 보존하기 위해서는 Docker Host 에 특정 저장소 공간을 만들어야 함.
      • 컨테이너가 만들어주는 데이터를 해당 특정 저장소 공간에 저장함 (/dbdata)
    2.  컨테이너 데이터 보존 방법.
      • docker run -d --name db
      • -v dbdate:/var/lib/mysql
        • -v(옵션) 호스트의 디렉토리 : 컨테이너 디렉토리
          > 컨테이너에서 만들어진 데이터를 실제 호스트 디렉토리 안에 쌓이게됨
        • 이것을 volume mount 라고 말함.
      • -e MYSQL_ALLOW_EMPTY_PASSWORD=pass
      • mysql:latest
    3. volume 옵션 사용(-v)
      • -v <host path>:<container mount path>
        docker run -d -v /dbdata:/var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest
        • /var/lib/mysql 의 내용을 실제 호스트 /dbdata 에 기록되도록 만듬
      • -v <host path>:<container mount path>:<read write mode>
        docker run -d -v /webdata:/var/www/html:ro httpd:latest
        • ro : read only, host에 있는 data를 수정하지 못하게 함.
        • ro 생략 시, read, write 모두 가능.
      • -v <container mount path>
        docker run -d -v /var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest
        • host path 가 생력된 경우, UUID 하단 data directory를 만들어 알아사 자동 마운트함.
  3. 컨테이너간의 데이터 공유
    1. 컨테이너끼리 데이터 공유하기
      • docker run -v /webdata:/webdata -d --name df smlinux/df:latest
      • docker run -d -v /webdata:/usr/share/nginx/html:ro ubuntu:latest
        • web content generator 에 쌓이는 데이터를 Docker Host 의 /webdata 에 저장
        • web server 컨테이너가 데이터를 사용해 웹페이지를 그려내고 사용자는 webserver 컨테이너에 접근하여 웹 페이지 이용
        • 볼륨마운트를 통해 컨테이너 간의 데이터 공유가 가능함.