JavaRush /จาวาบล็อก /Random-TH /ทำความรู้จักกับนักเทียบท่าครั้งแรก
Viacheslav
ระดับ

ทำความรู้จักกับนักเทียบท่าครั้งแรก

เผยแพร่ในกลุ่ม
การบรรจุลงตู้เป็นกลไกที่มักใช้ในทางปฏิบัติ ตัวอย่างเช่น เมื่อคุณค้นหาด้วย headhunter คุณจะพบตำแหน่งงานว่าง 477 ตำแหน่ง ณ วันนี้ที่กล่าวถึง Docker ดังนั้นจึงไม่ใช่ความคิดที่ดีที่จะทำความคุ้นเคยกับสิ่งที่เป็นอยู่ ฉันหวังว่าการทบทวนสั้นๆ นี้จะช่วยสร้างแนวคิดแรกได้ เขาจะสำรองข้อมูลด้วยสื่อเพิ่มเติม เช่น หลักสูตรใน Udemy การแนะนำ Docker ครั้งแรก - 1

การแนะนำ

ในการทบทวนสั้นๆ นี้ ฉันอยากจะพูดถึงหัวข้อต่างๆ เช่น การบรรจุคอนเทนเนอร์ และคุณต้องเริ่มต้นด้วยการทำความเข้าใจว่าจริงๆ แล้วคอนเทนเนอร์คืออะไร ตามวิกิพีเดีย " Containerization " คือการจำลองเสมือนระดับระบบปฏิบัติการ (เช่นไม่ใช่ฮาร์ดแวร์) ซึ่งเคอร์เนลของระบบปฏิบัติการจะดูแลรักษาอินสแตนซ์พื้นที่ผู้ใช้ที่แยกหลายรายการ แทนที่จะเป็นเพียงอินสแตนซ์เดียว " พื้นที่ผู้ใช้ " คือพื้นที่ที่อยู่หน่วยความจำเสมือนของระบบปฏิบัติการที่สงวนไว้สำหรับโปรแกรมของผู้ใช้ อินสแตนซ์พื้นที่ผู้ใช้ (โดยทั่วไปเรียกว่าคอนเทนเนอร์) จะเหมือนกับอินสแตนซ์ระบบปฏิบัติการเดียวโดยสิ้นเชิงจากมุมมองของผู้ใช้ เคอร์เนลช่วยให้มั่นใจได้ถึงการแยกคอนเทนเนอร์โดยสมบูรณ์ ดังนั้นโปรแกรมจากคอนเทนเนอร์ที่ต่างกันจึงไม่มีผลกระทบต่อกัน ปรากฎว่าคอนเทนเนอร์คือการจำลองเสมือนของซอฟต์แวร์นั่นคือการจำลองเสมือนในระดับระบบปฏิบัติการซึ่งเคอร์เนลของระบบปฏิบัติการรับผิดชอบ คุณลักษณะเฉพาะประการหนึ่งของแนวทางนี้คือคอนเทนเนอร์ทั้งหมดใช้เคอร์เนลทั่วไป เช่นเดียวกับระบบปฏิบัติการโฮสต์ (นั่นคือระบบปฏิบัติการที่คอนเทนเนอร์นั้นตั้งอยู่) สิ่งนี้ช่วยให้คุณกำจัดค่าใช้จ่ายในการจำลองฮาร์ดแวร์เสมือนและการเปิดตัวอินสแตนซ์ระบบปฏิบัติการเต็มรูปแบบ เราสามารถพูดได้ว่านี่คือการจำลองเสมือนแบบ "น้ำหนักเบา" เคอร์เนลเป็นส่วนสำคัญของระบบปฏิบัติการที่ให้แอปพลิเคชันต่างๆ เข้าถึงทรัพยากรคอมพิวเตอร์ร่วมกัน เช่น เวลาประมวลผล หน่วยความจำ ฮาร์ดแวร์ภายนอก และอุปกรณ์อินพุตและเอาต์พุตภายนอก โดยทั่วไปเคอร์เนลยังให้บริการระบบไฟล์และโปรโตคอลเครือข่ายด้วย โดยทั่วไปนี่คือหัวใจของทั้งระบบ สำหรับข้อมูลเพิ่มเติม การพิจารณาเนื้อหา " ข้อมูลทั่วไปเกี่ยวกับคอนเทนเนอร์ " อาจเป็นประโยชน์ และอีกสองสามคำเพื่อทำให้การแนะนำเสร็จสมบูรณ์ ตอนนี้เราเข้าใจแล้วว่าระบบปฏิบัติการมีเคอร์เนล โดยจัดให้มีการแยกอินสแตนซ์พื้นที่ผู้ใช้ ในบริบทนี้ คุณอาจเจอคำว่า " cgroups " นี่คือชื่อของกลไกเคอร์เนล Linux ที่ช่วยให้คุณบรรลุเป้าหมายนี้ได้ ดังนั้นเราจึงสามารถพูดได้ว่าเส้นทางของการบรรจุคอนเทนเนอร์เริ่มต้นจากระบบ Linux อย่างไรก็ตาม เริ่มต้นด้วย Windows 10 การรองรับคอนเทนเนอร์ก็ปรากฏขึ้นเช่นกัน หากต้องการทำงานกับการจำลองเสมือน คุณต้องกำหนดค่าการสนับสนุนการจำลองเสมือนใน BIOS ของคอมพิวเตอร์ของคุณ วิธีการทำเช่นนี้ขึ้นอยู่กับคอมพิวเตอร์ ตัวอย่างเช่น อาจมีลักษณะดังนี้:
การแนะนำครั้งแรกกับ Docker - 2
บน Windows คุณสามารถตรวจสอบได้หลายวิธี ตัวอย่างเช่น คุณสามารถดาวน์โหลดยูทิลิตี้พิเศษ ได้จากเว็บไซต์ Microsoft: Hardware-Assisted Virtualization Detection Tool เป็นเรื่องที่ควรค่าแก่การกล่าวถึงแนวคิดที่สำคัญอีกประการหนึ่ง - ไฮเปอร์ไวเซอร์ Hypervisor เป็นจอภาพเครื่องเสมือนซึ่งเป็นโปรแกรมสำหรับรับรองการทำงานแบบขนานของระบบปฏิบัติการหลายระบบบนคอมพิวเตอร์เครื่องเดียวกัน ไฮเปอร์ไวเซอร์ช่วยให้แน่ใจว่าระบบปฏิบัติการแยกออกจากกัน และแบ่งปันทรัพยากรระหว่างระบบปฏิบัติการที่ทำงานอยู่ ไฮเปอร์ไวเซอร์ตัวหนึ่งคือOracle VirtualBox
การแนะนำครั้งแรกกับ Docker - 3

