เรื่องของ Docker Layer Architecture
“เข้าใจ Docker image และ Docker contianer ผ่าน Layer Architecture”
เรื่องของ Docker Layer Architecture
“เข้าใจ Docker image และ Docker contianer ผ่าน Layer Architecture”

ในแต่ละคำสั่งใน dockerfile เมื่อถูก build จะทำให้เกิด layer ขึ้นมา เช่น
ผมมี app expressjs ซึ่งหน้าตาของ dockerfile เป็นดังนี้
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
เมื่อใช้คำสั่ง docker build สิ่งที่เกิดขึ้นคือจะได้ image ซึ่งภายในจะเป็นชั้น layer

ข้อดีของการเป็น layer คือ หากมี app ที่มี layer เหมือนกัน เช่นเป็น app expressjs เหมือนกันใน layer ที่ 1, 2 เมื่อ build ตัว docker จะใช้ layer ที่เคยสร้างมาก่อนหน้า ทำให้ build ได้เร็วขึ้น
Layer ทั้งหมดนี้ เราจะมัดรวม และเรียกเป็น “Image layer” ซึ่งจะเป็น Read only หมายความว่าเมื่อ build เป็น image ขึ้นมาแล้ว เราจะไม่สามารถแก้ไขข้อมูลหรือคำสั่งภายใน image ได้, ถ้าอยากจะแก้ไขจะต้องทำการ build เป็น imageใหม่.

เมื่อ docker run image เป็น container -> จะเกิด layer ใหม่ขึ้น คือ “Container layer”

ซึ่ง Container layer จะเป็นแบบ Read Write หรือ Writable คือสามารถเกิดการเขียน data ขึ้นได้ เช่น app มีการเขียนไฟล์ log ขึ้นมาเป็นไฟล์ log และเรายังสามารถแก้ไขตัว source code ของ application ได้อีกด้วย (ถ้า copy ตัว source code เข้าไปใน แต่ถ้ามีแต่ binary ก็จะไม่สามารถแก้ไขได้) ซึ่ง action ที่เป็นการแก้ไขไฟล์ใน container จะเรียกว่า “COPY-ON-WRITE”

และไฟล์ที่เกิดขึ้นใน container จะถูกลบและหายไป เมื่อ container นั้นถูกทำลาย.
แล้วถ้าอยากให้ไฟล์ที่เกิดขึ้นคงอยู่ละ จะแก้ปัญหายังไง ??
메타데이터
- post_id
- 320d0c8a204e
- slug
- ทำความเข้าใจ-docker-layer-architecture-320d0c8a204e
- url
- https://medium.com/@astronut1911/%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2%E0%B9%83%E0%B8%88-docker-layer-architecture-320d0c8a204e
- canonical_url
- https://medium.com/@astronut1911/%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2%E0%B9%83%E0%B8%88-docker-layer-architecture-320d0c8a204e
- author_url
- https://medium.com/@astronut1911
- status
- ok
- fetched_at
- 2026-07-11 04:49:25