Docker Networking - Khám phá cách các Container giao tiếp với nhau



Tìm hiểu tất cả về capabilites mạng Docker với sự hiểu biết về Mô hình mạng vùng chứa và triển khai nó bằng Thực hành.

Trong thế giới ngày nay, các doanh nghiệp đã trở nên quan tâm đến việc container hóa đòi hỏi kỹ năng mạng mạnh mẽ để định cấu hình đúng kiến ​​trúc vùng chứa và do đó, điều này giới thiệu khái niệm về Docker Networking.

Trong blog này trên Docker Networking, bạn sẽ xem xét các chủ đề sau:





Docker là gì?

Để hiểu Docker, bạn cần biết về lịch sử của cách các ứng dụng đã được triển khai trước đây và sau đó là cách các ứng dụng đang được triển khai bằng cách sử dụng vùng chứa hiện tại.

Triển khai ứng dụng theo cách cũ và cách mới - Docker Networking - Edureka



một chuỗi daemon là gì

Như bạn có thể thấy trong sơ đồ trên, cách cũ có các ứng dụng trên máy chủ.Vì vậy, n số ứng dụng chia sẻ các thư viện có trong hệ điều hành đó.Tuy nhiên, với quá trình chứa, hệ điều hành sẽ có một hạt nhân, đây là thứ duy nhất phổ biến giữa tất cả các ứng dụng.Vì vậy, các ứng dụng không thể truy cập thư viện của nhau.

Vì thế, Docker nói một cách đơn giản là một nền tảng mở để phát triển, vận chuyển và chạy các ứng dụng, cho phép người dùng tách các ứng dụng khỏi cơ sở hạ tầng với sự trợ giúp của hộp đựng để cung cấp phần mềm một cách nhanh chóng.

Vì vậy, làm thế nào để các container này giao tiếp với nhau trong các tình huống khác nhau?



Chà, điều đó đến với Docker Networking.

Mạng Docker

Trước khi tìm hiểu sâu về Docker Networking, hãy để tôi chỉ cho bạn quy trình làm việc của Docker.

Như bạn có thể thấy trong sơ đồ trên. Một nhà phát triển viết mã quy định các yêu cầu ứng dụng hoặc các yếu tố phụ thuộc trong Tệp Docker dễ viết và Tệp Docker này tạo ra Hình ảnh Docker. Vì vậy, bất kỳ phụ thuộc nào được yêu cầu cho một ứng dụng cụ thể đều có trong hình ảnh này.

Bây giờ, Docker Containers không là gì khác ngoài phiên bản thời gian chạy của Docker Image. Những hình ảnh này được tải lên Docker Hub (kho lưu trữ Git cho Hình ảnh Docker) chứa các kho công khai / riêng tư.

Vì vậy, từ các kho lưu trữ công khai, bạn cũng có thể kéo hình ảnh của mình và bạn có thể tải hình ảnh của chính mình lên Docker Hub. Sau đó, từ Docker Hub, các nhóm khác nhau như nhóm Đảm bảo chất lượng hoặc Nhóm sản xuất sẽ kéo hình ảnh đó và chuẩn bị các thùng chứa của riêng họ. Các vùng chứa riêng lẻ này giao tiếp với nhau thông qua một mạng để thực hiện các hành động được yêu cầu và đây không phải là gì ngoài Docker Networking.

Vì vậy, bạn có thể định nghĩa Docker Networking như một đoạn giao tiếp mà qua đó tất cả các container biệt lập giao tiếp với nhau trong các tình huống khác nhau để thực hiện các hành động cần thiết.

Bạn nghĩ mục tiêu của Docker Networking là gì?

Mục tiêu của Mạng Docker

Uyển chuyển - Docker cung cấp tính linh hoạt bằng cách cho phép bất kỳ số lượng ứng dụng nào trên các nền tảng khác nhau giao tiếp với nhau.

Nền tảng chéo - Docker có thể dễ dàng được sử dụng trên nhiều nền tảng hoạt động trên nhiều máy chủ khác nhau với sự trợ giúp của Docker Swarm Cluster.

Khả năng mở rộng - Docker là một mạng phân tán hoàn toàn, cho phép các ứng dụng phát triển và mở rộng quy mô riêng lẻ mà vẫn đảm bảo hiệu suất.