นักเทียบท่า

ดังนั้นการจำลองเสมือนที่ชัดเจนคืออะไร แต่จะใช้มันอย่างไร? และที่นี่นักเทียบท่าก็มาช่วยเหลือเรา Docker เป็นซอฟต์แวร์สำหรับการปรับใช้และการจัดการแอปพลิเคชันในสภาพแวดล้อมแบบคอนเทนเนอร์โดยอัตโนมัติ เริ่มต้นด้วยความจริงที่ว่า Docker มีแนวคิดเช่น Docker Enginge และคุณควรเริ่มต้นด้วยเว็บไซต์ Docker อย่างเป็นทางการและส่วน " ภาพรวมนักเทียบท่า "
การแนะนำครั้งแรกกับ Docker - 4
เอกสารระบุว่านักเทียบท่าประกอบด้วย:
  • เซิร์ฟเวอร์นักเทียบท่าเรียกว่ากระบวนการ Docker Daemon (นักเทียบท่า)
  • อินเทอร์เฟซบรรทัดคำสั่งหรือที่เรียกว่า CLI (นักเทียบท่า)
  • REST API ที่อธิบายว่าโปรแกรมสามารถ "พูดคุย" กับ deamon และบอกว่าต้องทำอย่างไรได้อย่างไร
ก่อนที่เราจะเจาะลึกไปไกลกว่านี้ เรามาติดตั้ง docker กันก่อน นั่นคือ ติดตั้ง docker daemon เว็บไซต์ Docker มีคำแนะนำในการติดตั้ง " Docker for Windows " สิ่งที่น่าสนใจคือ Docker มีข้อกำหนดของระบบเป็นของตัวเอง และหากคุณเช่นฉันมี Windows รุ่นเก่าเช่น Windows 7 คุณต้องใช้ Docker Toolbox
การแนะนำครั้งแรกกับ Docker - 5

