﻿1
00:00:02,530 --> 00:00:15,300
‫ในการบรรยายนี้ เราจะพูดถึงการผูกมัดและข้อมูลถาวรในการเมานท์เหล่านั้น ข้อกำหนดคือสิ่งที่คุณเพิ่งรู้เกี่ยวกับการจัดการคอนเทนเนอร์และวิธีการใช้งานคอนเทนเนอร์

2
00:00:15,320 --> 00:00:20,230
‫โดดกันเลย มาพูดถึงการผูกมัดกัน พวกมันเจ๋งจริงๆ

3
00:00:20,240 --> 00:00:26,180
‫เมื่อฉันเรียนรู้เกี่ยวกับพวกเขาครั้งแรก มันทำให้ฉันรู้สึกว่าฉันจะใช้ Docker อย่างง่ายดายเพื่อการพัฒนาในท้องถิ่นได้อย่างไร

4
00:00:26,180 --> 00:00:35,330
‫จริงๆ แล้ว bind mount เป็นเพียงการแมปไฟล์โฮสต์ หรือไดเร็กทอรี ลงในไฟล์คอนเทนเนอร์หรือไดเร็กทอรี

5
00:00:35,330 --> 00:00:35,330
‫คุณทำได้แค่นั้น

6
00:00:35,330 --> 00:00:43,780
‫คุณสามารถระบุไดเร็กทอรีหรือเพียงไฟล์เดียว ในเบื้องหลัง มีเพียงสองตำแหน่งที่ชี้ไปยังตำแหน่งทางกายภาพเดียวกันบนดิสก์

7
00:00:43,910 --> 00:00:52,620
‫อีกครั้ง สิ่งนี้จะข้าม UFS จริง ๆ เช่นเดียวกับโวลุ่มอื่น ๆ เพื่อไม่ให้ล้างตำแหน่งโฮสต์ของคุณเมื่อคุณลบคอนเทนเนอร์

8
00:00:52,640 --> 00:00:58,550
‫หากมีไฟล์ใดๆ ในคอนเทนเนอร์ที่คุณแมปไฟล์โฮสต์ด้วย ไฟล์โฮสต์จะชนะ ไม่ได้ลบไฟล์ในคอนเทนเนอร์ที่เขียนทับจริง

9
00:00:58,550 --> 00:01:04,770
‫ๆ เพราะไม่ได้เขียนทับอะไรในคอนเทนเนอร์จริงๆ

10
00:01:04,910 --> 00:01:07,100
‫มันอยู่ที่นั่นในขณะที่ตัวยึดผูกอยู่

11
00:01:07,100 --> 00:01:11,570
‫นาทีที่คุณไม่ต้องการการเมานต์การผูกอีกต่อไป และคุณเรียกใช้คอนเทนเนอร์อีกครั้งโดยไม่มีคอนเทนเนอร์

12
00:01:11,570 --> 00:01:17,650
‫คุณจะเห็นข้อมูลพื้นฐานที่เคยมีมาก่อน เนื่องจากโดยปกติแล้วการเมานต์การผูกมัดมักเป็นโฮสต์เฉพาะ

13
00:01:17,660 --> 00:01:21,870
‫จึงจำเป็นต้องมีข้อมูลเฉพาะเพื่ออยู่บนฮาร์ดไดรฟ์ของโฮสต์จึงจะสามารถทำงานได้

14
00:01:21,890 --> 00:01:23,500
‫คุณไม่สามารถระบุได้ใน Dockerfile

15
00:01:23,510 --> 00:01:29,080
‫คุณต้องใช้เมื่อรันไทม์เมื่อคุณใช้คำสั่ง docker container run คุณสามารถดูรูปแบบได้ที่นี่

16
00:01:29,090 --> 00:01:33,980
‫มันคือ -v ที่เราเคยใช้มาก่อน ที่ด้านซ้ายของโคลอนเท่านั้น

17
00:01:34,100 --> 00:01:38,360
‫จริงๆ แล้วเรากำลังใส่พาธแบบเต็มมากกว่าแค่ชื่อ