Phi tập trung - Docker sử dụng một mạng phi tập trung, cho phép khả năng các ứng dụng lan rộng và có tính khả dụng cao. Trong trường hợp vùng chứa hoặc máy chủ lưu trữ đột nhiên bị thiếu trong nhóm tài nguyên của bạn, bạn có thể cung cấp tài nguyên bổ sung hoặc chuyển cho các dịch vụ vẫn có sẵn.

Thân thiện với người dùng - Docker giúp dễ dàng tự động hóa việc triển khai các dịch vụ, giúp chúng dễ dàng sử dụng trong cuộc sống hàng ngày.

Ủng hộ - Docker cung cấp các hỗ trợ ngoài hộp. Vì vậy, khả năng sử dụng Docker Enterprise Edition và nhận được tất cả các chức năng rất dễ dàng và đơn giản, làm cho nền tảng Docker trở nên rất dễ sử dụng.

Để thực hiện các mục tiêu trên, bạn cần một cái gì đó được gọi là Mô hình mạng vùng chứa.

Muốn khám phá các giai đoạn DevOps khác nhau?

Mô hình mạng vùng chứa (CNM)

Trước khi tôi cho bạn biết chính xác Mô hình mạng vùng chứa là gì, hãy để tôi tóm tắt cho bạn về Libnetwork cần thiết trước khi bạn hiểu CNM.

Libnetwork là một thư viện Docker mã nguồn mở triển khai tất cả các khái niệm chính tạo nên CNM.

Vì thế, Mô hình mạng vùng chứa (CNM) chuẩn hóa các bước cần thiết để cung cấp mạng cho các vùng chứa sử dụng nhiều trình điều khiển mạng. CNM yêu cầu một kho lưu trữ khóa-giá trị phân tán như bảng điều khiển để lưu trữ cấu hình mạng.

CNM có giao diện cho các plugin IPAM và plugin mạng.

Các API plugin IPAM được sử dụng để tạo / xóa các nhóm địa chỉ và phân bổ / phân bổ địa chỉ IP vùng chứa, trong khi các API plugin mạng được sử dụng để tạo / xóa mạng và thêm / xóa vùng chứa khỏi mạng.

CNM chủ yếu được xây dựng trên 5 đối tượng: Network Controller, Driver, Network, Endpoint và Sandbox.

Đối tượng mô hình mạng vùng chứa

Sự kiểm soát mạng lưới: Cung cấp điểm vào Libnetwork để hiển thị các API đơn giản cho Docker Engine để phân bổ và quản lý mạng. Vì Libnetwork hỗ trợ nhiều trình điều khiển có sẵn và từ xa, Bộ điều khiển mạng cho phép người dùng đính kèm một trình điều khiển cụ thể vào một mạng nhất định.

Người lái xe: Sở hữu mạng và chịu trách nhiệm quản lý mạng bằng cách có nhiều trình điều khiển tham gia để đáp ứng các trường hợp sử dụng và tình huống triển khai khác nhau.

Mạng: Cung cấp kết nối giữa một nhóm các điểm cuối thuộc cùng một mạng và cách ly với phần còn lại. Vì vậy, bất cứ khi nào mạng được tạo hoặc cập nhật, Trình điều khiển tương ứng sẽ được thông báo về sự kiện này.

Điểm cuối: Cung cấp kết nối cho các dịch vụ được tiếp xúc bởi một vùng chứa trong mạng với các dịch vụ khác được cung cấp bởi các vùng chứa khác trong mạng. Điểm cuối đại diện cho một dịch vụ và không nhất thiết phải là một vùng chứa cụ thể, Điểm cuối cũng có phạm vi toàn cầu trong một cụm.

Hộp cát: Được tạo khi người dùng yêu cầu tạo điểm cuối trên mạng. Hộp cát có thể có nhiều điểm cuối được gắn với các mạng khác nhau đại diện cho cấu hình mạng của vùng chứa, chẳng hạn như địa chỉ IP, địa chỉ MAC, các tuyến đường, DNS.

Vì vậy, đó là 5 đối tượng chính của CNM.

Bây giờ, hãy để tôi cho bạn biết các trình điều khiển mạng khác nhau liên quan đến mạng Docker.

Muốn học DevOps lên cấp độ tiếp theo?

Trình điều khiển mạng

Chủ yếu có 5 trình điều khiển mạng: Bridge, Host, None, Overlay, Macvlan