กล่องเครื่องมือนักเทียบท่า

เพื่อติดตั้ง Docker บนเครื่องเก่าที่ไม่ตรงตามความต้องการของระบบ เว็บไซต์ระบุเช่นนั้น “Legacy Desktop Solution” ไปที่หน้า " Docker Toolbox " แล้วดาวน์โหลด ชุดนี้มีน้ำหนักประมาณ 211 เมกะไบต์ เราจะติดตั้งเป็นค่าเริ่มต้นนั่นคือเราจะเห็นด้วยกับทุกสิ่งอย่างอ่อนโยนโดยไม่ต้องจัดเรียงธงใหม่ หลังการติดตั้งเราจะตรวจสอบว่าทุกอย่างเรียบร้อยดี ในอนาคตสนามรบของเราจะเป็นบรรทัดคำสั่ง ฉันไม่แนะนำให้ใช้บรรทัดคำสั่งของ Windows เนื่องจากอาจมีปัญหาที่ไม่ชัดเจนเกิดขึ้น ควรใช้ bash shell ดีกว่า บน Windows วิธีที่แนะนำมากที่สุดในการติดตั้งคือติดตั้ง ระบบควบคุมเวอร์ชัน gitซึ่งจะยังคงมีประโยชน์อยู่ เพราะการ “รวมกลุ่ม” เข้ากับมันจะเป็นการทุบตีที่เราต้องการ สำหรับรีวิวนี้ ฉันจะใช้ git bash คุณยังสามารถติดตั้ง bash ด้วยCYGWIN มาเปิดตัว bash หรือ git bash กันเถอะ เรามาตรวจสอบกันดีกว่าว่าเราได้ติดตั้ง Docker Machine หรือที่เรียกว่า Docker Machine แล้ว: docker-machine -version Docker Machine นี้คืออะไร? Docker Machineเป็นยูทิลิตี้สำหรับจัดการโฮสต์ที่เชื่อมต่อ (ซึ่งเป็นโฮสต์ที่ติดตั้ง Docker Engine) หากเราทันทีหลังจากติดตั้ง Docket Toolbox ดูเครื่องเทียบท่าโดยใช้คำสั่งdocker-machine lsเราจะเห็นรายการว่าง:
การแนะนำครั้งแรกกับ Docker - 6
มาสร้างเครื่องใหม่กันเถอะ ในการดำเนินการนี้ เราจำเป็นต้องเรียกใช้ คำสั่ง create : docker-machine create -- driver virtualbox javarush: เราจะเห็นบันทึกการสร้างเครื่องนักเทียบท่า:
การแนะนำครั้งแรกกับ Docker - 7
สิ่งที่เราสนใจที่นี่คือต่อไปนี้ Boot2Docker คืออะไร? นี่เป็นการกระจาย Linux แบบเรียบง่ายสำหรับการรัน Docker Engine (เราเข้าใจว่า Docker ใช้งานได้ด้วยเครื่องมือการจำลองเสมือนของ Linux และใน Windows กลไกที่จำเป็นปรากฏขึ้นโดยเริ่มจาก Windows 10 เท่านั้น) การแจกจ่ายนี้อิงตามการแจกจ่าย " Tiny Core Linux " ยังกล่าวถึงเกี่ยวกับ VirtualBox VM นี่เป็นเพราะว่าเราระบุ--driver virtualboxไว้ เครื่องเสมือนใหม่ถูกสร้างขึ้นใน VirtualBox จากอิมเมจ Boot2Docker หลังจากการสร้าง เราสามารถเปิด VirtualBox ได้ (เนื่องจาก VirtualBox ได้รับการติดตั้งด้วย Docker Toolbox) และดูเครื่องเสมือนที่สร้างขึ้นสำหรับเครื่องนักเทียบท่า:
การแนะนำครั้งแรกกับ Docker - 8
หลังจากการสร้าง เราจะได้รับแจ้งให้รันคำสั่ง “ docker-machine env ” เพื่อรับตัวแปรสภาพแวดล้อมที่จำเป็นต้องกำหนดค่าเพื่อเชื่อมต่อกับเครื่องนักเทียบท่า:
การแนะนำครั้งแรกกับ Docker - 9
หลังจากดำเนินการคำสั่งนี้โดยใช้เครื่องนักเทียบท่า เราจะเชื่อมต่อกับโฮสต์ที่เชื่อมต่อระยะไกล (ในกรณีนี้คือโฮสต์เสมือนที่โฮสต์บน Virtual Box) และสามารถดำเนินการคำสั่งนักเทียบท่าในเครื่องได้ราวกับว่าเรากำลังดำเนินการคำสั่งเหล่านั้นบนโฮสต์ระยะไกล หากต้องการตรวจสอบ เราสามารถรันคำสั่ง " docker info " ได้ หากไม่ได้สร้างการเชื่อมต่อกับเครื่องนักเทียบท่า เราจะได้รับข้อผิดพลาด และหากทุกอย่างเรียบร้อยดี ข้อมูลเกี่ยวกับนักเทียบท่าบนเครื่องนักเทียบท่า ตอนนี้เป็นเวลาที่จะทำความเข้าใจว่า Docker ทำงานอย่างไรและใช้งานอย่างไร
การแนะนำ Docker ครั้งแรก - 10

