SlideShare a Scribd company logo
도커 이미지 레이어 구조
1
컨테이너 이미지
2
 컨테이너 이미지
• 컨테이너 이미지는 컨테이너를 실행하기 위한 읽기전용 파일(템플릿)
※ 도커는 이미지 관리, 컨테이너 실행, 컨테이너 상태관리를 쉽게 도와주는 도구
3
container
image
docker
Docker run
Read file
 컨테이너 이미지
• 컨테이너 이미지는 OCI Image Spec을 준수한다.
• OCI Image Spec을 준수하기 때문에 도커가 아닌 다른 도구도 이미지를 사용할 수 있다.
4
참고자료: https://github.com/opencontainers/image-spec/blob/main/manifest.md
docker
container
conatinerd
...
image
컨테이너 실행
 컨테이너 이미지
• Docker는 컨테이너 사용자가 쉽게 컨테이너 이미지를 만들기 위해 방법(Dockerfile)을 제공한다.
5
docker image
컨테이너 이미지 생성
(docker build)
dockerfile
Docker 이미지
6
 Layer
• Docker 이미지는 layer와 메타정보로 구성된다.
7
참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
 Layer
• busybox docker 이미지 다운로드
8
$ docker pull busybox:1.34.1
• docker inspect를 이용하여 layer확인
$ docker inspect busybox:1.34.1
 Layer
9
• busybox docker 이미지는 한개의 layer로 구성된다.
busybox docker image
sha256:
64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e
359ee0e27104e2d3ed
 Layer
10
• layer 정보는 /var/lib/image/<storage-driver>/layerdb/sha256 디렉터리에 저장된다.
※ docker는 default로 overlay2사용
 Layer
11
• layer 데이터는 /var/lib/<storage-driver>에 저장된다.
• layer 데이터를 확인하기 위해서 /var/lib/image/<storage-driver>/layerdb/sha256/<layer_id>/cache-id를 확인한다.
 Layer
12
• 정리하면 docker 이미지는 layer로 구성되고
layer정보는 /var/lib/docker/image/<storage-driver>/layerdb/sha256,
layer데이터는 /var/lib/docker/<storage-driver>에 저장된다.
busybox docker image
sha256:
64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e
359ee0e27104e2d3ed
/var/lib/docker/image/<storage-driver>/layer/dbsha256
sha256:
64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e
359ee0e27104e2d3ed
/var/lib/docker/<storage-driver>
sha256: xxxx
Read/Writeable Layer
13
 Read/Writeable Layer
• layer는 읽기와 쓰기 속성이 있다.
• 이미지 layer는 읽기속성만 부여된다.
14
참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
 Read/Writeable Layer
• 컨테이너가 생성될 때 읽기/쓰기 속성 layer가 생성되고 container Layer라고 부른다.
• 컨테이너에서 작업한 데이터는 container layer에 저장된다.
• container layer는 컨테이너가 사라지면 삭제된다.
15
참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
 Read/Writeable Layer
• 컨테이너 실행전 layer데이터 확인
16
$ docker run --rm -it busybox:1.34.1 /bin/sh
• 컨테이너 실행
• 다시 layer데이터를 확인하면 새로운 layer가 생성된 것을 확인할 수 있다.
 Read/Writeable Layer
• 컨테이너 merged layer위치 확인
17
$ docker ps
$ docker insepct <container-id>
• merged layer에서 helloworld.txt파일 작성 후, 컨테이너 쉘에서 파일생성 확인
$ cd <merged-layer>
$ vi hello.txt
(container)# ls
 Read/Writeable Layer
• 컨테이너를 삭제하면 컨테이너 레이어가 자동삭제된다.
• 결국, 컨테이너에서 작업한 파일, 디렉터리는 없어지게 된다.
18
Union file system
19
 Union file system
• 여러 개의 파일 시스템을 하나의 파일 시스템으로 합치는 시스템
20
Image Layer
Container Layer
file system
docker container
참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
 Union file system
• 이미지 layer는 lowerdir, container layer는 upperdir에 위치한다.
• 최종적으로 upperdir, lowerdir 데이터가 merged layer에 합쳐지고 컨테이너에 마운트된다.
• upperdir, lowerdir이 같은 데이터를 작업하면 lowerdir이 우선순위를 갖는다.
21
참고자료: https://docs.docker.com/storage/storagedriver/overlayfs-driver/#how-the-overlay-driver-works
참고자료
22
 참고자료