Cầu: Mạng cầu nối là mạng nội bộ mặc định riêng được tạo bởi docker trên máy chủ. Vì vậy, tất cả các vùng chứa đều có địa chỉ IP nội bộ và các vùng chứa này có thể truy cập lẫn nhau bằng cách sử dụng IP nội bộ này. Mạng Bridge thường được sử dụng khi các ứng dụng của bạn chạy trong các vùng chứa độc lập cần giao tiếp.

Tổ chức : Trình điều khiển này loại bỏ sự cách ly mạng giữa máy chủ docker và các vùng chứa docker để sử dụng trực tiếp mạng của máy chủ. Vì vậy, với điều này, bạn sẽ không thể chạy nhiều vùng chứa web trên cùng một máy chủ lưu trữ, trên cùng một cổng vì cổng hiện nay phổ biến cho tất cả các vùng chứa trong mạng máy chủ.

không ai : Trong loại mạng này, các vùng chứa không được gắn với bất kỳ mạng nào và không có bất kỳ quyền truy cập nào vào mạng bên ngoài hoặc các vùng chứa khác. Vì vậy, mạng này được sử dụng khibạn muốn tắt hoàn toàn ngăn xếp mạng trên một vùng chứa vàchỉ tạo một thiết bị lặp lại.

Lớp phủ : Tạo một mạng riêng nội bộ trải dài trên tất cả các nút tham gia vào cụm bầy đàn. Vì vậy, mạng Lớp phủ tạo điều kiện giao tiếp giữa một dịch vụ bầy đàn và một vùng chứa độc lập hoặc giữa hai vùng chứa độc lập trên các Docker Daemons khác nhau.

Macvlan: Cho phép bạn gán địa chỉ MAC cho vùng chứa, làm cho nó xuất hiện như một thiết bị vật lý trên mạng của bạn. Sau đó, trình nền Docker định tuyến lưu lượng truy cập đến các vùng chứa bằng địa chỉ MAC của chúng. Trình điều khiển Macvlan là lựa chọn tốt nhất khi bạn được kết nối trực tiếp với mạng vật lý, thay vì được định tuyến qua ngăn xếp mạng của máy chủ Docker.

Được rồi, đó là tất cả lý thuyết cần thiết để hiểu về Docker Networking. Bây giờ, hãy để tôi tiếp tục và cho bạn thấy thực tế cách mạng được tạo ra và các vùng chứa giao tiếp với nhau.

Thực hành

Vì vậy, với giả định rằng tất cả các bạn đã cài đặt Docker trên hệ thống của mình, tôi có một kịch bản để giới thiệu.

Giả sử bạn muốn lưu trữ tên khóa học và ID khóa học, bạn sẽ cần một ứng dụng web. Về cơ bản, bạn cần một vùng chứa cho ứng dụng web và bạn cần thêm một vùng chứa làm MySQL cho phần phụ trợ, vùng chứa MySQL đó phải được liên kết với vùng chứa ứng dụng web.

Làm thế nào về việc tôi thực hiện ví dụ nêu trên một cách thực tế.

Các bước liên quan:

  • Khởi tạo Docker Swarm để tạo thành một cụm Swarm.
  • Tạo mạng lớp phủ
  • Tạo dịch vụ cho cả ứng dụng web và MySQL
  • Kết nối các ứng dụng thông qua mạng

Bắt đầu nào!

Bước 1: Khởi tạo Docker Swarm trên máy.

docker swarm init --advertise-addr 192.168.56.101

Cờ –advertise-addr định cấu hình nút trình quản lý để xuất bản địa chỉ của nó là 192.168.56.101. Các nút khác trong bầy phải có thể truy cập trình quản lý tại địa chỉ IP.

Bước 2: Bây giờ, nếu bạn muốn nối nút trình quản lý này với nút công nhân, hãy sao chép liên kết mà bạn nhận được khi khởi tạo swarm trên nút công nhân.
Bước 3: Tạo một mạng lớp phủ.

mạng docker tạo lớp phủ -d myoverlaynetwork

Trong đó myoverlay là tên mạng và -d cho phép Docker Daemon chạy ở chế độ nền.

Bước 4.1: Tạo một webapp1 dịch vụ và sử dụng mạng bạn đã tạo để triển khai dịch vụ này trên cụm bầy đàn.

dịch vụ docker tạo --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Ở đâu -plà để chuyển tiếp cổng,hsharlà tên tài khoản trên Docker Hub và webapp là tên của ứng dụng web đã có trên Docker Hub.