คอนเทนเนอร์นักเทียบท่า

ดังนั้นเราจึงมีนักเทียบท่า นักเทียบท่านี้คืออะไร? เอกสารประกอบของ Docker และส่วน " เริ่มต้นใช้งาน " จะช่วยให้เราเข้าใจสิ่งนี้ ส่วนเบื้องต้นของส่วนนี้จะแนะนำDocker Concepts โดยระบุว่า Docker เป็นแพลตฟอร์มสำหรับการพัฒนา ดีบัก และรันแอปพลิเคชันในคอนเทนเนอร์ ดังนั้นสิ่งสำคัญสำหรับ Docker ก็คือคอนเทนเนอร์ แม้ว่าคุณจะดูโลโก้นักเทียบท่า แต่ก็เป็นวาฬที่ถือภาชนะไว้ที่ด้านหลัง แต่ภาชนะคืออะไร? ถัดไปในส่วน " รูปภาพและคอนเทนเนอร์ " ระบุว่าคอนเทนเนอร์เป็นอินสแตนซ์ที่รันอยู่ของรูปภาพ และรูปภาพก็คือ “แพ็คเกจ” ที่มีทุกสิ่งที่จำเป็นสำหรับแอปพลิเคชัน (โค้ด สภาพแวดล้อม ไลบรารี การตั้งค่า ฯลฯ) ตอนนี้เรามาลองด้วยตัวเอง เว็บไซต์ Docker มีส่วนที่เรียกว่า " ตัวอย่างนักเทียบท่า " ซึ่งรวมถึง " นักเทียบท่าสำหรับมือใหม่ " ตัวอย่างจากที่นี่ดูน่าสนใจสำหรับฉันมากขึ้น ทันใดนั้นเราก็อยากจะทำความคุ้นเคยกับAlpine Linuxและเราสามารถทำได้โดยใช้คอนเทนเนอร์ Docker เพื่อให้ได้ภาพ เราต้อง "ดึง" หรือ "ดึง" มันออกมา ดังนั้นเราจึงรัน คำสั่ง docker pull :docker pull apline
การแนะนำครั้งแรกกับ Docker - 11
อย่างที่เราเห็น เรากำลังดาวน์โหลดจากที่ไหนสักแห่ง ตามค่าเริ่มต้น Docker จะดูที่เก็บ ข้อมูลบนเครือข่ายhttps://hub.docker.com หลังจากดึงข้อมูลรูปภาพสำเร็จแล้ว เราสามารถตรวจสอบรายการรูปภาพที่มีอยู่ได้โดยการรัน คำสั่ง docker image :
การแนะนำครั้งแรกกับ Docker - 12
ตอนนี้เรามีรูปภาพ apline แล้ว เนื่องจากคอนเทนเนอร์เป็นอินสแตนซ์ของรูปภาพที่ทำงานอยู่ เรามาเริ่มอิมเมจนี้กันดีกว่า มาเริ่มคอนเทนเนอร์โดยใช้คำdocker run alpineสั่ง อย่างที่เราเห็นไม่มีอะไรเกิดขึ้น หากเราดำเนินการคำสั่งdocker psเพื่อแสดงคอนเทนเนอร์ที่ใช้งานอยู่ทั้งหมด เราก็จะไม่ได้รับอะไรเลย แต่ถ้าเราดำเนินการdocker ps -aเราจะเห็นคอนเทนเนอร์ทั้งหมด:
ทำความรู้จักกับ Docker ครั้งแรก - 13
ประเด็นก็คือเราไม่ได้เปิดตัว Docker ในโหมดโต้ตอบ ดังนั้นเขาจึงปฏิบัติตามคำสั่งและหยุด คำสั่งคือการเปิดเทอร์มินัล มาทำสิ่งเดียวกัน แต่ในโหมดโต้ตอบ (ด้วย แฟล็ก -it ):
การแนะนำครั้งแรกกับ Docker - 14
อย่างที่คุณเห็น หลังจากเอาชนะข้อผิดพลาดหนึ่งข้อและใช้คำใบ้ เราก็ไปที่คอนเทนเนอร์และสามารถแก้ไขมันได้! หากต้องการออกจากคอนเทนเนอร์โดยไม่หยุดการทำงาน คุณสามารถCtrl + p + qกด หากเรารันตอนนี้docker psเราจะเห็นคอนเทนเนอร์ที่ใช้งานอยู่หนึ่งคอนเทนเนอร์ หากต้องการเข้าสู่คอนเทนเนอร์ที่รันอยู่แล้ว ให้รัน คำสั่ง docker exec :
ทำความรู้จักกับ Docker ครั้งแรก - 15
ฉันแนะนำให้อ่านคำอธิบายของตัวอย่าง Docker เพื่อดูคำอธิบายที่ดีเยี่ยมว่าทั้งหมดนี้เกิดขึ้นได้อย่างไร: “ 1.0 การเรียกใช้คอนเทนเนอร์แรกของคุณ ” ฉันชอบเพราะทุกอย่างเขียนที่นั่นด้วยวิธีที่เข้าถึงได้และเข้าใจได้ดีมาก หากต้องการเรียบเรียงใหม่โดยย่อ เราเชื่อมต่อโดยใช้ docker-machine กับเครื่องเสมือนที่รัน Docker Daemon เมื่อใช้ CLI บน REST API เราขอให้เปิดอิมเมจอัลไพน์ นักเทียบท่าพบแล้วจึงไม่ดาวน์โหลด นักเทียบท่าสร้างคอนเทนเนอร์ใหม่และรันคำสั่งที่เราระบุไว้ในคอนเทนเนอร์นี้ และแน่นอนว่าทั้งหมดนี้เป็นสิ่งที่ดี แต่ทำไมเราถึงต้องการทั้งหมดนี้? และที่นี่เราต้องพิจารณาว่านักเทียบท่าสร้างภาพอย่างไร และเขาสร้างมันขึ้นมาจาก dockerfile
ทำความรู้จักกับ Docker ครั้งแรก - 16