• docker layer: https://velog.io/@latte_h/Docker-Image-
%EC%9D%B4%ED%95%B4#%EC%8B%A4%EC%A0%9C%EB%A0%88%EC%9D%B4%EC%96%B4-%EB%82%B4%EC%9A%A9-
%ED%99%95%EC%9D%B8
• docker storage-driver 공식문서: https://docs.docker.com/storage/storagedriver/overlayfs-driver/#configure-docker-with-the-
overlay-or-overlay2-storage-driver
• union filesystem: https://blog.naver.com/alice_k106/221530340759
• docker layer: https://windsock.io/explaining-docker-image-ids
• docker layer: https://learnk8s.io/blog/smaller-docker-images
23

More Related Content

What's hot

XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
Daegwon Kim
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
Dronix
 
Introduce Docker
Introduce DockerIntroduce Docker
Introduce Docker
Yongbok Kim
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
Daegwon Kim
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS Introduction
Remotty
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
Yongbok Kim
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
Derrick Hwechul Cho
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
Nomad Connection, Inc.
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
pyrasis
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
Wonchang Song
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
Hosang Jeon
 
도커를 이용한 파이썬 모듈 배포하기
도커를 이용한 파이썬 모듈 배포하기도커를 이용한 파이썬 모듈 배포하기
도커를 이용한 파이썬 모듈 배포하기
JunSeok Seo
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
Lee Ji Eun
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Daegwon Kim
 
Docker기반 분산 플랫폼
Docker기반 분산 플랫폼Docker기반 분산 플랫폼
Docker기반 분산 플랫폼
SeongHyun Jeong
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XpressEngine
 

What's hot (20)

XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
Introduce Docker
Introduce DockerIntroduce Docker
Introduce Docker
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS Introduction
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
도커를 이용한 파이썬 모듈 배포하기
도커를 이용한 파이썬 모듈 배포하기도커를 이용한 파이썬 모듈 배포하기
도커를 이용한 파이썬 모듈 배포하기
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
 
Docker기반 분산 플랫폼
Docker기반 분산 플랫폼Docker기반 분산 플랫폼
Docker기반 분산 플랫폼
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
 

Similar to 도커 이미지 레이어 구조

Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Sangcheol Hwang
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
Open Source Consulting
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
DEVELOPER.NET
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
NAVER D2
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
TIMEGATE
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
Sang Don Kim
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
Ji-Woong Choi
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
LOGISPOT
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
병준 김
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
Ji-Woong Choi
 
Docker Container
Docker ContainerDocker Container
Docker Container
Seung-Hoon Baek
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
Amazon Web Services Korea
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
용호 최
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
Sumin Byeon
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
Amazon Web Services Korea
 
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
Amazon Web Services Korea
 

Similar to 도커 이미지 레이어 구조 (20)

Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
AWS Elastic Beanstalk기반 Docker 콘테이너 배포를 통한 마이크로서비스 구축
 
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
Amazon EC2 Container Service 자세히 보기 - 김상필 (AWS 솔루션즈 아키텍트)
 

More from choi sungwook

테라폼스터디5주차 1편
테라폼스터디5주차 1편테라폼스터디5주차 1편
테라폼스터디5주차 1편
choi sungwook
 
컨테이너와 도커 이해
컨테이너와 도커 이해컨테이너와 도커 이해
컨테이너와 도커 이해
choi sungwook
 
kustomize 빠르게 시작하기
kustomize 빠르게 시작하기kustomize 빠르게 시작하기
kustomize 빠르게 시작하기
choi sungwook
 
entrypoint 오버라이딩
entrypoint 오버라이딩entrypoint 오버라이딩
entrypoint 오버라이딩
choi sungwook
 
젠킨스 컨셉
젠킨스 컨셉젠킨스 컨셉
젠킨스 컨셉
choi sungwook
 
System Manager를 이용한 EC2 원격쉘 접속
System Manager를 이용한 EC2 원격쉘 접속System Manager를 이용한 EC2 원격쉘 접속
System Manager를 이용한 EC2 원격쉘 접속
choi sungwook
 
aws profile관리
aws profile관리aws profile관리
aws profile관리
choi sungwook
 
nginx 입문 공부자료
nginx 입문 공부자료nginx 입문 공부자료
nginx 입문 공부자료
choi sungwook
 
nginx 504 timeout오류 해결
nginx 504 timeout오류 해결nginx 504 timeout오류 해결
nginx 504 timeout오류 해결
choi sungwook
 
AWS 다른계정 리소스 사용방법
AWS 다른계정 리소스 사용방법AWS 다른계정 리소스 사용방법
AWS 다른계정 리소스 사용방법
choi sungwook
 
helm 입문
helm 입문helm 입문
helm 입문
choi sungwook
 
Prometheus 원리와 예제
Prometheus 원리와 예제Prometheus 원리와 예제
Prometheus 원리와 예제
choi sungwook
 
