ในตอนที่ 2 เราได้เตรียม Container Host กันแล้ว และใช้คำสั่ง docker run ไปบ้าง ตอนนี้เราจะทำความเข้าใจหัวข้อต่อไปนี้
- Container Image, Layer, History และ docker commit
- Volume
Container Image และ Layer
การเข้าใจ Image ต้องควบคู่ไปกับ Layer ตามที่รู้กันแล้วว่า Container เป็นการ share OS เมื่อเราอยากใช้เครื่อง Server ทำหน้าที่อะไร เราจึงต้องมี Image หรือ Application นั้น เช่น เราต้องการ ASP.Net Server คือ เราสร้าง Windows Server ขึ้นมาก่อน แล้วก็ Enable ASP.Net ในโลกของ Windows Container เราจะต้อง download OS Image + ASP. Net จาก Repository เป็นต้น
Image หมายถึง Package ของ Application ที่เตรียมไว้ Run ใน Container ในภาพประกอบด้านล่าง Image ถูกเก็บไว้ที่ Repository มี 3 ที่คือ Public, Private และ Local ซึ่ง Image อาจมีลง Application เพิ่มเติมบน Image เดิมได้เรื่อยๆ ส่วนที่มา update มันไม่ได้ถูกแก้ของเดิม แต่เป็นการสร้างเป็นของใหม่เพิ่มเติมขึ้นไปเรียกว่า Layer
Image ที่ประกอบด้วย Layer นั้น ใน Container แม้จะมีกี่ Layer ก็ตาม จะมี Layer 2 แบบ คือ Read-only และ Read-Write ตามภาพด้านล่าง โดย Layer ชั้นบนสุดจะสามารถ write ได้ แต่มันเป็นแค่ write เก็บไว้ในระหว่างที่ Run image นั้น หลังจะ stop image สิ่งที่ write ก็จะหายไป ถ้าจะเก็บถาวรต้องใช้ Volume
Volume
ตามที่กล่าวไปแล้ว Image ถูกออกแบบว่าห้าม save งานลงไปในนั้นโดยตรงเพราะแนวคิดการใช้งาน Docker คือการควบคุมให้ version ใน image มีมาตรฐาน เพื่อให้ใครไปดึงมาใช้ก็เหมือนกัน ถ้าเราต้องการบันทึกข้อมูลจะต้องใช้ Volume เพื่อเก็บข้อมูลถาวร (Persistent Storage) หลังของ volume มีดังนี้
1. สร้าง Folder บน Container Host สำหรับ Share ให้ Container นำไปใช้งาน ในตัวอย่าง ตั้งชื่อ volume นี้ว่า WebVolume
docker volume create –name WebVolume
ตรวจสอบผลงานด้วยคำสั่ง
docker volume inspect webvolume
2. ใช้งาน Volume ด้วยคำสั่ง docker run แล้วใส่ parameter volume
docker run -it -v WebVolume:c:\WebVolume microsoft/windowsservercore cmd.exe
ในภาพจะเห็นว่ามี Folder ชื่อ webvolume อยู่ใน Container และเมื่อสร้างไฟล์ hello.txt ด้วย Notepad ถ้าเราต้องการใช้งานต่อก็เรียก docker run –v
ในตอนนี้เราได้รู้จัก Docker Storage เบื้องต้น รู้จัก Image, Layer และ Volume เรื่องนี้ยังไม่จบ ต่อไปจะทำความรู้จักกับ Storage driver ให้มากขึ้น และเราจะรู้จักวิธีสร้าง image ในคราวต่อๆ ไปครับ
Reference
- Docker Layer
- Docker Fundamental
- Image Stored
- Volume