SlideShare a Scribd company logo
1 of 18
Download to read offline
Docker Storage
다루고자 하는 것
● AUFS (Advanced multi layered Unification FileSystem)
● AUFS와 Docker
● OveylayFS 등 다른 대안
AUFS
● 리눅스 파일 시스템의 union mount를 구현하기 위해서 시작한 프로젝트
● 2006년 Junjiro Okajima가 개발을 시작했으며 UnionFS를 완전히 새로 만듦
● 안정성과 성능을 향상시키는 이외 writable branch balancing와 같은 새로운
기능도 포함하고 있음
● 주류 리눅스로의 통합이 거부됨
○ 코드는 빽빽하고 읽기 어려우며 주석이 안 되어 있다는 이유로 비판을 받음 (대신
OverlayFS가 리눅스 커널에 통합)
● Docker Image Layer의 기본 Filesystem으로 이용되고 있고 이로 인해 많은
곳에서 AUFS를 이용하고 있음
Union Mount
● 여러 개의 폴더를 동시에 특정 폴더에 Mount하는 동작
Mount
# mount -t aufs -o br=/layer_rw=rw:/layer_01=ro+wh:/layer_02=ro+wh:/layer_03=ro+wh none /mnt
br(Branch)에 Union Mount를
위한 폴더를 나열함
/layer_rw는 Root Branch
/layer_rw 폴더는 RW Branch
RO Branch
/mnt 폴더에 Branch
들이 Union Mount 됨Root 뿐만 아니라 이
폴더의 Whiteout
파일도 참조하겠다는
옵션
*Whiteout - AUFS에서는 파일의 삭제를 나타내기 위한 파일
Branch
● AUFS에서는 스택을 이루는 각각의 스택을 브랜치(branch)라고 부름
● 스택을 이루는 폴더는 하나의 마운트 포인터로 묶일 수 있어야 하므로 반드시
같은 리눅스 호스트에 존재해야 함
Read, Write
● Read
○ 동일한 경로에 동일한 파일 이름이 있는
경우 AUFS Mount가 된 폴더 내에서는
오직 Branch의 가장 마지막에 있는
폴더의 파일만 볼 수 있음
● Write
○ COW(Copy on Write)방식을 이용함
○ /mnt 폴더에서 파일을 쓰는 경우 써진
파일은 AUFS의 RW Branch 폴더에
그대로 저장됨
Remove File
● RW Branch에 .wh.{filename}
Whiteout 파일을 생성하여 Mount가
된 폴더 내에서는 파일이
안보이지만 원본은 유지됨
● RO Branch 폴더 안에 있는
Whiteout 파일의 역할도 나타내고
있음
Remove All Files in Folder
● .wh..wh..opq라는 특수한 Whiteout
파일을 이용함
○ Branch의 특정 폴더 내 .wh..wh..opq
파일이 있으면 하위 Branch의 해당 폴더
내 모든 파일을 폴더 내에서 볼 수 없음
● 다시 dir 폴더를 생성하는 경우
layer_rw Branch의 /dir 폴더 안
.wh..wh..opq 파일 생성을 통해
처리함
Renaming Directories 문제
● 폴더에 대해 rename(2)를 호출하는 것은 AUFS에 대해 완벽하게 지원되지는
않음
○ 원래 위치와 목적지 위치가 같은 AUFS 레이어에 있더라도 (심지어 아무런 자식 파일을 갖지
않아도) EXDEV(cross-device link not permitted)를 반환함
○ 애플리케이션은 EXDEV에 대한 Copy and Unlink 으로 대처할 수 있도록 설계해야 함
AUFS와 Docker
● AUFS는 도커를 위한 좋은 기능을 제공함
○ 빠른 컨테이너 시작 시간
○ 효율적인 스토리지 사용
○ 효율적인 메모리 사용
성능
● AUFS는 여러 개의 컨테이너 간 이미지를 효과적으로 공유함
○ 곧 빠른 컨테이너 시작 시간과 최소한의 저장공간을 사용하게 함
○ 이미지와 컨테이너 간 파일을 공유하는 기본적인 원리 - 시스템 페이지 캐시
● 첫 쓰기 작업에 대해 적지 않은 지연(Latency)이 발생함
○ 컨테이너가 맨 처음 어떤 파일에 쓰기를 시작하면 그 파일은 컨테이너 레이어에 위치되어야
하며 복사해야 함
○ 이런 파일이 이미지의 매우 하단 레이어에 있고 그 파일이 매우 클 때 이 지연은 더 커지고
복잡해(compounded)짐
● 성능 최적화
○ SSD를 사용하라 (응…?)
○ Data Volume은 예측 가능하고 최상의 성능을 제공함 - AUFS를 우회하며 thin provisioning과
CoW(Copy-on-Write)에 의한 어떠한 잠재적 오버헤드를 발생시키지 않기 때문임
Docker Image Layer (Concept)
# mount -t aufs -o
br=/container_rw=rw:/ubuntu_base01=ro+wh:/ubuntu_base02=ro+wh:/ubuntu_base03=ro+wh
none /container_root
Docker Image Layer
● 이미지를 구성하는 스택 정보 - /var/lib/docker/aufs/layers
● 각 스택이 저장하고 있는 실제 데이터 - /var/lib/docker/aufs/diff
OverlayFS
● UnionFS 계열
● AUFS와의 차이점
○ AUFS 보다 단순한 디자인
○ 리눅스 커널 3.18부터 정식으로 지원
○ 좀 더 빠름
● 최근 인기 상승 중이나 나온지 얼마 되지 않아 안정성이 떨어진다는 점이
문제임
○ 현장에서 사용 할 때는 주의해야 함
OverlayFS의 구조
● 2 Layers
○ 여러 개의 layer가 스택을 이루는 AUFS와는 달리 단지 2개의 layer만 가지고 있음
■ lowerdir - 읽기 전용의 image layer
■ upperdir - container layer. Image layer로부터 만들어지며 변경되는 정보가 여기에
저장됨
● Multi-Layer Image 구성 불가
○ 각 image layer마다 /var/lib/docker/overlay 폴더 밑에 자신만의 폴더를 가지는 것으로 이
문제를 해결함
기타 Docker 지원 Storage Driver
● 기본적으로 CoW를 지원하면 됨
● Device mapper
○ loop-lvm
○ direct-lvm
● CoW 지원 FS
○ zfs
○ btrfs
참고자료
1. https://www.joinc.co.kr/w/man/12/docker/aufs
2. https://www.joinc.co.kr/w/man/12/docker/storage
3. https://ssup2.github.io/theory_analysis/Union_Mount_AUFS_Docker_Image_
Layer/
4. http://blog.naver.com/PostView.nhn?blogId=alice_k106&logNo=22083943630
7&parentCategoryNo=&categoryNo=7&viewDate=&isShowPopularPosts=true
&from=search