쿠버네티스 멀티 클러스터 관리
쿠버네티스 멀티 클러스터 관리쿠버네티스 멀티 클러스터 관리
쿠버네티스 멀티 클러스터 관리
choi sungwook
 
EC2 기타비용
EC2 기타비용EC2 기타비용
EC2 기타비용
choi sungwook
 
스프링부트 JPA와 mariadb 도커 컨테이너 연동
스프링부트 JPA와 mariadb 도커 컨테이너 연동스프링부트 JPA와 mariadb 도커 컨테이너 연동
스프링부트 JPA와 mariadb 도커 컨테이너 연동
choi sungwook
 
윈도우에서 도커 설치
윈도우에서 도커 설치윈도우에서 도커 설치
윈도우에서 도커 설치
choi sungwook
 
onpremise환경에서 kubespray설치
onpremise환경에서 kubespray설치onpremise환경에서 kubespray설치
onpremise환경에서 kubespray설치
choi sungwook
 
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
choi sungwook
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제
choi sungwook
 
nexus helm 설치와 private docker repo 생성
nexus helm 설치와 private docker repo 생성nexus helm 설치와 private docker repo 생성
nexus helm 설치와 private docker repo 생성
choi sungwook
 

More from choi sungwook (20)

테라폼스터디5주차 1편
테라폼스터디5주차 1편테라폼스터디5주차 1편
테라폼스터디5주차 1편
 
컨테이너와 도커 이해
컨테이너와 도커 이해컨테이너와 도커 이해
컨테이너와 도커 이해
 
kustomize 빠르게 시작하기
kustomize 빠르게 시작하기kustomize 빠르게 시작하기
kustomize 빠르게 시작하기
 
entrypoint 오버라이딩
entrypoint 오버라이딩entrypoint 오버라이딩
entrypoint 오버라이딩
 
젠킨스 컨셉
젠킨스 컨셉젠킨스 컨셉
젠킨스 컨셉
 
System Manager를 이용한 EC2 원격쉘 접속
System Manager를 이용한 EC2 원격쉘 접속System Manager를 이용한 EC2 원격쉘 접속
System Manager를 이용한 EC2 원격쉘 접속
 
aws profile관리
aws profile관리aws profile관리
aws profile관리
 
nginx 입문 공부자료
nginx 입문 공부자료nginx 입문 공부자료
nginx 입문 공부자료
 
nginx 504 timeout오류 해결
nginx 504 timeout오류 해결nginx 504 timeout오류 해결
nginx 504 timeout오류 해결
 
AWS 다른계정 리소스 사용방법
AWS 다른계정 리소스 사용방법AWS 다른계정 리소스 사용방법
AWS 다른계정 리소스 사용방법
 
helm 입문
helm 입문helm 입문
helm 입문
 
Prometheus 원리와 예제
Prometheus 원리와 예제Prometheus 원리와 예제
Prometheus 원리와 예제
 
쿠버네티스 멀티 클러스터 관리
쿠버네티스 멀티 클러스터 관리쿠버네티스 멀티 클러스터 관리
쿠버네티스 멀티 클러스터 관리
 
EC2 기타비용
EC2 기타비용EC2 기타비용
EC2 기타비용
 
스프링부트 JPA와 mariadb 도커 컨테이너 연동
스프링부트 JPA와 mariadb 도커 컨테이너 연동스프링부트 JPA와 mariadb 도커 컨테이너 연동
스프링부트 JPA와 mariadb 도커 컨테이너 연동
 
윈도우에서 도커 설치
윈도우에서 도커 설치윈도우에서 도커 설치
윈도우에서 도커 설치
 
onpremise환경에서 kubespray설치
onpremise환경에서 kubespray설치onpremise환경에서 kubespray설치
onpremise환경에서 kubespray설치
 
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
[개인 프로젝트] 쿠버네티스를 이용한 개발환경 자동화 구축시스템 - 프로토타입
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제
 
nexus helm 설치와 private docker repo 생성
nexus helm 설치와 private docker repo 생성nexus helm 설치와 private docker repo 생성
nexus helm 설치와 private docker repo 생성
 