18
00:01:38,360 --> 00:01:42,260
‫และวิธีที่ Docker สามารถบอกความแตกต่างระหว่างวอลลุมที่มีชื่อได้ อย่างที่เราทำเมื่อสักครู่นี้

19
00:01:42,410 --> 00:01:46,490
‫กับ bind mount ก็คือการเมานต์ที่ผูกนั้นเริ่มต้นด้วยเครื่องหมายสแลช

20
00:01:46,490 --> 00:01:52,120
‫บน Windows คุณจะสังเกตเห็นว่าเป็นเครื่องหมายทับสองตัว ตามด้วยอักษรระบุไดรฟ์ ตามด้วยเส้นทางของคุณ

21
00:01:52,130 --> 00:01:57,620
‫ตราบใดที่คุณมีเครื่องหมายทวิภาคด้านซ้ายและด้านขวา คุณสามารถแมปสิ่งที่คุณต้องการจากโฮสต์ลงในคอนเทนเนอร์ได้จริงๆ

22
00:01:57,620 --> 00:02:01,860
‫และคุณยังสามารถระบุสิ่งต่างๆ เช่น อ่านอย่างเดียวได้

23
00:02:01,880 --> 00:02:12,940
‫ประเด็นสำคัญคือการพัฒนาและเรียกใช้บริการภายในคอนเทนเนอร์ของคุณซึ่งกำลังเข้าถึงไฟล์ที่คุณใช้บนโฮสต์หรือการเปลี่ยนแปลง

24
00:02:12,950 --> 00:02:14,720
‫ลองทำสิ่งนั้นกับ Nginx

25
00:02:14,930 --> 00:02:22,370
‫หากคุณไปที่รูทของที่เก็บของเราสำหรับหลักสูตรนี้ จากนั้นเราจะไปที่ไดเร็กทอรี Dockerfile

26
00:02:22,370 --> 00:02:24,750
‫sample 2 ตอนนี้เราอยู่ที่นี่ก่อนหน้านี้

27
00:02:24,770 --> 00:02:28,580
‫ถ้าคุณจำได้ มีสองไฟล์ นี่สำหรับ Nginx ใช่ไหม

28
00:02:28,580 --> 00:02:39,050
‫ถ้าเราดูที่ Dockerfile อย่างรวดเร็ว มันค่อนข้างง่าย เป็นเพียงการระบุไดเร็กทอรีการทำงานแล้วคัดลอกไฟล์ดัชนีลงในไดเร็กทอรีนั้น

29
00:02:39,050 --> 00:02:40,490
‫ไม่มีเล่มที่นี่

30
00:02:40,490 --> 00:02:45,290
‫การเชื่อมต่อแบบผูกไม่จำเป็นต้องใช้ไดรฟ์ข้อมูล แม้ว่าจะมีไดรฟ์ข้อมูลอยู่ที่นั่นก็ตาม

31
00:02:45,530 --> 00:02:52,590
‫เจ้าบ้านชนะเสมอ จำได้ไหม? เมื่อเรารัน docker container

32
00:02:52,630 --> 00:02:56,330
‫เราทำ -d... ตั้งชื่อมันว่า nginx

33
00:02:56,390 --> 00:03:00,420
‫ให้พอร์ต 8080 เหมือนเดิม

34
00:03:00,770 --> 00:03:12,230
‫จากนั้นเราจะเพิ่มระดับเสียงในครั้งนี้ และฉันต้องบอกมันว่าไดเร็กทอรีการทำงานปัจจุบันของฉันจะถูกติดตั้งลงในไดเร็กทอรีการทำงานนั้นในคอนเทนเนอร์

35
00:03:12,230 --> 00:03:12,230
‫เนื่องจากไฟล์ดัชนีของฉันอยู่ที่นี่ในโฟลเดอร์นี้