Bước 4.2: Bây giờ, hãy kiểm tra xem dịch vụ đã được tạo hay chưa.

dịch vụ docker ls

Bước 5.1: Bây giờ, hãy tạo một dịch vụ MySQL và sử dụng mạng bạn đã tạo để triển khai dịch vụ trên cụm swarm.

dịch vụ docker tạo --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Bước 5.2: Bây giờ, hãy kiểm tra xem dịch vụ đã được tạo hay chưa.

dịch vụ docker ls

Bước 6.1: Sau đó, hãy kiểm tra vùng chứa nào đang chạy trên nút chính của bạn và đi vào vùng chứa hshar / webapp.

def __init__ python
docker ps

Bước 6.2: Vì vậy, bạn có thể thấy rằng chỉ có dịch vụ ứng dụng web trên nút trình quản lý. Vì vậy, hãy vào vùng chứa ứng dụng web.

docker execute -it container_id bash nano var / www / html / index.php

Lệnh ps docker sẽ liệt kê cả hai vùng chứa của bạn với id vùng chứa tương ứng của chúng. Lệnh thứ hai sẽ kích hoạt vùng chứa đó trong chế độ tương tác.

Bước 7: Bây giờ, hãy thay đổi $ servername từ localhost thành mysql và $ password từ “” ”thành“ edureka ”, đồng thời thay đổi tất cả điền vào các chi tiết cơ sở dữ liệu được yêu cầu và lưu tệp index.php của bạn bằng cách sử dụng phím tắt Ctrl + x và sau đó y để lưu và nhấn enter.

Bước 8: Bây giờ, hãy vào vùng chứa mysql đang chạy trên một nút khác.

docker executive -it container_id bash

Bước 9: Khi bạn vào bên trong vùng chứa mysql, hãy nhập các lệnh dưới đây để sử dụng cơ sở dữ liệu trong MySQL.

Bước 9.1: Nhận quyền truy cập để sử dụng vùng chứa mysql.

mysql -u root -pedureka

Trong đó -u đại diện cho người dùng và -p là mật khẩu của máy tính của bạn.

Bước 9.2: Tạo cơ sở dữ liệu trong mysql sẽ được sử dụng để lấy dữ liệu từ webapp1.

TẠO CƠ SỞ DỮ LIỆU

Bước 9.3: Sử dụng cơ sở dữ liệu đã tạo.

SỬ DỤNG HandsOn

Bước 9.4: Tạo một bảng trong cơ sở dữ liệu này sẽ được sử dụng để lấy dữ liệu từ webapp1.

CREATE TABLE course_details (course_name VARCHAR (10), course_id VARCHAR (11))

Bước 9.5: Bây giờ, hãy thoát MySQL và vùng chứa bằng cách sử dụng lệnh lối ra .

Bước 10: Truy cập trình duyệt của bạn và nhập địa chỉ là localhost: 8001 / index.php . Thao tác này sẽ mở ứng dụng web của bạn. Bây giờ, nhập chi tiết các khóa học và nhấp vào Gửi truy vấn .

Bước 11: Khi bạn nhấp vào Gửi truy vấn, hãy chuyển đến nút mà dịch vụ MySQL của bạn đang chạy và sau đó vào bên trong vùng chứa.

docker execute -it container_id bash mysql -u root -pedureka SỬ DỤNG bảng HandsOn SHOW chọn * từ course_details

Điều này sẽ hiển thị cho bạn kết quả đầu ra của tất cả các khóa học mà bạn đã điền thông tin chi tiết.

Đến đây, tôi kết thúc blog Docker Networking của mình. Tôi hy vọng bạn đã thích bài viết này. Bạn có thể kiểm tra các blog khác trong loạt bài này cũng đề cập đến những điều cơ bản của Docker.

Nếu bạn thấy blog Docker Container này có liên quan, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 450.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka DevOps giúp người học có được kiến ​​thức chuyên môn về các quy trình và công cụ DevOps khác nhau như Puppet, Jenkins, Docker, Nagios, Ansible và GIT để tự động hóa nhiều bước trong SDLC.

Tìm kiếm chứng chỉ trong DevOps?

Có một câu hỏi cho tôi? Vui lòng đề cập đến nó trong phần bình luận và tôi sẽ liên hệ lại với bạn.