More Related Content

Similar to Docker storage

Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013Jude Kim
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013Jude Kim
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1Kay Kim
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
Docker presentation
Docker presentationDocker presentation
Docker presentationJongwon
 
User Story :: Cloudike with KT UCloud Biz
User Story :: Cloudike with KT UCloud BizUser Story :: Cloudike with KT UCloud Biz
User Story :: Cloudike with KT UCloud BizNalee Jang
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표OpenStack Korea Community
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infraJe Hun Kim
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-uploadDong-Hwa jung
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)Ji-Woong Choi
 

Similar to Docker storage (20)

Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
TurboRepo
TurboRepoTurboRepo
TurboRepo
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
Docker presentation
Docker presentationDocker presentation
Docker presentation
 
User Story :: Cloudike with KT UCloud Biz
User Story :: Cloudike with KT UCloud BizUser Story :: Cloudike with KT UCloud Biz
User Story :: Cloudike with KT UCloud Biz
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infra
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 

Docker storage

  • 2. 다루고자 하는 것 ● AUFS (Advanced multi layered Unification FileSystem) ● AUFS와 Docker ● OveylayFS 등 다른 대안
  • 3. AUFS ● 리눅스 파일 시스템의 union mount를 구현하기 위해서 시작한 프로젝트 ● 2006년 Junjiro Okajima가 개발을 시작했으며 UnionFS를 완전히 새로 만듦 ● 안정성과 성능을 향상시키는 이외 writable branch balancing와 같은 새로운 기능도 포함하고 있음 ● 주류 리눅스로의 통합이 거부됨 ○ 코드는 빽빽하고 읽기 어려우며 주석이 안 되어 있다는 이유로 비판을 받음 (대신 OverlayFS가 리눅스 커널에 통합) ● Docker Image Layer의 기본 Filesystem으로 이용되고 있고 이로 인해 많은 곳에서 AUFS를 이용하고 있음
  • 4. Union Mount ● 여러 개의 폴더를 동시에 특정 폴더에 Mount하는 동작
  • 5. Mount # mount -t aufs -o br=/layer_rw=rw:/layer_01=ro+wh:/layer_02=ro+wh:/layer_03=ro+wh none /mnt br(Branch)에 Union Mount를 위한 폴더를 나열함 /layer_rw는 Root Branch /layer_rw 폴더는 RW Branch RO Branch /mnt 폴더에 Branch 들이 Union Mount 됨Root 뿐만 아니라 이 폴더의 Whiteout 파일도 참조하겠다는 옵션 *Whiteout - AUFS에서는 파일의 삭제를 나타내기 위한 파일
  • 6. Branch ● AUFS에서는 스택을 이루는 각각의 스택을 브랜치(branch)라고 부름 ● 스택을 이루는 폴더는 하나의 마운트 포인터로 묶일 수 있어야 하므로 반드시 같은 리눅스 호스트에 존재해야 함
  • 7. Read, Write ● Read ○ 동일한 경로에 동일한 파일 이름이 있는 경우 AUFS Mount가 된 폴더 내에서는 오직 Branch의 가장 마지막에 있는 폴더의 파일만 볼 수 있음 ● Write ○ COW(Copy on Write)방식을 이용함 ○ /mnt 폴더에서 파일을 쓰는 경우 써진 파일은 AUFS의 RW Branch 폴더에 그대로 저장됨
  • 8. Remove File ● RW Branch에 .wh.{filename} Whiteout 파일을 생성하여 Mount가 된 폴더 내에서는 파일이 안보이지만 원본은 유지됨 ● RO Branch 폴더 안에 있는 Whiteout 파일의 역할도 나타내고 있음
  • 9. Remove All Files in Folder ● .wh..wh..opq라는 특수한 Whiteout 파일을 이용함 ○ Branch의 특정 폴더 내 .wh..wh..opq 파일이 있으면 하위 Branch의 해당 폴더 내 모든 파일을 폴더 내에서 볼 수 없음 ● 다시 dir 폴더를 생성하는 경우 layer_rw Branch의 /dir 폴더 안 .wh..wh..opq 파일 생성을 통해 처리함
  • 10. Renaming Directories 문제 ● 폴더에 대해 rename(2)를 호출하는 것은 AUFS에 대해 완벽하게 지원되지는 않음 ○ 원래 위치와 목적지 위치가 같은 AUFS 레이어에 있더라도 (심지어 아무런 자식 파일을 갖지 않아도) EXDEV(cross-device link not permitted)를 반환함 ○ 애플리케이션은 EXDEV에 대한 Copy and Unlink 으로 대처할 수 있도록 설계해야 함
  • 11. AUFS와 Docker ● AUFS는 도커를 위한 좋은 기능을 제공함 ○ 빠른 컨테이너 시작 시간 ○ 효율적인 스토리지 사용 ○ 효율적인 메모리 사용
  • 12. 성능 ● AUFS는 여러 개의 컨테이너 간 이미지를 효과적으로 공유함 ○ 곧 빠른 컨테이너 시작 시간과 최소한의 저장공간을 사용하게 함 ○ 이미지와 컨테이너 간 파일을 공유하는 기본적인 원리 - 시스템 페이지 캐시 ● 첫 쓰기 작업에 대해 적지 않은 지연(Latency)이 발생함 ○ 컨테이너가 맨 처음 어떤 파일에 쓰기를 시작하면 그 파일은 컨테이너 레이어에 위치되어야 하며 복사해야 함 ○ 이런 파일이 이미지의 매우 하단 레이어에 있고 그 파일이 매우 클 때 이 지연은 더 커지고 복잡해(compounded)짐 ● 성능 최적화 ○ SSD를 사용하라 (응…?) ○ Data Volume은 예측 가능하고 최상의 성능을 제공함 - AUFS를 우회하며 thin provisioning과 CoW(Copy-on-Write)에 의한 어떠한 잠재적 오버헤드를 발생시키지 않기 때문임
  • 13. Docker Image Layer (Concept) # mount -t aufs -o br=/container_rw=rw:/ubuntu_base01=ro+wh:/ubuntu_base02=ro+wh:/ubuntu_base03=ro+wh none /container_root
  • 14. Docker Image Layer ● 이미지를 구성하는 스택 정보 - /var/lib/docker/aufs/layers ● 각 스택이 저장하고 있는 실제 데이터 - /var/lib/docker/aufs/diff
  • 15. OverlayFS ● UnionFS 계열 ● AUFS와의 차이점 ○ AUFS 보다 단순한 디자인 ○ 리눅스 커널 3.18부터 정식으로 지원 ○ 좀 더 빠름 ● 최근 인기 상승 중이나 나온지 얼마 되지 않아 안정성이 떨어진다는 점이 문제임 ○ 현장에서 사용 할 때는 주의해야 함
  • 16. OverlayFS의 구조 ● 2 Layers ○ 여러 개의 layer가 스택을 이루는 AUFS와는 달리 단지 2개의 layer만 가지고 있음 ■ lowerdir - 읽기 전용의 image layer ■ upperdir - container layer. Image layer로부터 만들어지며 변경되는 정보가 여기에 저장됨 ● Multi-Layer Image 구성 불가 ○ 각 image layer마다 /var/lib/docker/overlay 폴더 밑에 자신만의 폴더를 가지는 것으로 이 문제를 해결함
  • 17. 기타 Docker 지원 Storage Driver ● 기본적으로 CoW를 지원하면 됨 ● Device mapper ○ loop-lvm ○ direct-lvm ● CoW 지원 FS ○ zfs ○ btrfs
  • 18. 참고자료 1. https://www.joinc.co.kr/w/man/12/docker/aufs 2. https://www.joinc.co.kr/w/man/12/docker/storage 3. https://ssup2.github.io/theory_analysis/Union_Mount_AUFS_Docker_Image_ Layer/ 4. http://blog.naver.com/PostView.nhn?blogId=alice_k106&logNo=22083943630 7&parentCategoryNo=&categoryNo=7&viewDate=&isShowPopularPosts=true &from=search