Khái niệm cơ bản về Docker Network

Mở một terminal và gõ lệnh docker network, đây là câu lệnh chính để định cấu hình và quản lý mạng container.

Bạn có thể thấy các lệnh phụ có sẵn, chúng ta có thể tạo các mạng mới, liệt kê cách mạng hiện có, kiểm tra và xoá các mạng.

Hãy xem qua các mạng hiện có mà chúng ta có kể từ khi cài đặt, sử dụng lệnh docker network list.

Mỗi mạng có một NAME và ID duy nhất. Mỗi mạng cũng được liên kết với một driver. Lưu ý rằng mạng “bridge” và mạng “host” có cùng tên với driver tương ứng của chúng.

Tiếp theo, chúng ta có thể xem xét kỹ hơn các mạng của mình bằng lệnh docker network inspect.

Khi chạy lệnh docker network inspect bridge, bạn có thể nhận được tất cả các chi tiết cấu hình của mạng đó. Điều này bao gồm tên, ID, driver, subnet, container được liên kết và rất nhiều thông tin khác.

Docker Bridge Networking

Đầu ra ở trên cũng cho thấy rằng mạng bridge có phạm vi cục bộ. Điều này có nghãi là mạng chỉ tồn tại trên máy chủ Docker này. Điều này đúng với tất cả các mạng sử dụng driver bridge – bridge driver cung cấp mạng cho single-host.

Tất cả các mạng được tạo bằng bridge driver đều dựa trên cấu hình Linux bridge (còn gọi là virtual switch)

Theo mặc định, bridge network được gán cho các container mới, nghĩa là trừ khi bạn chỉ định một mạng cụ thể, tất các các container sẽ được kết nối với mạng bridge.

Kết nối tới một container

Hãy tạo một container mới với câu lệnh docker run -d ubuntu

Sau đó, nếu chúng ta kiểm tra mạng bridge của mình với lệnh docker network inspect bridge, bạn sẽ thấy rằng container đó khớp với những gì chúng ta vừa triển khai, vì chúng ta không chỉ định mạng mặc định cho nó.

Cấu hình NAT cho kết nối bên ngoài

Trong bước này, chúng ta sẽ bắt đầu một NGINX container mới và mapping port 8080 trên máy chủ Docker tới cổng 80 bên trong container. Điều này có nghĩa là các truy cập vào máy chủ Docker trên cổng 8080 sẽ được chuyển sang cổng 80 bên trong container.

Bắt đầu một container mới dựa trên NGINX image chính thức bằng cách chạy docker run --name web1 -d -p 8080:80 nginx

Xem lại trạng thái của container và port mapping bằng cách chạy docker ps

Lưu ý lệnh mà container đang chạy cũng như port mapping – 0.0.0.0:8080->80/tcp ánh xạ cổng 8080 trên tất cả các interfaces của máy chủ tới cổng 80 bên trong container web1.

Bây giờ chúng ta cần địa chỉ IP cho máy chủ thực tế của mình, có thể thực hiện việc này bằng cách vào WSL terminal của mình và sử dụng lệnh ip addr.

Sau đó, chúng tôi có thể lấy IP này, mở trình duyệt và truy cập http://172.25.218.154:8080/. IP của bạn có thể khác.

Bảo vệ container của bạn

Container cung cấp môi trường an toàn cho workloads của bạn so với cấu hình một máy chủ đầy đủ. Chúng cung cấp khả năng chia nhỏ các ứng dụng của bạn thành nhiều thành phần nhỏ hơn, được liên kết lỏng lẻo, mỗi thành phần được tách biệt với nhau, giúp giảm tổng thể bề mặt cho các cuộc tấn công.

Nhưng chúng không tránh khỏi các tin tặc đang tìm cách khai thác hệ thống. Chúng ta vẫn cần hiểu những nguy cơ bảo mật của công nghệ và tuân thủ, áp dụng các thực hành tốt nhất.

Di chuyển khỏi quyền root

Tất cả các container mà chúng ta đã triển khai đều đang sử dụng quyền root đối với process trong container của bạn. Điều này có nghĩa là họ có toàn quyền truy cập của admin vào môi trường máy chủ và vùng chứa của bạn. Chúng ta đều đã biết rằng những hệ thống này sẽ không hoạt động lâu dài. Nhưng bạn cũng đã thấy rằng để khởi động và chạy chúng dễ dàng như thế nào.

Chúng ta có thể thêm một vài bước vào quy trình của chúng ta để sử dụng người dùng không phải root như một thực hành tốt nhất mà chúng ta ưu tiên. Khi tạo các tệp dockerfile, chúng ta có thể tạo tài khoản người dùng.


FROM ubuntu:20.04
RUN apt-get update && apt-get upgrade -y
RUN groupadd -g 1000 testuser && useradd -r -u 1000 -g testuser testuser
USER testuser

Tuy nhiên, phương pháp này không giải quyết được lỗ hổng bảo mật tiềm ẩn của chính image đó. Do đó, tốt hơn là chỉ định người dùng không phải root trong Dockerfile của bạn để vùng chứa của bạn luôn chạy an toàn.

Private Registry

Một điều khác mà chúng ta đã sử dụng nhiều là các registry công khai như DockerHub. Thay vào đó, sử dụng một private registry chứa các container image do tổ chức của bạn có nghĩa là bạn có thể lưu trữ ở nơi bạn muốn hoặc cũng có các dịch vụ được quản lý sẵn cho việc này, nhưng nhìn chung, điều này mang lại cho bạn quyền kiểm soát hoàn toàn cho các image.

DockerHub cung cấp cho bạn một điểm bắt đầu rất tốt, nhưng nó chỉ cung cấp cho bạn một dịch vụ cơ bản mà bạn phải đặt nhiều niềm tin vào các image publisher.

Tinh gọn và sạch sẽ

Tôi đã đề cập đến việc này trong suốt các bài viết về container, mặc dù nó không liên quan tới bảo mật. Nhưng kích thước container của bạn có thể ảnh hưởng đến bảo mặt trên khía cạnh về bề mặt tấn công. Nếu bạn có tài nguyên mà bạn không sử dụng trong ứng dụng của mình thì bạn không cần nó trong container của mình.

Đây cũng là mối quan tâm chính của tôi với việc lấy các hình ảnh latest bởi vì điều đó cũng có thể làm cho image của bạn lớn lên rất nhiều. DockerHub cũng hỗ trợ hiển thị kích thước sau khi nén cho từng hình ảnh ở trong kho lưu trữ.

docker image là một câu lệnh tốt để kiểm tra kích thước các image của bạn.

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.