‫Yêu cầu cho phần này bao gồm hiểu cách bắt đầu một vùng chứa. Sau đó là các khái niệm mạng TCP
‫/ IP cơ bản, chẳng hạn như mạng con và IP, cổng và tường lửa.
‫Bạn không cần phải biết tất cả những điều đó, nhưng nó chắc chắn sẽ giúp bạn hiểu dễ
‫dàng hơn rất nhiều phần này tập trung vào nội dung khái
‫niệm, trước khi chúng ta thực sự đi sâu vào một loạt các nội dung dòng lệnh trong bài giảng tiếp theo.
‫Tôi chỉ muốn nhắc bạn về tùy chọn -p trên các lệnh chạy vùng chứa của bạn để
‫hiển thị cổng trên máy của bạn.
‫Thực sự còn rất nhiều điều khác đang diễn ra trong nền tảng của mạng Docker mà chúng ta sẽ nói đến.
‫Docker có khái niệm này về pin bao gồm nhưng có thể tháo rời, về cơ bản có nghĩa là mặc định
‫khá dễ dàng và phổ biến để làm việc, nhưng bạn có thể thay đổi rất nhiều tùy chọn.
‫Chúng ta sẽ nhanh chóng kiểm tra trong bài giảng này lệnh cổng container cung cấp cho bạn kết quả
‫nhanh chóng về những cổng nào đang mở cho vùng chứa đó trên mạng của bạn.
‫Sau đó, chúng ta sẽ phân tích một số khái niệm về mạng Docker và mạng ảo cũng như
‫cách các gói tin lưu chuyển xung quanh mạng.
‫Và chúng ta sẽ kết thúc với một sơ đồ mạng cho thấy các vùng chứa nói chuyện với nhau như thế
‫nào và điều đó khác với -p khi đưa chúng lên mạng vật lý như thế nào.
‫Khi bạn thực sự bắt đầu một vùng chứa, bạn thực sự đang ở trong nền kết nối với
‫một mạng Docker cụ thể. Theo mặc định, đó là mạng cầu nối, vì chúng tôi sẽ kiểm tra sau một phút. Sau đó, mỗi một trong những
‫mạng mà bạn sẽ kết nối thực sự định tuyến thông qua tường lửa NAT, thực sự là trình nền Docker định
‫cấu hình địa chỉ IP máy chủ lưu trữ trên giao diện mặc định của nó để các vùng chứa của bạn
‫có thể truy cập Internet hoặc phần còn lại của mạng và sau đó lấy lại.
‫Nhưng chúng ta không thực sự cần sử dụng -p khi chúng ta có các vùng chứa cụ thể muốn nói
‫chuyện với nhau bên trong máy chủ của chúng ta.
‫Ví dụ: nếu bạn có một ứng dụng có máy chủ phần tiếp theo và vùng chứa PHP Apache, hai vùng chứa đó phải nằm trên cùng
‫một mạng và chúng có thể nói chuyện với nhau mà không cần thực sự mở các cổng của chúng lên
‫phần còn lại của mạng vật lý của bạn. .
‫Nếu bạn có một ứng dụng khác không liên quan, giả sử đang sử dụng Mongo và Node. js, bạn có thể tạo một mạng để
‫họ có thể nói chuyện với nhau mà không cần sử dụng -p
‫để đưa họ vào mạng. Nhưng họ thực sự không thể nói chuyện với mạng khác, nơi bạn
‫có thể có một ứng dụng không liên quan đang chạy.
‫Nhưng vấn đề là tất cả những cài đặt tôi đã mô tả đều có thể thay đổi được.
‫Và điều này dẫn đến một câu nói hay mà Docker thích sử dụng ... đó là pin bao gồm nhưng có thể tháo rời.
‫Bạn sẽ thấy rằng trong suốt khóa học này, rất nhiều lần có những giá trị mặc định không
‫hoạt động.
‫Bạn thậm chí không cần phải chỉ định chúng. Bạn chỉ cần nhận thấy rằng mọi thứ được cấu hình theo
‫cách tiêu chuẩn.
‫Nhưng rất nhiều tùy chọn này có thể định cấu hình trong thời gian chạy hoặc thậm chí có thể thay đổi sau khi thực tế. Và chúng ta sẽ thấy một số điều đó diễn ra
‫ở đây khi chúng ta thử nghiệm với các mạng.
‫Một số điều mà bạn thực sự có thể thay đổi sẽ là tạo nhiều mạng ảo, có thể một mạng
‫cho mỗi ứng dụng hoặc các mạng khác nhau dựa trên các yêu cầu bảo mật khác nhau.
‫Bạn thực sự có thể, giống như trong thế giới vật lý, có hai NIC vật lý trên một máy tính thực. Bạn thực sự có thể có hai mạng
‫ảo được kết nối với một vùng chứa hoặc bạn thực sự có thể có vùng chứa nói chuyện
‫với không có mạng nào.
‫Bạn có thể bỏ qua bất kỳ cấu hình mạng ảo nào có sẵn và thực sự sử dụng
‫- net
‫= host, và bạn sẽ mất một số lợi ích về việc chứa.
‫Nhưng trong một số trường hợp, nó có thể được yêu cầu.
‫Sau đó, chúng ta sẽ thực sự đi vào trình điều khiển mạng Docker. Có toàn bộ hệ sinh thái
‫plugin này xung quanh Docker giúp mở rộng khả năng của Docker cho rất nhiều công cụ của bên thứ ba.
‫Nhưng trong trường hợp này, chúng ta sẽ xem xét một số trình điều khiển mạng Docker khác nhau và cách chúng có thể
‫thay đổi mạng của chúng ta và cung cấp cho chúng ta những khả năng mới.
‫Đây thực sự là chỉ làm xước bề mặt.
‫Thực sự có các khái niệm về mạng trong suốt khóa học này, nơi chúng ta sẽ nói
‫về các chủ đề nâng cao hơn về mạng riêng nhiều máy chủ và các khái niệm như giao diện phụ, v.v.
‫Nhưng bây giờ, chúng ta hãy đi sâu vào một số nội dung dòng lệnh.
‫Để xem xét
‫nhanh, hãy xem -p của các lệnh chạy vùng chứa của chúng tôi ... docker container chạy.
‫Nếu bạn nhớ lần đầu tiên chúng tôi chạy một container, chúng tôi đã sử dụng -p để hiển thị cổng 80 của Nginx của chúng tôi.
‫Điều đó đã diễn ra phía bên trái, là cổng chủ và chuyển tiếp lưu lượng từ cổng đó vào cổng
‫80 của container.
‫Nếu chúng ta đã làm docker container port webhost, nó thực sự hiển thị điều này ở một định dạng đẹp, dễ dàng mà các cổng đang chuyển tiếp
‫lưu lượng truy cập đến vùng chứa đó từ máy chủ lưu trữ vào chính vùng chứa.
‫Chúng tôi chưa nói về địa chỉ IP của vùng chứa.
‫Vì vậy, bạn có thể chỉ giả sử rằng vùng chứa đang sử dụng cùng một IP với máy chủ. Nhưng theo mặc định, điều đó
‫không đúng.
‫Chúng ta có thể dễ dàng lấy Docker IP của vùng chứa đó bằng cách kiểm tra nó và chúng ta
‫sẽ sử dụng lệnh định dạng hoặc tùy chọn thực sự, mà bạn sẽ nhận thấy thực sự có một định dạng khá cụ thể
‫cho cách lọc nội dung đến.
‫Bạn luôn có thể sử dụng lệnh grep mà chúng tôi đã sử dụng trước đó để lọc ra đầu ra văn
‫bản của bạn, nhưng định dạng, --format, nó thực sự gọn gàng và nhất quán hơn một chút. Bạn thực hiện hai dấu ngoặc nhọn, và sau đó khi chúng ta
‫đã quen với việc biết định dạng của tệp cấu hình, chúng ta biết rằng NetworkSettings. Địa chỉ IP là nút thực tế
‫của đầu ra JSON mà chúng tôi muốn xem xét.
‫Và sau đó là webhost. Rất tiếc, điều đó có nghĩa là tôi đã đánh vần không đúng.
‫I P A d d.
‫Và đó không phải là những gì tôi mong đợi.
‫Nếu tôi định sử dụng IP của máy chủ lưu trữ của mình vì tôi biết máy Mac của mình trên mạng cục bộ và nếu tôi
‫thực hiện ifconfig trên máy Mac, tôi chỉ biết rằng địa chỉ IP nằm trên mạng gia đình của tôi hoặc 1 9 2 1 6 8 Mạng con.
‫Điều thú vị là chúng không cùng một mạng.
‫Vậy tại sao lại như vậy?
‫Hãy xem liệu nó sẽ có ý nghĩa hơn nếu tôi rút ra.
‫Nếu hệ điều hành máy chủ của tôi được kết nối với mạng của tôi ... đây là mạng của tôi ... mạng vật lý. Sau đó, đây là giao diện
‫Ethernet trên máy chủ của tôi, trong trường hợp của tôi, đó là máy Mac của tôi.
‫Có một bức tường lửa nhỏ trong đó thực hiện một số việc. Nó chặn tất cả lưu lượng đến từ mạng để mọi thứ
‫bị chặn theo mặc định. Tôi sẽ gọi nó là một bức tường lửa. Bất kỳ lưu lượng nào
‫đi ra từ các vùng chứa của tôi sẽ được NAT theo mặc định.
‫Nó hoạt động giống như một bức tường lửa biên khá phổ biến trên mạng.
‫Nhưng có khái niệm này về mạng ảo và theo mặc định, bạn sẽ thấy
‫một mạng được gọi là cầu nối hoặc docker0.
‫Khi bạn bắt đầu một vùng chứa mới, chúng tôi sẽ gọi nó là C1, vùng chứa đó được gắn vào mạng đó, mạng ảo
‫đó và mạng ảo đó tự động được gắn vào giao diện Ethernet trên máy chủ của bạn để nó có thể
‫thoát ra ngoài.
‫Trong trường hợp của chúng tôi, khi chúng tôi vừa khởi chạy Nginx đó, chúng tôi đã cho nó là -p 80:80. Điều đó nói với nó ở đây để mở cổng 80
‫trên giao diện Ethernet trên máy Mac của tôi và chuyển tiếp bất kỳ thứ gì đi vào cổng 80
‫thông qua mạng ảo đó đến cổng 80
‫trong vùng chứa đó.
‫Theo mặc định, khi tôi tạo vùng chứa thứ hai, vùng chứa đó sẽ được đặt trên cùng mạng cầu nối đó.
‫Hai container đó có thể nói chuyện qua lại thoải mái trên các cổng tiếp xúc của chúng.
‫Trừ khi tôi chỉ định -p, không có lưu lượng truy cập nào vào các mạng nội bộ của tôi ở đây sẽ đến vùng
‫chứa của tôi.
‫Tôi thực sự có thể tạo nhiều mạng ảo hơn và gọi chúng theo ý mình. Tôi sẽ gọi đây là mạng
‫lưới ứng dụng của tôi, giả sử. Và giả sử tôi kết nối hai thùng chứa ở đây ... Tôi đã có MySQL.
‫Sau đó, tôi có một Apache.
‫Trên MySQL, tôi không mở
‫bất kỳ cổng nào và chưa bao giờ chỉ định a -p. Nhưng trên Apache, tôi
‫cho nó là -p là 8080: 80.
‫Điều đó có nghĩa là ở đây, bên phải, tại giao diện Ethernet trên máy chủ của tôi, nó sẽ bắt đầu lắng
‫nghe trên cổng 8080.
‫Ngay khi lưu lượng truy cập đến máy chủ của tôi trên cổng 8080, nó sẽ định tuyến nó
‫xuống mạng ảo mới mà tôi đã tạo và vào máy chủ Apache trên cổng 80.
‫Bên trong mạng ảo này, máy chủ Apache có thể tự do nói chuyện với máy chủ MySQL qua cổng lắng
‫nghe của nó.
‫Khi bạn nghĩ về mạng ảo trong Docker và nơi chứa các vùng chứa, hãy nghĩ về cách bạn đặt các
‫vùng chứa khác nhau gần nhau vì chúng có liên quan trong ứng dụng của chúng.
‫Như bạn có thể thấy, hai ví dụ này, nếu tôi có một vùng chứa một và một vùng chứa hai ở
‫trên cùng xếp hạng thứ gì đó khác nhau, Nếu họ không nói chuyện với các dịch vụ trong mạng này ở bên dưới,
‫thì bạn nên giữ chúng trên các mạng ảo riêng biệt.
‫Nếu họ đã từng phải nói chuyện với nhau, họ sẽ phải đi qua các cổng đã
‫xuất bản của họ từ đầu đến cuối.
‫Xin nhắc lại, trên bất kỳ giao diện nào trên máy chủ của bạn, bạn không thể nghe trên nhiều cổng cho nhiều vùng chứa.
‫Vì vậy, bạn không thể có hai vùng chứa đang lắng nghe trên cổng 80 ở cấp máy chủ.
‫Chỉ có một người có thể làm điều đó.
‫Nếu bạn cố gắng bắt đầu một vùng chứa khác, nó sẽ thực sự xảy ra lỗi và nói
‫rằng đã có thứ gì đó khác trên cổng đó. Đó không phải là một giới hạn của Docker; đó chỉ là một hạn chế về
‫cách mạng IP thường hoạt động.
‫Chỉ là một bản tóm tắt nhanh về phần này. Chúng tôi thực sự đã dành rất nhiều thời gian cho các khái niệm về mạng
‫Docker, bao gồm cả việc hiển thị các cổng trên máy chủ của bạn với mạng vật lý bằng cách sử dụng -p. Ý tưởng của Docker tập trung vào các mặc
‫định lành mạnh mà họ gọi nó là pin bao gồm nhưng có thể tháo rời.
‫Đối với nhà phát triển và thử nghiệm cục bộ, bạn có thể chỉ cần sử dụng mặc định, nhưng mọi thứ đều có thể thay đổi.
‫Sau đó, chúng ta đã tìm hiểu về lệnh cảng container, đây là một cách nhanh chóng để xem xét các cổng được
‫hiển thị cho các container cụ thể của bạn.
‫Sau đó, chúng tôi chia nhỏ các gói di chuyển xung quanh các mạng ảo và cách chúng liên quan đến các mạng
‫ảo khác cũng như cách chúng vào và ra khỏi máy Docker của bạn.
‫Vì vậy, đây là tất cả các khái niệm thực sự tốt để hiểu khi chúng ta chuyển sang nội dung CLI thực tế trong bài giảng
‫tiếp theo.