36
00:03:13,430 --> 00:03:19,040
‫ฉันจึงต้องการให้มันอยู่ในคอนเทนเนอร์ เพื่อที่ฉันจะได้สามารถแก้ไขได้ที่นี่ และมันปรากฏอยู่ในคอนเทนเนอร์

37
00:03:19,040 --> 00:03:20,320
‫ดังนั้นมันจะสมเหตุสมผลในไม่กี่วินาที

38
00:03:20,540 --> 00:03:24,280
‫นี่คือเคล็ดลับสั้นๆ สั้นๆ แทนที่จะต้องคิดหาเส้นทางทั้งหมดและพิมพ์ทั้งหมดลงไป

39
00:03:24,290 --> 00:03:28,370
‫คุณสามารถใช้ pwd ตรงนี้ได้

40
00:03:28,460 --> 00:03:36,210
‫ซึ่งเป็นเชลล์ช็อตคัทที่ระบุว่า 'พิมพ์ไดเร็กทอรีการทำงานและแทนที่คำสั่งนี้ด้วยพาธนั้น

41
00:03:36,210 --> 00:03:36,210
‫'

42
00:03:36,380 --> 00:03:43,460
‫จากนั้นเราจะใช้ไดเร็กทอรีการทำงานเดียวกันจาก Dockerfile ที่นั่น จากนั้นเราจะระบุอิมเมจ

43
00:03:43,460 --> 00:03:45,360
‫Nginx

44
00:03:47,590 --> 00:03:54,480
‫สิ่งที่ฉันจะทำ เร็วๆ นี้ คือ ฉันจะเปิดหน้าต่างเทอร์มินัลอีกหน้าต่างหนึ่ง เพื่อให้เราทำสองสิ่งพร้อมกันได้

45
00:03:54,590 --> 00:03:56,010
‫คุณไม่จำเป็นต้องทำเช่นนี้จริงๆ

46
00:03:56,050 --> 00:04:02,780
‫โดยพื้นฐานแล้ว เราจะแก้ไขไฟล์บนโฮสต์ของเรา จากนั้นฉันจะอยู่ในคอนเทนเนอร์และดูว่าเกิดอะไรขึ้น

47
00:04:02,920 --> 00:04:04,730
‫เพื่อให้แน่ใจว่าใช้งานได้

48
00:04:04,780 --> 00:04:06,350
‫ไปที่ localhost

49
00:04:06,700 --> 00:04:10,000
‫ตกลง นี่ไม่ใช่ไฟล์ Nginx HTML เริ่มต้น

50
00:04:10,030 --> 00:04:13,080
‫และเราใช้อิมเมจ Nginx ปกติ

51
00:04:13,090 --> 00:04:16,580
‫เราไม่ได้ใช้แบบกำหนดเองจากไดเรกทอรีนี้

52
00:04:16,690 --> 00:04:24,270
‫เราเพิ่งใช้ภาพสต็อก เพื่อพิสูจน์จุดนั้น เราสามารถทำได้เช่นเดียวกัน

53
00:04:24,280 --> 00:04:37,390
‫คำสั่งที่แน่นอนอีกครั้ง แต่เอา -v ออก และฉันจะเรียกใช้บนพอร์ต 8080 แทน และผมจะเรียกอันนี้ว่า nginx2

54
00:04:37,420 --> 00:04:47,930
‫ถ้าฉันไปที่เบราว์เซอร์และไปที่ localhost 8080 นั่นคือดัชนี nginx เริ่มต้น ไฟล์ .html

55
00:04:48,010 --> 00:04:52,130
‫อันนี้เป็นแบบกำหนดเองที่เราใช้ในไดเร็กทอรีนี้

56
00:04:52,780 --> 00:04:56,380
‫ดังนั้นเราจึงสามารถเห็นได้ว่ามีการแมปอย่างถูกต้อง

57
00:04:56,560 --> 00:05:03,010
‫ถ้าฉันเปิดแท็บอื่นที่นี่และรับบรรทัดคำสั่งในคอนเทนเนอร์

58
00:05:08,800 --> 00:05:10,130
‫จากนั้นไปที่ไดเร็กทอรีนั้น

