‫เอาล่ะ ลองดูตัวอย่าง Dockerfile เพิ่มเติม
‫ในที่เก็บของเราที่คุณดาวน์โหลดจาก Github ของฉันไปที่ Dockerfile ตัวอย่างหมายเลข 2
‫ครั้งนี้เรามีไฟล์จริงสองไฟล์
‫เรามี Dockerfile และตอนนี้เรามีดัชนีแล้ว HTML
‫ง่ายสุด ๆ สวัสดีชาวโลก. HTML
‫มันไม่สำคัญที่จะเข้าใจ HTML
‫เราจะคัดลอกมันไปไว้ในรูปภาพคอนเทนเนอร์ของเราในขณะที่เรากำลังสร้างมัน
‫ถ้าเราดู Dockerfile คุณจะเห็นอันนี้ว่าเราใช้ Nginx เป็นคำสั่ง FROM ของเรา
‫เราไม่ได้สร้าง Nginx ของเราเองเพราะจะเป็นการดีถ้าคุณสามารถใช้รูปภาพอย่างเป็นทางการเพื่อทำงานให้เสร็จจาก
‫Docker Hub แล้วมันจะง่ายกว่ามากสำหรับคุณที่จะดูแลไฟล์ Dockerfile นี้และทำงานได้ดี
‫ในสถานการณ์ที่ง่ายกว่าบ่อยครั้งที่ภาพทางการทำงาน
‫แต่เมื่อคุณเติบโตและเพิ่มความซับซ้อนให้กับสภาพแวดล้อมและระบบของคุณคุณอาจพบว่าคุณต้องเพิ่มซอฟต์แวร์ที่กำหนดเองเพิ่มเติมหรือเปลี่ยนวิธีการเริ่มต้นหรือเพิ่มสคริปต์เพื่อปรับแต่งการกำหนดค่า
‫แต่เมื่อฉันเริ่มโครงการกรีนฟิลด์ใหม่หรือถ้าฉันแปลงแอพเก่าบางแอปฉันมักจะเริ่มต้นด้วยภาพอย่างเป็นทางการจาก Docker Hub
‫จากนั้นเมื่อฉันตีสิ่งกีดขวางบนถนนและฉันไม่สามารถใช้ภาพนั้นอีกต่อไปฉันอาจกลับไปที่ Docker
‫Hub แล้วดูอีกครั้งและดูว่ามีอะไรที่กำหนดเองได้บ้างที่ได้รับความนิยมจริงๆ ดูว่ามันจะแก้ปัญหาของฉันได้ไหม
‫แต่ไม่มีอะไรผิดปกติในการสร้างของคุณเอง
‫มันเป็นเพียงการทำงานมากขึ้นและการบำรุงรักษามากขึ้นเมื่อเวลาผ่านไป
‫ดังนั้นที่นี่ง่ายมาก เรามีสามบท
‫คุณเคยเห็น FROM มาก่อน และครั้งนี้เรามี WORKDIR
‫ตอนนี้จริง ๆ แล้วเพียงแค่เรียกใช้การเปลี่ยนแปลงไดเรกทอรีพื้นที่ซีดี ดังนั้นคุณอาจถูกล่อลวงให้ใช้คำสั่งเรียกใช้และเพียงพิมพ์ run cd
‫ลงในไดเรกทอรีนี้แล้วทำบางสิ่ง แต่วิธีปฏิบัติที่ดีที่สุดสำหรับ
‫Dockerfiles คือใช้ stanza แยกต่างหากสำหรับทุกครั้งที่คุณเปลี่ยนไดเรกทอรี
‫ดังนั้นหากไฟล์ของคุณซับซ้อนเล็กน้อยและคุณต้องย้ายไปมาในภาชนะเพื่อทำสิ่งต่าง ๆ
‫ในขณะที่กำลังสร้างคุณต้องการใช้ WORKDIR เสมอเพราะมันง่ายกว่าที่จะอธิบายใน Dockerfile สิ่งที่คุณทำ
‫ในกรณีนี้สิ่งที่เราทำจริง ๆ คือเรากำลังเปลี่ยนเป็นไดเรกทอรี Nginx เริ่มต้นสำหรับไฟล์
‫HTML
‫ในการกำหนดค่าเริ่มต้นบน Docker Hub Nginx
‫ทำหน้าที่เสมือนเป็นเว็บเซิร์ฟเวอร์และเป็นเพียงการให้บริการไฟล์คงที่จากดิสก์คอนเทนเนอร์
‫บทสุดท้ายที่นี่เรามีคือสำเนา และนี่คือ
‫stanza ที่คุณจะใช้เพื่อคัดลอกซอร์สโค้ดของคุณจากเครื่องโลคอลหรือเซิร์ฟเวอร์บิลด์ของคุณไปยังอิมเมจคอนเทนเนอร์ของคุณ
‫ในกรณีนี้เราแค่นำค่าดัชนีอย่างง่ายของเรา html
‫และเราเขียนทับไฟล์ในไดเรกทอรีเริ่มต้นของ Nginx เพื่อให้เป็นหน้าแรกที่กำหนดเองสำหรับเว็บเซิร์ฟเวอร์
‫ก่อนที่เราจะสร้างสิ่งนี้คุณจะสังเกตเห็นว่าเราขาด stanzas ที่จำเป็นเช่น cmd
‫แล้วเราจะหนีไปได้อย่างไร
‫ดีมี cmd ที่ระบุไว้ในภาพจาก
‫และเมื่อเราใช้ FROM เราจะสืบทอดทุกสิ่งจาก Dockerfile เราจะ 'กำลัง' ถ้านั่นเป็นคำ
‫นี่คือวิธีที่คุณสามารถเชื่อมโยง Dockerfiles เข้าด้วยกันเพื่อให้ภาพขึ้นอยู่กับภาพอื่น ๆ ที่ขึ้นอยู่กับภาพอื่น
‫ๆ
‫เอาล่ะ มาดูกันว่ามันทำงานอย่างไร
‫ก่อนที่เราจะสร้างสิ่งนี้ให้เราเตือนตัวเองอย่างรวดเร็วว่าเซิร์ฟเวอร์ Nginx ที่เป็นค่าเริ่มต้นทำอะไร
‫ลองทำท่าเทียบเรือตู้คอนเทนเนอร์ด่วน -p 8080 และเราจะไม่ต้องการมันนานนักดังนั้นเราจะทำ --rm ดังนั้นมันจะลบออก
‫เราไม่สนใจชื่อ
‫เราแค่เรียกใช้ Nginx หากเราข้ามไปที่เบราว์เซอร์ของเราและเพียงพิมพ์ localhost เราจะเห็นหน้าดัชนี
‫Nginx เริ่มต้น
‫ตกลง.
‫โปรดจำไว้ว่าจากนั้นเราจะออกจากคอนเทนเนอร์นี้และเราจะสร้างรุ่น Nginx
‫ของเราด้วยไฟล์ซอร์สโค้ดพิเศษของเรา
‫ตกลง.
‫อันนี้จริง ๆ ควรไปอย่างรวดเร็วจริง ๆ
‫คุณสังเกตเห็นว่าใช้เวลาเพียงไม่กี่วินาที นั่นเป็นเพราะเรามี Nginx ในแคชภาพของเรา
‫และสิ่งที่มันกำลังทำอยู่ก็คือการคัดลอกไฟล์เล็ก ๆ และเปลี่ยนไดเรกทอรีการทำงาน
‫ทีนี้ลองรันคำสั่งที่แน่นอนที่เราเพิ่งเรียกใช้สำหรับ Nginx
‫คราวนี้เราจะใช้ภาพใหม่นี้ที่เราเพิ่งสร้างขึ้น
‫สลับไปที่เบราว์เซอร์ของเราและรีเฟรชและดีเยี่ยม
‫HTML ดัชนีที่กำหนดเองของเรากำลังทำงานอยู่ที่นั่นและคอนเทนเนอร์ของเราทำงาน
‫หากเราทำภาพอย่างรวดเร็วเราสามารถดูภาพล่าสุดของเราที่ด้านบน
‫หากเราต้องการส่งข้อมูลนี้ไปยัง Docker Hub จริง ๆ แล้วมันจะทำงานในลักษณะเดียวกับที่เราทำก่อนหน้านี้
‫เราแค่ต้องติดแท็กใหม่ เพื่อให้เราสามารถทำแท็กภาพนักเทียบท่า
‫หากคุณจำคำสั่งความช่วยเหลือเราสามารถดูรูปแบบและเป็นคำสั่งที่เราติดแท็กเสมอและแท็กที่เราต้องการให้เรียกใช้
‫ดังนั้นแท็กภาพนักเทียบท่า nginx พร้อม html ล่าสุด
‫แล้วฉันจะต้องเรียกมันว่า bretfisher ... เช่นนั้น.
‫จากนั้นถ้าฉันทำรูปภาพนักเทียบท่า ls อีกครั้งคุณจะเห็นสองบรรทัดบนสุดนั้นเป็นรหัสรูปภาพเดียวกันอีกครั้ง
‫ตอนนี้ฉันสามารถผลักดันนักเทียบท่าด้วยที่เก็บและแท็กนั้นและฉันสามารถเอามันขึ้นที่ Docker Hub