Dockerfile

ตามที่ระบุไว้ในการอ้างอิง Dockerfile Dockerfile คือไฟล์ข้อความที่มีคำสั่งทั้งหมดในการรับรูปภาพ ในความเป็นจริง รูปภาพทั้งหมดที่เราได้รับ (แม้แต่ Alpine จากตัวอย่างด้านบน) ถูกสร้างขึ้นจาก dockerfile มาสร้างอิมเมจของเราด้วยแอปพลิเคชัน Java กันดีกว่า และก่อนอื่นเราต้องการแอปพลิเคชัน Java นี้ ฉันแนะนำให้ใช้ระบบ Gradle build ซึ่งคุณสามารถอ่านเพิ่มเติมได้ในรีวิวสั้น ๆ นี้: “ A Brief Introduction to Gradle ” จะช่วยเราในการสร้างโปรเจ็กต์ " Gradle Build init Plugin " มาสร้างแอปพลิเคชัน Java ใหม่โดยใช้ Gradle: gradle init --type java-application คำสั่งนี้จะสร้างเทมเพลตโปรเจ็กต์ Java นี่เป็นแอปพลิเคชันแบบสแตนด์อโลน แต่เราต้องการสร้างแอปพลิเคชันเว็บ มาลบคลาส App และ AppTest กัน (สร้างขึ้นโดยอัตโนมัติโดย Gradle Build Init Plugin) หากต้องการสร้างเว็บแอปพลิเคชันอย่างรวดเร็ว เราจะใช้บทช่วยสอนจาก Gradle: “ การสร้าง Java Web Applications ” ตามบทช่วยสอน เรามาทำกัน: คุณต้องระวังที่นี่ และเช่นเคย ตัวอย่างอาจมีข้อผิดพลาด นี่คือ:
การแนะนำครั้งแรกกับ Docker - 17
ตอนนี้ เพื่อทดสอบ ให้เพิ่มปลั๊กอิน gretty ลงใน build.gradle ดังที่ระบุไว้ในส่วน " เพิ่มปลั๊กอิน gretty และเรียกใช้แอป ":
plugins {
    id 'war'
    id 'org.gretty' version '2.2.0'
}
สิ่งที่น่าสนใจคือ Gretty ไม่เห็นข้อผิดพลาดในHelloServletดังที่อธิบายไว้ข้างต้น นี่เป็นการพิสูจน์ว่าแอปพลิเคชันสามารถทำงานได้แตกต่างกันในสภาพแวดล้อมที่แตกต่างกัน Gretty สามารถทำงานได้ในกรณีที่เซิร์ฟเวอร์สแตนด์อโลนทั่วไปเกิดข้อผิดพลาด สิ่งที่เหลืออยู่คือการตรวจสอบว่าแอปพลิเคชันทำงานอย่างถูกต้องหรือไม่ มาทำกัน:gradle appRun
ทำความรู้จักกับ Docker ครั้งแรก - 18
หากทุกอย่างเรียบร้อยดี ให้ใช้คำสั่งgradle warเพื่อรวบรวมไฟล์เก็บถาวรด้วยส่วนขยายสงคราม (ไฟล์เก็บถาวรเว็บ) ตามค่าเริ่มต้น gradle จะสร้างมันขึ้นมาในรูปแบบ\build\libs. ตอนนี้เราพร้อมที่จะเขียน dockerfile แล้ว การใช้ " การอ้างอิง Dockerfile " เราจะสร้าง Dockerfile มาสร้างไฟล์ชื่อ "Dockerfile" ในรูทของโปรเจ็กต์ Java ของเรา (ในตำแหน่งเดียวกับบิลด์สคริปต์) มาเปิดแก้ไขกันได้เลย ไฟล์นี้มีรูปแบบของตัวเอง ตามที่อธิบายไว้ในส่วน " การอ้างอิงไฟล์ Docker: รูปแบบ " dockerfile ใดๆ จะขึ้นต้นด้วยคำสั่ง FROM ซึ่งระบุถึง "อิมเมจพื้นฐาน" เราสามารถพูดได้ว่านี่คือภาพหลักตามที่เราสร้างภาพขึ้นมา การเลือกรูปภาพหลักนั้นง่ายมากสำหรับเรา เว็บแอปพลิเคชันต้องการเว็บเซิร์ฟเวอร์ ตัวอย่างเช่น เราสามารถใช้เว็บเซิร์ฟเวอร์ Tomcat เราไปที่ที่เก็บ Docker อย่างเป็นทางการซึ่งเรียกว่าdocker hub เราดูที่นั่นเพื่อดูว่าภาพที่เราต้องการอยู่ที่นั่นหรือไม่:
ทำความรู้จักกับ Docker ครั้งแรก - 19
นอกจากนี้ยังควรทำความเข้าใจด้วยว่าภาพแมวตัวผู้นั้นเรียกว่า แต่นอกจากชื่อแล้วยังมีแท็กอีกด้วย แท็กก็เหมือนกับเวอร์ชัน รูปภาพ Tomcat ของเวอร์ชันต่างๆ จะแตกต่างกันไปตามเวอร์ชันของ Tomcat ที่ใช้ jre เวอร์ชันใด และอิมเมจพื้นฐานใด ตัวอย่างเช่น เราสามารถได้อิมเมจdocker pull tomcat:9-jre8-alpine โดยจะใช้ Tomcat เวอร์ชัน 9, jre เวอร์ชัน 8 และอิมเมจอัลไพน์เป็นฐาน นี่อาจเป็นสิ่งสำคัญในการลดขนาดรูปภาพของเรา:
ทำความรู้จักกับ Docker ครั้งแรก - 20
อย่างที่เราเห็นความแตกต่างนั้นใหญ่มาก หากเราสร้างอิมเมจของเราโดยใช้ Tomcata Alpine เราจะเริ่มต้นด้วยขนาดเพียง 100 เมกะไบต์ ไม่ใช่ 600 ดังนั้น เราจะเพิ่มเนื้อหาต่อไปนี้ลงใน dockerfile ที่สร้างขึ้นก่อนหน้านี้:
# Базовый образ, "наследуемся" от него
FROM tomcat:9-jre8-alpine
# Копируем из Build Context'а собранный web archive в каталог томката
COPY build/libs/docker.war /usr/local/tomcat/webapps/docker.war
# Меняем рабочий каталог на томкатовский
WORKDIR /usr/local/tomcat
# Открываем порт 8080 для контейнера, т.к. его слушает томкат
EXPOSE 8080
และตอนนี้เรามารันคำสั่งเพื่อสร้างอิมเมจ: docker build -t jrdocker ..
ทำความรู้จักกับ Docker ครั้งแรก - 21
-t- นี่คือแท็กนั่นคือสิ่งที่จะเรียกว่าภาพที่ประกอบ จุดที่ท้ายหมายความว่าเราเพิ่มไดเร็กทอรีปัจจุบัน (ไดเร็กทอรีที่มีไฟล์ dockerfile และตำแหน่งที่เราเรียกใช้คำสั่ง) ไปBuild contextที่ Build context- นี่คือบริบทของไฟล์เหล่านั้นที่พร้อมใช้งานเมื่อสร้างไฟล์นักเทียบท่า อย่างที่คุณเห็น ด้วยเหตุนี้ เราจึงสามารถคัดลอกไฟล์ war ที่ประกอบแล้วลงในอิมเมจของเรา ลงในไดเร็กทอรีของเว็บเซิร์ฟเวอร์ได้ ตอนนี้เรามารันอิมเมจของเรา:docker run -d --rm -p 8888:8080 jrdocker
ทำความรู้จักกับ Docker ครั้งแรก - 22
หากต้องการทราบว่าเซิร์ฟเวอร์เริ่มทำงานแล้วหรือไม่ คุณสามารถดูบันทึกจากคอนเทนเนอร์ได้ สามารถรับบันทึกได้โดยใช้คำสั่ง docker logs โดยระบุคอนเทนเนอร์ด้วย ID หรือชื่อ ตัวอย่างเช่น:
ทำความรู้จักกับนักเทียบท่าครั้งแรก - 23
อย่าลืมว่าเราสามารถไปที่คอนเทนเนอร์ที่ทำงานอยู่ตามชื่อด้วยคำสั่งได้winpty docker exec -it NameКонтейнера sh ตลอดเวลา ตอนนี้สิ่งที่เหลืออยู่คือการเชื่อมต่อ ก่อนหน้านี้ เราระบุEXPOSEนั่นคือเราอนุญาตให้เข้าถึงพอร์ต 8080 จากภายในคอนเทนเนอร์ เมื่อเราเปิดตัวคอนเทนเนอร์เอง เราได้ระบุแท็ก -p ( พอร์ตขาเข้า ) ดังนั้นจึงเชื่อมโยงพอร์ต 8080 บนคอนเทนเนอร์ (เว็บเซิร์ฟเวอร์ Tomcat กำลังรอการเชื่อมต่ออยู่ที่นั่น) กับพอร์ต 8888 บนเครื่องที่มี docker daemon อย่างที่เราจำได้ เราได้เปิดตัว docker daemon ไม่ใช่โดยตรง แต่เปิดตัวผ่าน docker-machine ดังนั้น เราจะขอข้อมูลบนเครื่อง docker ของเราอีกครั้งโดยใช้คำสั่ง docker-machine ls และติดต่อเซิร์ฟเวอร์ในคอนเทนเนอร์:
การแนะนำครั้งแรกกับ Docker - 24
ดังนั้นคุณและฉันเพิ่งเปิดตัวเว็บแอปพลิเคชันของเราในคอนเทนเนอร์ Docker! ) ฉันอยากจะทราบสิ่งต่อไปนี้ด้วย ในกรณีที่เกิดปัญหาในการเข้าถึง คุณควรจำไว้ว่าเครื่อง Docker นั้นเป็นเครื่องเสมือน Virtual BOX เป็นอันดับแรก อาจมีปัญหากับการตั้งค่าเครือข่ายของเครื่องเสมือน การกำหนดค่า VMBox ที่ใช้งานได้อาจมีลักษณะดังนี้:
ทำความรู้จักกับ Docker ครั้งแรก - 25
ทำความรู้จักกับ Docker ครั้งแรก - 26

