Docker Data 영역 dir에 대해서 알아보자!

Karim·2022년 2월 15일
10

Docker 운영

목록 보기
3/4
post-thumbnail

1. Docker data 영역

docker data directory

  • 컨테이너의 물리적 이미지저장하고, 컨테이너가 구동되었을 때 이미지 레이어 외의 컨테이너 레이어 정보저장하는 영역

💡 docker data directorys

  • data 영역 따로 비 설정 시 경로

    cd /var/lib/docker

[root@karim ~/docker] ls
containers  network   plugins   swarm  trust
image       overlay2  tmp    volumes

2. containers

containers dir

  • containers dir에는 docker에 있는 container들의 호스트 정보, 마운트포트포워딩정보들이 있는 곳이다.
  • container의 hostname default은 이 해당 dir명에 앞 12자리다~
[root@karim containers]# ls
cede526eeb56a1d721fce8b44a645969e588a76c9d87dfcae8ff012036673e13

[root@karim cede526eeb56a1d721fce8b44a645969e588a76c9d87dfcae8ff012036673e13]# ls
cede526eeb56a1d721fce8b44a645969e588a76c9d87dfcae8ff012036673e13-json.log  
hostconfig.json
mounts
checkpoints
hostname
resolv.conf
config.v2.json
hosts
resolv.conf.hash

💡 dir 설명

  • [container dir 명]-json.log
  • hostconfig.json
    • 컨테이너에 대한 로그파일 형식, 너트워크 모드, 포트바인딩, 메모리 옵션 등의 속성들이 있다.
    • 컨테이너 run시에 포트 포워딩을 차마 못했다면, 컨테이너 내리고, 도커 내리고, 이 해당 파일에 포트포워딩 정보를 추가하고 도커 올리고, 컨테이너 올리면 된다.!
{"Binds":["el-upgrade:/data"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"1111"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Capabilities":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"private","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DeviceRequests":null,"KernelMemory":0,"KernelMemoryTCP":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":null,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}
  • hostname
    • 해당 컨테이너 호스트 이름
  • resolv.conf
    • 해당 컨테이너 네임 서버 지정 파일
  • config.v2.json
    • 해당 컨테이너 환경변수 파일
  • hosts
    • 해당 컨테이너 hosts 파일

2. volumes

volumes dir

  • container에서 생성하고 사용하는 데이터를 유지하기 위한 기본 메커니즘이다.
  • 볼륨은 생성하지 않고 컨테이너를 run할 경우 docker가 자동 생성한 hash 값으로 dir가 만들어 진다.
  • 볼륨을 생성하고 컨테이너 run시 -v으로 설정해 주면 생성한 볼륨 이름으로 dir가 만들어 진다.

💡 volumes 생성 방법

  • 지정 볼륨 생성

    docker volume create [지정 볼륨 dir 명]

  • 컨테이너 run 시 볼륨 매핑

    docker run -d --name [컨테이너 이름] -v [생성된 지정 볼륨 dir 명]:/[마운트 할 컨테이너 dir] [이미지REPOSITORY명]:[TAG명]

3. network

network dir

  • docker의 전체 hosts 설정 파일 들

4. overlays

overlays

  • overlay2 인 이유

    docker info 라는 명령어를 사용해서 현재 환경에서 사용하는 docker에 대한 정보를 확인이 가능한데
    Storage와 일치하는 것을 볼 수 있다.
    (Storage Driver : overlay2)

  • overlay2란?

    • overlay2는 레이어 파일 시스템
    • overlay2는 Linux 배포판에 대해서 선호되는 스토리지 드라이버 (외로 aufw 가 있음)

      Container의 Storage를 제한하기 위해서는 Docker Engine 자체의 기능을 이용하지 않고 Storage Driver의 도움이 필요한다고 한다.
      Container가 Storage Driver의 파일 시스템을 기반으로 동작해서 그런다는데. 이때 사용하는 파일 시스템이 Overlay2

overlays dir

  • overlay2 파일 시스템을 사용하기 때문에 /var/lib/docker/overlay2가 존재
  • 각 컨테이너의 루트 디렉터리, /var/lib/docker/volumes 에는 생성한 볼륨이 들어가 있다.
  • 컨테이너가 삭제되면, 이 오버레이 마운트 경로의 데이터는 모두 삭제된다.

💡 -init

  • -init붙은 dir은 방금 생성된 container
  • -init붙지 않은 디렉토리가 실제 Container의 파일 시스템을 담고 있는 디렉토리

💡 diff -> tmp

  • 백업과 같은 역할을 수행하기 위해서, 컨테이너 내부 파일 구조의 변경 사항기록하는 곳

5. image -> overlays

image -> overlays

  • pull 받은 이미지가 저장되는 곳이다.
  • docker image 관리 는 layer 방식으로 이미지를 관리한다.
    • 레이어란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일을 추가하기 위한 개념
    • 이미지는 여러 개의 읽기전용(Read only) 레이어로 구성되고, 파일이 추가되면 새로운 레이어가 생성

💡 dir 설명

  • distribution
    • layer 해시 값diff id간대응정보를 저장한다.
  • imagedb
    • 다운로드이미지 정보를 저장
  • layerdb
    • 여러개의 레이어로 구성된 실질적인 이미지의 정확한 정보
  • repositories.json
    • image id 에 해당 하는 해시값의 정보를 저장한다.

6.trust

trust

  • 원격 Docker 레지스트리와 주고받는 데이터디지털 서명을 사용할 수 있는 기능을 제공
  • 클라이언트 측 또는 런타임에 특정 이미지 태그의 무결성 및 게시자를 확인할 수 있다.

7. swarm

swarm

  • 도커 스웜은 도커 컨테이너를 위한 클러스터링, 스케줄링
  • 스웜을 이용하면 여러 개서버컨테이너 관리를 쉽게 할 수 있다.

💡 swarm은 나중에 따로 정리할 예정


📌 여담

  • 생각 없이 컨테이너 올리고 내리고 사용만 했지...
    도커는 넘 어렵땨...☆★

📚 참고

profile
나도 보기 위해 정리해 놓은 벨로그

0개의 댓글