Thứ Sáu, 22 tháng 8, 2025

Bài 3. Docker Networking: Kết Nối

Bài 3. Docker Networking: Kết Nối Container Hiệu Quả

Danh sách bài viết trong series Sử dụng Docker từ cơ bản đến nâng cao
  • Bài 1. Cơ Bản Docker: Hiểu Container và Vai Trò trong DevOps
  • Bài 2. Docker Image: cách xây Dựng và tối Ưu
  • Bài 3. Docker Networking: Kết Nối Container Hiệu Quả
  • Bài 4. Docker Volume: Quản Lý Dữ Liệu Hiệu Quả cho Container
  • Bài 5. Docker Compose: Điều Phối Multi-Container Hiệu Quả
  • Bài 6. Docker Swarm: Orchestration Cơ Bản để Scale Container
  • Bài 7. Docker Security: Bảo Mật Container Hiệu Quả
  • Bài 8. Docker CI/CD: Tích Hợp Container vào Pipeline DevOps
  • Bài 9. Docker Monitoring: Theo Dõi và Logging Container Hiệu Quả
  • Bài 10. Docker resources: Tối Ưu và Debug Container Hiệu Quả
  • Bài 11. Docker và Microservices: Thiết Kế Ứng Dụng Phân Tán
  • Bài 12. Docker Registry: Tự Host và Quản Lý Image Hiệu Quả
  • Bài 13. Docker với Cloud: Tích Hợp Container trên AWS ECS và GCP Cloud Run

Trong DevOps, container không hoạt động đơn lẻ – chúng cần “nói chuyện” với nhau, với host, hoặc với thế giới bên ngoài. Docker Networking trong DevOps là chìa khóa để đảm bảo điều đó. Trong bài thứ ba của series, chúng ta sẽ đi sâu vào các loại mạng Docker – bridge networkoverlay network, cách container kết nối, và thực hành để tối ưu mạng cho pipeline CI/CD và microservices. Hãy sẵn sàng để hiểu cách Docker quản lý lưu lượng!

Docker Networking Là Gì?

Tổng Quan Docker Network

Docker Networking là hệ thống cho phép container giao tiếp với nhau, với host, hoặc với mạng bên ngoài.

  • Driver: Bridge (mặc định), host, overlay, none.
  • Mục tiêu: Cô lập, kết nối, và mở rộng khả năng giao tiếp.

Ví dụ: Một container web (Nginx) cần gọi container API (Flask) – Docker network giúp chúng tìm nhau qua tên hoặc IP.

Tại Sao Quan Trọng trong DevOps?

  • Pipeline CI/CD: Container test cần gọi DB hoặc registry.
  • Microservices: Mỗi service chạy container riêng, cần giao tiếp.
  • Scalability: Mạng hỗ trợ scale container trên nhiều host.

Tình huống thực tế: Một team DevOps gặp lỗi khi container runner không gọi được GitLab do mạng mặc định bị cô lập. Tạo bridge network đã giải quyết vấn đề.

Các Loại Docker Network

Bridge Network: Mạng Cơ Bản

  • Bridge: Mạng mặc định, cô lập container trên host, dùng NAT để ra ngoài.
  • Cơ chế: Docker tạo docker0 bridge, gán IP trong subnet (VD: 172.17.0.0/16).
  • Ví dụ:
    docker run -d --name web nginx
    docker run -d --name api python:3.9
    • web và api không thấy nhau trừ khi cùng network.

DevOps: Bridge phù hợp cho test đơn giản trên một host.

Host Network: Dùng Mạng Host

  • Host: Container dùng trực tiếp network stack của host, không cô lập.
  • Ví dụ:
    docker run -d --network host nginx
    • Truy cập localhost:80 trên host thấy Nginx.

DevOps: Dùng host network khi cần hiệu năng cao (VD: monitoring agent).

Overlay Network: Kết Nối Multi-Host

  • Overlay: Kết nối container trên nhiều host (dùng Swarm hoặc Kubernetes).
  • Cơ chế: VXLAN tạo mạng ảo giữa các node.
  • Ví dụ:
    docker network create -d overlay my-overlay
    docker service create --network my-overlay nginx

DevOps: Overlay cần thiết cho microservices scale trên cluster.

None Network

  • None: Container không có mạng, hoàn toàn cô lập.
  • Ví dụ:
    docker run --network none alpine

Container Kết Nối: Cách Hoạt Động

Bridge Network Tùy Chỉnh

  1. Tạo network:
    docker network create my-bridge
  2. Chạy container:
    docker run -d --name web --network my-bridge nginx
    docker run -d --name api --network my-bridge python:3.9
  3. Kết nối:
    • web ping api bằng tên (DNS tự động trong cùng network).

DevOps: Dùng bridge tùy chỉnh để test multi-container trong pipeline.

Port Mapping

  • Map port container ra host:
    docker run -d -p 8080:80 nginx
  • Host gọi localhost:8080 thấy Nginx.

DevOps: Port mapping cho phép truy cập service từ bên ngoài (VD: runner gọi API).

Thực Hành: Kết Nối Container

Tạo Ứng Dụng Web-API

  1. Dockerfile API:

    FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install flask
    COPY api.py .
    CMD ["python", "api.py"]
    • api.py:

      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/')
      def hello():
       return "API says Hello!"
      
      if __name__ == "__main__":
       app.run(host="0.0.0.0", port=5000)
  2. Build:
    docker build -t my-api .

Chạy và Kết Nối

  1. Tạo network:
    docker network create app-net
  2. Chạy container:
    docker run -d --name web --network app-net -p 8080:80 nginx
    docker run -d --name api --network app-net my-api
  3. Test kết nối:
    docker exec -it web curl http://api:5000
    • Kết quả: “API says Hello!”.

Debug Mạng

  • Xem network:
    docker network ls
    docker network inspect app-net
  • Ping:
    docker exec -it web ping api

Debug tip:

  • Không gọi được: Kiểm tra container trong cùng network (docker network inspect).
  • Port lỗi: Dùng docker logs xem service có chạy không.

Ứng Dụng trong DevOps

Pipeline CI/CD

  • Test multi-container:
    test:
    image: docker
    script:
      - docker network create test-net
      - docker run -d --name db --network test-net postgres
      - docker run -d --name app --network test-net my-app
      - docker exec app pytest
  • Kết quả: App test gọi DB qua network nội bộ.

Microservices

  • Overlay network kết nối web, API, DB trên nhiều host trong Swarm.
  • Ví dụ: Một team dùng overlay để scale API từ 1 lên 10 container, không cần thay đổi code.

Case study: Một hệ thống DevOps giảm thời gian test từ 5 phút xuống 1 phút nhờ bridge network thay vì port mapping phức tạp.

Kết Luận

Docker Networking trong DevOps là nền tảng để container giao tiếp hiệu quả, từ bridge network cho test đơn giản, overlay network cho scale multi-host, đến container kết nối trong pipeline. Thực hành với Nginx và Flask cho thấy bạn có thể tối ưu mạng cho CI/CD và microservices. Bài tiếp theo, chúng ta sẽ khám phá Docker Volume và Storage – cách quản lý dữ liệu trong DevOps.

Bài tập nhỏ:

  • Tạo bridge network, chạy 2 container Alpine, ping qua lại bằng tên.
  • Chạy Nginx với host network, so sánh với bridge về truy cập port.
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cở sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master