เลเยอร์

เราทราบแล้วว่าอิมเมจถูกสร้างขึ้นจาก dockerfiles และ dockerfiles นั้นเป็นชุดคำสั่ง นอกจากนี้เรายังพบว่า dockerfile มีพาเรนต์ และขนาดของภาพก็แตกต่างกัน สิ่งที่น่าสนใจคือคุณสามารถดูประวัติความ เป็นมาของการสร้างอิมเมจได้โดยใช้ คำสั่ง docker history ตัวอย่างเช่น:
ทำความรู้จักกับ Docker ครั้งแรก - 27
สิ่งสำคัญคือต้องพูดแบบนี้เพื่อทำความเข้าใจว่า โดยพื้นฐานแล้ว แต่ละภาพคือชุดของภาพ การเปลี่ยนแปลงรูปภาพแต่ละครั้ง (แต่ละคำสั่งใหม่ใน dockerfile) จะสร้างเลเยอร์ใหม่ที่มี ID ของตัวเอง คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเลเยอร์ได้ในเอกสารประกอบ " Docker: Images and Layers " ฉันขอแนะนำให้อ่านบทความเกี่ยวกับHabréด้วย: “ ภาพนักเทียบท่าและคอนเทนเนอร์ในรูปภาพ

บทสรุป

ฉันหวังว่าภาพรวมสั้นๆ นี้เพียงพอที่จะทำให้คุณสนใจเกี่ยวกับคอนเทนเนอร์ ด้านล่างนี้คือลิงก์ไปยังเนื้อหาเพิ่มเติมที่อาจเป็นประโยชน์: #เวียเชสลาฟ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION