Hướng dẫn入门 Docker Networking

Xin chào các bạnfuture Docker maestros! Tôi rất vui mừng được làm hướng dẫn viên của bạn trong hành trình thú vị vào thế giới của Docker networking. Là một ai đó đã dạy khoa học máy tính trong nhiều năm, tôi có thể告诉 bạn rằng việc hiểu mạng Docker giống như học cách lái xe trong những con đường náo nhiệt của một thành phố mới - ban đầu có thể sẽ cảm thấy áp đảo, nhưng một khi bạn đã nắm vững, bạn sẽ di chuyển như một người bản địa trong thời gian ngắn!

Docker - Networking

Docker Networking là gì?

Trước khi chúng ta đi sâu vào chi tiết, hãy bắt đầu với những điều cơ bản. Docker networking là cách mà các container Docker giao tiếp với nhau và với thế giới bên ngoài. Hãy tưởng tượng nó như hệ thống bưu điện cho các container của bạn - nó là cách chúng gửi và nhận tin nhắn và dữ liệu.

Liệt kê tất cả các mạng Docker

Hãy bắt đầu cuộc phiêu lưu của chúng ta bằng cách học cách xem các mạng nào khả dụng trong môi trường Docker của chúng ta. Điều này giống như kiểm tra bản đồ của thành phố mới để xem những tuyến đường nào chúng ta có thể đi.

Để liệt kê tất cả các mạng Docker, chúng ta sử dụng lệnh đơn giản sau:

docker network ls

Khi bạn chạy lệnh này, bạn sẽ thấy đầu ra tương tự như sau:

NETWORK ID     NAME      DRIVER    SCOPE
9f904ee27bf5   bridge    bridge    local
95e74588f40d   host      host      local
6dd90d006c9b   none      null      local

Hãy phân tích nó:

  • NETWORK ID: Mã định danh duy nhất cho mỗi mạng
  • NAME: Tên của mạng
  • DRIVER: Driver mạng được sử dụng (chúng ta sẽ nói nhiều hơn về điều này sau)
  • SCOPE: Phạm vi của mạng (local cho máy chủ Docker hoặc swarm)

Kiểm tra mạng Docker

Bây giờ chúng ta có thể thấy các mạng của mình, hãy cùng xem xét kỹ hơn một trong số chúng. Điều này giống như phóng to một con đường cụ thể trên bản đồ của chúng ta.

Để kiểm tra một mạng Docker, chúng ta sử dụng:

docker network inspect [NETWORK NAME]

Ví dụ, hãy kiểm tra mạng mặc định 'bridge':

docker network inspect bridge

Lệnh này sẽ trả về rất nhiều thông tin chi tiết về mạng ở định dạng JSON. Điều này giống như nhận được một báo cáo chi tiết về mọi thứ happening trên con đường đó - ai sống ở đó, những ngôi nhà trông như thế nào, v.v.

Tạo mạng mới của riêng bạn

Được rồi, bây giờ chúng ta đã sẵn sàng để xây dựng con đường của riêng mình! Tạo một mạng mới trong Docker là khá đơn giản:

docker network create [OPTIONS] [NETWORK NAME]

Hãy tạo một mạng bridge đơn giản:

docker network create my_awesome_network

Chúc mừng! Bạn vừa tạo mạng Docker đầu tiên của mình. Điều này giống như bạn vừa lát một con đường mới trong thành phố Docker của chúng ta.

Để xác minh rằng mạng của chúng ta đã được tạo, chúng ta có thể sử dụng lệnh docker network ls đáng tin cậy một lần nữa:

docker network ls

Bạn bây giờ nên thấy mạng mới của mình trong danh sách!

Các driver mạng

Trong Docker, các driver mạng giống như các loại đường khác nhau. Hãy xem xét các loại chính:

Driver Mô tả
Bridge Driver mặc định. Tốt cho các container độc lập cần giao tiếp.
Host Loại bỏ sự cách ly mạng giữa container và máy chủ Docker.
Overlay Sử dụng để kết nối nhiều daemon Docker với nhau. Tốt cho các dịch vụ swarm.
Macvlan Cho phép bạn gán một địa chỉ MAC cho một container, 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.
None Vô hiệu hóa tất cả mạng cho container.

Khi tạo một mạng, bạn có thể chỉ định driver. Ví dụ:

docker network create --driver overlay my_overlay_network

Điều này tạo ra một mạng overlay mới, rất tốt khi bạn làm việc với Docker Swarm.

Kết nối container với mạng

Bây giờ chúng ta có mạng của mình, hãy học cách kết nối các container với chúng. Điều này giống như quyết định con đường nào ngôi nhà (container) của chúng ta nên nằm trên.

Khi chạy một container mới, bạn có thể chỉ định mạng mà nó nên kết nối:

docker run --network=my_awesome_network nginx

Lệnh này chạy một container nginx và kết nối nó với mạng 'my_awesome_network'.

Bạn cũng có thể kết nối một container hiện có với một mạng:

docker network connect my_awesome_network my_existing_container

Và nếu bạn muốn ngắt kết nối một container khỏi mạng:

docker network disconnect my_awesome_network my_existing_container

Một ví dụ thực tế

Hãy kết hợp tất cả những điều này với một ví dụ thực tế. Hãy tưởng tượng chúng ta đang xây dựng một ứng dụng web đơn giản với giao diện người dùng và backend. Chúng ta muốn các container này có thể giao tiếp với nhau, nhưng không muốn expose backend ra thế giới bên ngoài.

Đầu tiên, hãy tạo mạng của chúng ta:

docker network create my_app_network

Bây giờ, hãy chạy container backend và kết nối nó với mạng của chúng ta:

docker run --name backend --network=my_app_network -d my-backend-image

Cuối cùng, container frontend của chúng ta:

docker run --name frontend --network=my_app_network -p 80:80 -d my-frontend-image

Bây giờ frontend và backend của chúng ta có thể giao tiếp với nhau qua 'my_app_network', nhưng chỉ frontend được expose ra thế giới bên ngoài qua cổng 80.

Kết luận

Và thế là bạn đã có nó, các bạn! Chúng ta đã đi qua các основы của mạng Docker, từ liệt kê và kiểm tra mạng đến tạo mạng của riêng mình và kết nối container. Nhớ rằng, như bất kỳ kỹ năng nào, việc thành thạo mạng Docker cần phải thực hành. Đừng ngại thử nghiệm và thử các cấu hình khác nhau.

Khi chúng ta kết thúc, tôi nhớ lại một học sinh đã từng nói với tôi rằng việc học mạng Docker cảm thấy như học bơi - ban đầu, bạn cảm thấy như đang chìm trong thông tin, nhưng một khi bạn đã nắm vững, bạn sẽ lướt qua các khái niệm một cách dễ dàng. Vậy hãy tiếp tục bơi, và trước khi bạn biết, bạn sẽ bơi laps trong các mạng Docker!

Chúc mừng Dockering, và hy vọng các container của bạn luôn tìm thấy đường về nhà!

Credits: Image by storyset