레이어 이해하기

중급 Docker

Mike Metzger

Data Engineering Consultant

Docker 레이어

  • Docker 이미지는 여러 레이어로 구성됩니다
  • 레이어는 일반적으로 Dockerfile의 변경이나 명령을 참조합니다
  • 레이어는 캐시되어 재사용될 수 있습니다
  • Dockerfile의 명령 순서는 레이어 재사용에 영향을 줄 수 있습니다

Dockerfile에서 레이어로

중급 Docker

레이어가 중요한 이유

  • 재사용성
    • 더 빠른 빌드
    • 더 작은 빌드 크기
중급 Docker

docker image inspect

  • 이미지의 레이어를 어떻게 확인할까요?
  • docker image inspect <img id | name>
  • Docker 이미지의 내용을 자세히 제공합니다
  • RootFS:Layers 섹션이 해당 이미지의 레이어 정보를 제공합니다
repl@host:~$ docker image inspect alpine
[
    {        "Id": "sha256:05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd",
        "RepoTags": [
            "alpine:latest"
        ],
        "Created": "2024-01-27T00:30:48.743965523Z",
중급 Docker

docker image inspect 예시

bash> docker image inspect postgres:latest

"RootFS": {
   "Type": "layers",
   "Layers": [
"sha256:6f2d01c02c30cc1ffac781aff795cba8eeb29cc27756fe37bf525169856369c6",
"sha256:c6ad2d5a3cad837ae66b5560e9c577bfad062556b1f00791d8d733ce44a577ce",
"sha256:2153552a84ccbf7e4a28a50e766b72345072e59f8af0ff068baf98b413132e0c",
"sha256:6c00217b1e4b15c25eb3f6e28b1af8c295f469568014621e31a4c5eb5a8aca6f",
"sha256:167177d78e2a33aa822faebe9f01683c648ae78179059db05cd25737f215c305",
...
중급 Docker

jq 명령줄 도구

  • docker image inspect 결과를 해석하기 어려울 때가 있습니다
  • jq 명령줄 도구는 docker image inspect가 반환하는 것과 같은 JSON 데이터를 읽습니다
  • jq로 데이터를 질의할 수 있습니다
중급 Docker

Docker에서의 jq 레시피

  • 특정 섹션만 보기, 예: RootFS 데이터
    • docker image inspect <id> | jq '.[0] | .RootFS'
      {
      "Type": "layers",
      "Layers": [ "sha256:0f5c115c5eea96...", 
                  "sha256:20792593831cdc..."
                ]
      }
      
중급 Docker

Docker에서의 jq 레시피 (2)

  • jq로 레이어 수를 세는 방법
    • docker image inspect <id> | jq '.[0] | {LayerCount: .RootFS.Layers | length}'
      {
        "LayerCount": 2
      }
      
중급 Docker

연습해 봅시다!

중급 Docker

Preparing Video For Download...