59
00:05:17,710 --> 00:05:21,580
‫คุณจะสังเกตเห็นว่าเราสามารถเห็น Dockerfile ได้เพราะเราแมปไดเร็กทอรีทั้งหมด

60
00:05:21,620 --> 00:05:37,010
‫ถ้าทางซ้ายมือ ถ้าเราสร้างไฟล์ขึ้นมาใหม่จริงๆ และฉันสามารถใช้คำสั่ง Linux touch นั้นเพื่อสร้างไฟล์ใหม่ได้

61
00:05:37,010 --> 00:05:37,010
‫แล้วชิดขวา... อ๊ะ... แค่ลืมไปว่า... ls

62
00:05:37,010 --> 00:05:37,900
‫-al และคุณจะเห็นสิ่งนั้นในไฟล์ของคุณ

63
00:05:37,970 --> 00:05:43,350
‫หวังว่าคุณจะเข้าใจสิ่งที่เกิดขึ้นที่นี่ ว่าสถานที่ทั้งสองนี้เป็นสถานที่เดียวกัน

64
00:05:43,370 --> 00:05:58,420
‫และถ้าฉันสะท้อนอะไรบางอย่างในไฟล์ testme นั้นแล้ว...

65
00:06:01,620 --> 00:06:02,410
‫ไปเลย

66
00:06:02,410 --> 00:06:06,670
‫nginx ของเราสามารถเห็นการเปลี่ยนแปลงได้ เนื่องจากเป็นเพียงเส้นทางไฟล์ปกติในคอนเทนเนอร์

67
00:06:06,670 --> 00:06:08,720
‫และไฟล์เหล่านั้นอยู่บนโฮสต์

68
00:06:08,830 --> 00:06:13,210
‫ถ้าฉันลบมันในคอนเทนเนอร์ พวกเขาจะถูกลบบนโฮสต์เพราะเป็นไฟล์เดียวกัน

69
00:06:13,210 --> 00:06:19,090
‫นี่คือช่วงเวลาที่ฉันมักจะให้นักพัฒนาได้คิดเกี่ยวกับสภาพแวดล้อมการพัฒนาทั้งหมดที่พวกเขามี

70
00:06:19,090 --> 00:06:24,670
‫ซึ่งเป็นการตั้งค่าที่ซับซ้อนนี้ บางทีพวกเขาอาจใช้ Vagrant หรือวิธีการอื่นๆ ในการตั้งค่าสภาพแวดล้อมที่สมบูรณ์แบบ

71
00:06:24,670 --> 00:06:30,880
‫และพวกเขาก็เริ่มเห็นว่าสิ่งนี้จะทำให้ง่ายขึ้นมากได้อย่างไร

72
00:06:31,330 --> 00:06:35,920
‫เนื่องจากฉันไม่ต้องตั้งค่าให้ยุ่งยากบน Mac ฉันจึงใช้คอนเทนเนอร์

73
00:06:35,920 --> 00:06:43,670
‫ฉันใช้คำสั่ง -v กับการเมานต์ และตอนนี้โค้ดของฉัน บนโฮสต์ของฉัน สามารถแก้ไขได้บนโฮสต์ของฉัน

74
00:06:43,840 --> 00:06:47,890
‫และฉันไม่จำเป็นต้องเข้าไปในเปลือกของภาชนะจริงๆ

75
00:06:47,890 --> 00:06:53,260
‫โดยปกติ คุณสามารถเรียกใช้คอนเทนเนอร์และดูบันทึกเพื่อดูว่ามีข้อผิดพลาดใดๆ หรือไม่ในขณะที่คุณกำลังเขียนโค้ด

76
00:06:53,500 --> 00:07:03,160
‫แน่นอน นี่เป็นตัวอย่างง่ายๆ ของ Nginx ต่อมา เราจะมีตัวอย่างเฉพาะของสภาพแวดล้อมการพัฒนาที่แตกต่างกันสำหรับการพัฒนาในท้องถิ่นและคอนเทนเนอร์

