ทำความเข้าใจ layers

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

Docker layers

  • Docker image ประกอบด้วย layers
  • layer โดยทั่วไปหมายถึงการเปลี่ยนแปลงหรือคำสั่งใน Dockerfile
  • layer สามารถถูก cache และนำมาใช้ซ้ำได้
  • ลำดับของคำสั่งใน Dockerfile ส่งผลต่อการนำ layer มาใช้ซ้ำ

Dockerfile ไปยัง Layers

Docker ระดับกลาง

ทำไม layers จึงสำคัญ?

  • การนำกลับมาใช้ซ้ำ
    • build เร็วขึ้น
    • ขนาด build เล็กลง
Docker ระดับกลาง

docker image inspect

  • จะดู layers ใน image ได้อย่างไร?
  • docker image inspect <img id | name>
  • แสดงข้อมูลโดยละเอียดเกี่ยวกับ Docker image
  • ส่วน RootFS:Layers แสดงรายละเอียด layers ของ Docker image
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 ระดับกลาง

เครื่องมือ command-line jq

  • ผลลัพธ์จาก docker image inspect อาจวิเคราะห์ได้ยาก
  • jq เป็นเครื่องมือ command-line สำหรับอ่านข้อมูล JSON เช่น ผลลัพธ์จาก docker image inspect
  • สามารถใช้ jq เพื่อ query ข้อมูลได้
Docker ระดับกลาง

การใช้ jq กับ Docker

  • วิธีดูเฉพาะส่วนที่ต้องการ เช่น ข้อมูล RootFS:
    • docker image inspect <id> | jq '.[0] | .RootFS'
      {
      "Type": "layers",
      "Layers": [ "sha256:0f5c115c5eea96...", 
                  "sha256:20792593831cdc..."
                ]
      }
      
Docker ระดับกลาง

การใช้ jq กับ Docker (ส่วนที่ 2)

  • วิธีนับจำนวน layers ด้วย jq:
    • docker image inspect <id> | jq '.[0] | {LayerCount: .RootFS.Layers | length}'
      {
        "LayerCount": 2
      }
      
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...