‫มาดำดิ่งใน Dockerfile ซึ่งเป็นสูตรสำหรับสร้างภาพของคุณ
‫จนถึงตอนนี้ภาพ Docker ทั้งหมดที่เราใช้ถูกสร้างขึ้นจาก Dockerfiles ซึ่งคุณสามารถดูได้ที่ Docker
‫Hub
‫หากคุณโคลนแหล่งเก็บข้อมูลของฉันจากแหล่งข้อมูลที่ระบุไว้ในส่วนแรกคุณควรเห็นไดเรกทอรีตัวอย่างไฟล์นักเทียบท่า 1 และในนั้นเราควรมีเพียงไฟล์เดียว
‫Dockerfile
‫เรากำลังจะไปทีละบรรทัดและพูดคุยเกี่ยวกับบทที่แตกต่างกันเหล่านี้ ดูเหมือนว่า Dockerfile จะดูเหมือนเชลล์สคริปต์
‫แต่ไม่ใช่
‫ไม่ใช่แบตช์ไฟล์ไม่ใช่เชลล์สคริปต์ เป็นภาษาที่แตกต่างกันโดยสิ้นเชิงของไฟล์ที่ไม่ซ้ำกับ Docker
‫และชื่อเริ่มต้นคือ Dockerfile ที่มีตัวอักษร D
‫แต่จากบรรทัดคำสั่งทุกครั้งที่คุณต้องการจัดการกับ Dockerfile โดยใช้คำสั่ง docker คุณสามารถใช้
‫dash f ได้จริง ซึ่งจริงๆแล้วเป็นเรื่องธรรมดาในบรรดาเครื่องมือมากมายที่มี Docker
‫คุณสามารถใช้ dash f เพื่อระบุไฟล์ที่แตกต่างจากค่าเริ่มต้น
‫ดังนั้นสิ่งแรกคือคำสั่งจาก คำสั่ง from อยู่ในทุก Dockerfile มันจะต้องมี
‫ปกติแล้วมันจะกระจายตัวน้อยที่สุด
‫ในกรณีนี้คือ Debian
‫แต่หลายครั้งในทุกวันนี้มันจะเป็นอัลไพน์
‫และจริงๆแล้วเหตุผลที่คุณจะใช้สิ่งเหล่านี้คือการประหยัดเวลาและความเจ็บปวดให้ตัวเอง เนื่องจากการกระจายขั้นต่ำเหล่านี้มีขนาดเล็กกว่าซีดีจริง
‫ๆ คุณจึงต้องใช้ในการติดตั้งเครื่องเสมือนจากพวกเขา
‫ตัวอย่างเช่นอูบุนตูยังไม่มีแม้แต่ cURL ในขณะที่ถ้าคุณติดตั้งการติดตั้ง Ubuntu เต็มบน VM
‫ก็จะมี cURL และคำสั่งอื่น ๆ จำนวนมากติดตั้งแล้ว
‫เนื่องจากการกระจายทั้งหมดเหล่านี้เป็นรูปภาพที่เป็นทางการหมายความว่าพวกเขากำลังจะได้รับการอัปเดตเกี่ยวกับแพตช์รักษาความปลอดภัยล่าสุดอยู่เสมอ
‫และหนึ่งในประโยชน์หลักสำหรับการใช้งานในคอนเทนเนอร์คือการใช้ระบบการกระจายแพคเกจเพื่อติดตั้งซอฟต์แวร์ใดก็ตามที่คุณต้องการในแพ็คเกจของคุณ
‫ในกรณีนี้เราใช้เจสซี่รีลีสซึ่งเป็นสิ่งที่อยู่หลังลำไส้ใหญ่
‫และตามที่คุณจำได้จากการสนทนา Docker Hub ของเรามีตัวเลือกมากมายที่คุณสามารถระบุที่นี่สำหรับที่เก็บ
‫Debian
‫ต่อไปเรามี ENV stanza และ ENV สำหรับตัวแปรสภาพแวดล้อม
‫เป็นวิธีการตั้งค่าตัวแปรสภาพแวดล้อมซึ่งจริงๆแล้วมีความสำคัญมากในคอนเทนเนอร์เนื่องจากเป็นวิธีหลักที่เรากำหนดคีย์และค่าสำหรับการสร้างคอนเทนเนอร์และสำหรับการเรียกใช้คอนเทนเนอร์
‫ในกรณีนี้จริง ๆ แล้วเป็นการตั้งค่าเวอร์ชันของ Nginx ที่ต้องการให้เราติดตั้งและตัวแปรสภาพแวดล้อมนี้จะถูกตั้งค่าเพื่อให้บรรทัดถัดไปใด
‫ๆ จะสามารถใช้งานได้
‫ตอนนี้เพื่อเป็นการเตือนจากการบรรยายครั้งก่อนแต่ละบทเหล่านี้เป็นเลเยอร์จริงในภาพนักเทียบท่าของเรา
‫ดังนั้นลำดับของพวกเขาจึงมีความสำคัญเพราะมันทำงานจากบนลงล่าง
‫ดังที่คุณจะเห็นได้จากคำสั่งที่รันค่อนข้างยาวที่นี่สำหรับคำสั่งถัดไป คุณจะเห็นว่ามันดูเหมือนคำสั่งยาวหนึ่งคำ
‫สิ่งที่มันทำคือเพียงแค่เรียกใช้คำสั่งเชลล์ภายในคอนเทนเนอร์นี้เพราะมันกำลังสร้างมันอยู่
‫โดยปกติคุณจะเห็นคำสั่งเรียกใช้เมื่อคุณต้องการติดตั้งซอฟต์แวร์ด้วยที่เก็บแพคเกจหรือคุณต้องทำการคลายซิปหรือแก้ไขไฟล์ภายในคอนเทนเนอร์
‫คำสั่งเรียกใช้ยังสามารถเรียกใช้เชลล์สคริปต์ที่คุณคัดลอกไว้ก่อนหน้าในไฟล์หรือคำสั่งใด ๆ ที่คุณสามารถเข้าถึงได้จากภายในคอนเทนเนอร์
‫ณ เวลานั้นในไฟล์
‫เนื่องจากเรามาจาก Debian คำสั่ง run
‫นี้จึงสามารถเข้าถึงคำสั่งและไบนารีทั้งหมดที่จะถูกติดตั้งพร้อมกับรีลีสนั้น
‫และในรายการนี้สำหรับ Nginx รายการคำสั่งนี้มีการเพิ่มคีย์ในที่เก็บซึ่งคุณสามารถรับแพ็กเกจเพื่อติดตั้ง Nginx
‫ล่าสุดจากที่เก็บอย่างเป็นทางการของ Nginx
‫มีบางสิ่งที่สำคัญอย่างยิ่งในการสร้างนักเทียบท่าที่ดีและเราจะพูดถึงเรื่องนี้ในส่วนต่อไปที่เราพูดถึงแนวปฏิบัติที่ดีที่สุด
‫แต่สองสิ่งที่ควรทราบ
‫เหตุผลที่เราเพิ่มคำสั่งเหล่านี้ทั้งหมดด้วยเครื่องหมายแอมเปอร์แซนด์ที่นี่เพื่อให้พวกเขาถูกล่ามโซ่หนึ่งหลังจากที่อื่น ๆ
‫ก็เพราะถ้าคุณจำได้ว่าแต่ละบทเป็นแต่ละชั้น
‫สิ่งนี้จะช่วยให้มั่นใจได้ว่าคำสั่งเหล่านี้จะรวมกันเป็นชั้นเดียว
‫มันช่วยเราประหยัดเวลาเพียงเล็กน้อย
‫มันช่วยให้เราประหยัดพื้นที่ และเป็นเรื่องธรรมดามากที่คุณอาจเห็นมันในทุกๆ Dockerfile บน Docker Hub
‫โอเคบรรทัดที่ 27 เรามีคำสั่งเรียกใช้อีกคำสั่งหนึ่ง
‫อันนี้เกี่ยวกับการชี้ไฟล์บันทึกของเราไปยัง stdout และ stderr
‫เราจะเห็นในภายหลังวิธีที่เหมาะสมในการเข้าสู่ระบบภายในคอนเทนเนอร์คือการไม่เข้าสู่ไฟล์บันทึก และไม่มี syslogd หรือบริการ syslog
‫อื่น ๆ
‫ภายในคอนเทนเนอร์ นักเทียบท่าจัดการการบันทึกของเราทั้งหมดสำหรับเรา
‫สิ่งที่เราต้องทำภายในคอนเทนเนอร์คือตรวจสอบให้แน่ใจว่าทุกสิ่งที่เราต้องการบันทึกในบันทึกนั้นถ่มน้ำลายลงสู่ stdout และ
‫stderr และนักเทียบท่าจะจัดการส่วนที่เหลือ
‫มีโปรแกรมบันทึกการทำงานจริง ๆ ที่เราสามารถใช้ใน Docker Engine
‫เพื่อควบคุมบันทึกทั้งหมดสำหรับคอนเทนเนอร์ทั้งหมดบนโฮสต์
‫และนั่นคือสิ่งที่คุณต้องการทำกับพวกเขา
‫มันเพิ่มความซับซ้อนให้กับแอปของคุณหากแอปของคุณกำลังทำการบันทึกเอง
‫จากนั้นหากคุณต้องจัดการกับไฟล์ในทุกคอนเทนเนอร์ตอนนี้คุณก็มีปัญหาว่าคุณจะลบไฟล์เหล่านั้นออกมาได้อย่างไรและสามารถค้นหาได้และเข้าถึงได้
‫ที่นี่เรากำลังนำบันทึก Nginx เริ่มต้นมาใช้และเรากำลังเชื่อมโยงบันทึกเหล่านั้นกับ stdout
‫เพื่อให้นักเทียบท่าสามารถจับพวกมันได้
‫เรายังมีคำสั่งเปิดเผย
‫โดยค่าเริ่มต้นไม่มีพอร์ต TCP หรือ UDP
‫เปิดอยู่ภายในคอนเทนเนอร์ มันไม่ได้เปิดเผยอะไรจากคอนเทนเนอร์ไปยังเครือข่ายเสมือนจริงเว้นแต่เราจะแสดงไว้ที่นี่
‫และแน่นอนเพราะนี่คือเว็บและพร็อกซีเซิร์ฟเวอร์มันจะเปิดเผย 80 และ 443
‫ตอนนี้คำสั่งเปิดเผยไม่ได้หมายความว่าพอร์ตเหล่านี้จะถูกเปิดโดยอัตโนมัติบนโฮสต์ของเรา
‫นั่นคือสิ่งที่คำสั่ง dash P คือเมื่อใดก็ตามที่เราใช้นักวิ่งรัน
‫สุดท้ายเรามี CMD ที่นี่
‫CMD เป็นพารามิเตอร์ที่จำเป็นซึ่งเป็นคำสั่งสุดท้ายที่จะรันทุกครั้งที่คุณเรียกใช้คอนเทนเนอร์ใหม่จากอิมเมจหรือทุกครั้งที่คุณรีสตาร์ทคอนเทนเนอร์ที่หยุด
‫มีเอกสารที่ยอดเยี่ยมจริง ๆ ในบทเหล่านี้ทั้งหมดรวมทั้งเอกสารอื่น ๆ อีกมากมายที่เรากำลังจะเข้าไปในภายหลังบนเว็บไซต์เอกสารนักเทียบท่าที่เอกสาร
‫นักเทียบท่า
‫com ซึ่งคุณสามารถค้นหาได้จากแหล่งข้อมูลของการบรรยายนี้
‫โอเคสิ่งเหล่านี้เป็นพื้นฐานใช่มั้ย ห้าบทที่แตกต่างกันเหล่านี้ค่อนข้างปกติในทุก ๆ Dockerfile
‫บางคนต้องมี
‫บางส่วนของพวกเขาเช่นวิ่งและ ENV และการเปิดเผยเป็นตัวเลือก
‫แต่พวกเขาค่อนข้างปกติสำหรับตู้คอนเทนเนอร์ส่วนใหญ่ที่คุณจะสร้างภาพ