สร้าง Image ของตัวเองใช้กัน
ในตอนก่อนๆเราได้รู้เกี่ยวกับการใช้งาน Docker สร้าง ลบ แก้ไข Container กันมาแล้ว ในตอนนี้เราจะมาสร้าง Image มาใช้กันเองบ้าง ซึ่งเมื่อสร้างได้แล้วจะเริ่มเข้าใจว่าเราจะเอามันไปใช้งานยังไงในงานจริง
Image มันคืออะไร
Image ก็คือตัวต้นแบบของ container เมื่อเราสร้าง container จาก image ไหน เราจะได้ container ที่หน้าตาเหมือนกัน (แต่เป็นคนละตัวกัน) ออกมา ถ้ามองง่ายๆคือ Image คือ พิมพ์สร้างเยลลี่ครับ ส่วน container คือเยลลี่ที่เราสร้างมาจากพิมพ์ครับ หากคำอธิบายของผมยังไม่เข้าใจ ลองไปอ่านของคุณ Rachata Tongpagdee หรือของท่านอื่นๆดูครับ
First Image
ในการจะสร้าง Image นั้นเราจะต้องสร้างไฟล์ที่ชื่อ Dockerfile ขึ้นมาครับ โดยในเนื้อไฟล์มีหน้าตาประมาณนี้ก่อนครับ
สร้าง Image
1 | FROM httpd:2-alpine |
จากนั้นย้าย current directory ไปที่ directory ที่ Dockerfile อยู่จากนั้นสั่งตามคำสั่งนี้ครับ
1 | docker build -t first-image . |
โดย Run แล้วจะได้ตามภาพครับ
ลองตรวจสอบว่าเราสามารถสร้าง Image ขึ้นมาได้จริงไหมโดยสามารถสั่ง
1 | docker images |
จากภาพจะเห็นว่า image : first-image จะโผล่ขึ้นมานั่นแปลว่าเราสามารถสร้าง Image ของเราได้แล้ว
Run image ที่สร้างกัน
เรามาลอง Run กันดูดีกว่าว่ามันทำงานได้รึเปล่า
1 | docker run --name my_test first-image |
จากภาพจะเห็นว่าเราสามารถ Run ตัว image ที่เราสร้างขึ้นมาได้ ซึ่งมันเหมือน image httpd เลย ซึ่งมันเกิดมาจาก Dockerfile ของเรานั่นเอง เดี๋ยวเรามาอธิบายกัน
1 | FROM httpd:2-alpine |
โดยจากที่ผมอธิบายไป FROM คือบอกว่า Image ที่เราจะสร้างเนี่ยเริ่มจาก Image ไหน โดยจากตัวอย่างผมเอามาจาก httpd:2-alpine ซึ่งทำให้เวลาเราทำการ Run image ตัวนี้ทำให้ได้ผลแบบเดียวกันกับ httpd:2-alpine เลย
ลอง Customize กันหน่อย
จากนี้เราจะมาเริ่มทำการปรับแต่ง image ที่เราจะสร้างกัน โดยลองไปทำการแก้ไฟล์ Dockerfile ให้เป็นดังภาพ
1 | FROM httpd:2 |
จากนั้นสั่ง build อีกครั้งหนึ่งจะได้ผลลัพธ์ดังภาพ
จะเห็นว่ามีการ run echo และ ls -lah ขึ้นมาในกระบวนการสร้างซึ่งตรงกับที่อยู่ใน Dockefile ดังนั้นก็คงจะพอเดากันได้แล้วซึ่งมันมาจากคำสั่ง RUN นั่นเอง
RUN
RUN ใน Dockerfile นั้นหมายถึงสั่ง run command ใน image ที่เราจะสร้างครับ โดยจากตัวอย่างผมสั่ง Run คำสั่ง echo และ ls -lah เพื่อโชว์เห็นว่าเราสามารถ run คำสั่งอะไรก็ได้ในเครื่อง Image (ตราบเท่าที่ Image มันมีนะ) โดยปกติ RUN ใน dockerfile มีไว้ลงพวกโปรแกรมเพิ่มเติมที่เราอยากจะ Customize หรือทำการ compile source code ตัวอย่างเช่น ผมต้องการให้ image นี้ลง vim ด้วยผมก็แค่เพิ่ม command เกี่ยวกับการ install vim เข้าไป
1 | FROM httpd:2 |
ลองสั่ง build image ดูครับ จะเห็นว่าตอน Run จะมีการ Install ตัวโปรแกรม vim เข้าไปใน Image โดยเราสามารถลอง run image แล้ว exec เข้าไปใน image ดูจะเห็นว่าเราสามารถใช้งาน vim ได้ครับ อันนี้อยากอธิบายให้เข้าใจนิดนึงว่า คำสั่ง RUN ที่อธิบายมาทั้งหมดมันจะ Run ตอนสร้าง Image เท่านั้นนะครับ (คือทำตอนสั่ง docker build เท่านั้น) มันจะไม่ทำงานตอนสั่ง docker run นะครับ
ADD
จากคำสั่ง RUN เราสามารถ RUN คำสั่งอะไรก็ได้ใน Image ตอนสร้าง Image ได้แล้ว แต่คราวนี้เราอยากจะเอาไฟล์ไปไว้ใน Image ด้วย เพื่อให้มันทำงานบางอย่างเช่น อยากเอาไฟล์ index.html ใหม่ไปวางไว้ในตัว Image เพื่อให้เวลาเข้าหน้าแรกของ Web มีการแสดงผลแบบที่เราอยากให้เป็น แทนการที่ต้องสร้าง container แล้วค่อยเข้าไปแก้เป็นรายครั้งไป
สร้างไฟล์ index.html ไว้ใน path เดียวกับ Dockerfile โดยข้างในมีเนื้อหาประมาณ
1 |
|
1 | FROM httpd:2 |
จากนั้นลองสั่ง build แล้ว Run ดูครับจะด้วยคำสั่งนี้แล้วลองเข้าผ่าน Browser จะได้ประมาณนี้ครับ
1 |
|
โดยจากตัวอย่างผมเอาไฟล์ index.html ไปวางไว้ในเครื่อง image แทนที่ไฟล์ /usr/local/apache2/htdocs/index.html ดังนั้นเวลาเรา run image แล้วเข้าดูผ่าน Browser ทำให้เราเห็นหน้าแรกตามไฟล์ index.html ที่เราทำ
ตัดจบก่อนนะครับ
สำหรับตอนนี้เราได้ลองสร้าง Image ทดลองคำสั่ง RUN และ ADD ซึ่งเป็นคำสั่งที่ใช้งานบ่อยมากในการสร้าง Image ส่วนในตอนถัดไปมาลองคำสั่งที่ใช้งานยากขึ้นมาหน่อยคือคำสั่ง CMD , ENTRYPOINT ส่วนในตอนนี้ขอจบเพียงเท่านี้ละกันครับ
โปรโมท Page
ผมทำ Page บน Facebook แล้วนะครับ ใครสนใจรับการแจ้งเตือนเวลาผมอัพเดท Blog ก็ไปกดติดตามกันได้ครับ กดตามลิ้งไปได้เลย Facebook page
เพลงประกอบการเขียน Blog
เพลงประกอบ Series ญี่ปุ่นเรื่อง Galileo โดยนักแสดงนำร้องเอง ซึ่งพอมาอ่านทีหลังพึ่งรู้ว่า นักแสดงนำทั้งคู่นี่ตัว TOP ของญี่ปุ่นเลย