도커 이미지 레이어 구조

  • 3.  컨테이너 이미지 • 컨테이너 이미지는 컨테이너를 실행하기 위한 읽기전용 파일(템플릿) ※ 도커는 이미지 관리, 컨테이너 실행, 컨테이너 상태관리를 쉽게 도와주는 도구 3 container image docker Docker run Read file
  • 4.  컨테이너 이미지 • 컨테이너 이미지는 OCI Image Spec을 준수한다. • OCI Image Spec을 준수하기 때문에 도커가 아닌 다른 도구도 이미지를 사용할 수 있다. 4 참고자료: https://github.com/opencontainers/image-spec/blob/main/manifest.md docker container conatinerd ... image 컨테이너 실행
  • 5.  컨테이너 이미지 • Docker는 컨테이너 사용자가 쉽게 컨테이너 이미지를 만들기 위해 방법(Dockerfile)을 제공한다. 5 docker image 컨테이너 이미지 생성 (docker build) dockerfile
  • 7.  Layer • Docker 이미지는 layer와 메타정보로 구성된다. 7 참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
  • 8.  Layer • busybox docker 이미지 다운로드 8 $ docker pull busybox:1.34.1 • docker inspect를 이용하여 layer확인 $ docker inspect busybox:1.34.1
  • 9.  Layer 9 • busybox docker 이미지는 한개의 layer로 구성된다. busybox docker image sha256: 64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e 359ee0e27104e2d3ed
  • 10.  Layer 10 • layer 정보는 /var/lib/image/<storage-driver>/layerdb/sha256 디렉터리에 저장된다. ※ docker는 default로 overlay2사용
  • 11.  Layer 11 • layer 데이터는 /var/lib/<storage-driver>에 저장된다. • layer 데이터를 확인하기 위해서 /var/lib/image/<storage-driver>/layerdb/sha256/<layer_id>/cache-id를 확인한다.
  • 12.  Layer 12 • 정리하면 docker 이미지는 layer로 구성되고 layer정보는 /var/lib/docker/image/<storage-driver>/layerdb/sha256, layer데이터는 /var/lib/docker/<storage-driver>에 저장된다. busybox docker image sha256: 64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e 359ee0e27104e2d3ed /var/lib/docker/image/<storage-driver>/layer/dbsha256 sha256: 64cac9eaf0da6a7ae6519b6c7198929f232324e0822b5e 359ee0e27104e2d3ed /var/lib/docker/<storage-driver> sha256: xxxx
  • 14.  Read/Writeable Layer • layer는 읽기와 쓰기 속성이 있다. • 이미지 layer는 읽기속성만 부여된다. 14 참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
  • 15.  Read/Writeable Layer • 컨테이너가 생성될 때 읽기/쓰기 속성 layer가 생성되고 container Layer라고 부른다. • 컨테이너에서 작업한 데이터는 container layer에 저장된다. • container layer는 컨테이너가 사라지면 삭제된다. 15 참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
  • 16.  Read/Writeable Layer • 컨테이너 실행전 layer데이터 확인 16 $ docker run --rm -it busybox:1.34.1 /bin/sh • 컨테이너 실행 • 다시 layer데이터를 확인하면 새로운 layer가 생성된 것을 확인할 수 있다.
  • 17.  Read/Writeable Layer • 컨테이너 merged layer위치 확인 17 $ docker ps $ docker insepct <container-id> • merged layer에서 helloworld.txt파일 작성 후, 컨테이너 쉘에서 파일생성 확인 $ cd <merged-layer> $ vi hello.txt (container)# ls
  • 18.  Read/Writeable Layer • 컨테이너를 삭제하면 컨테이너 레이어가 자동삭제된다. • 결국, 컨테이너에서 작업한 파일, 디렉터리는 없어지게 된다. 18
  • 20.  Union file system • 여러 개의 파일 시스템을 하나의 파일 시스템으로 합치는 시스템 20 Image Layer Container Layer file system docker container 참고자료: https://docs.docker.com/storage/storagedriver/#images-and-layers
  • 21.  Union file system • 이미지 layer는 lowerdir, container layer는 upperdir에 위치한다. • 최종적으로 upperdir, lowerdir 데이터가 merged layer에 합쳐지고 컨테이너에 마운트된다. • upperdir, lowerdir이 같은 데이터를 작업하면 lowerdir이 우선순위를 갖는다. 21 참고자료: https://docs.docker.com/storage/storagedriver/overlayfs-driver/#how-the-overlay-driver-works
  • 23.  참고자료 • docker layer: https://velog.io/@latte_h/Docker-Image- %EC%9D%B4%ED%95%B4#%EC%8B%A4%EC%A0%9C%EB%A0%88%EC%9D%B4%EC%96%B4-%EB%82%B4%EC%9A%A9- %ED%99%95%EC%9D%B8 • docker storage-driver 공식문서: https://docs.docker.com/storage/storagedriver/overlayfs-driver/#configure-docker-with-the- overlay-or-overlay2-storage-driver • union filesystem: https://blog.naver.com/alice_k106/221530340759 • docker layer: https://windsock.io/explaining-docker-image-ids • docker layer: https://learnk8s.io/blog/smaller-docker-images 23