Sử dụng Dockerfile để hiển thị các cổng

Using Dockerfile Expose Ports



Thực sự dễ dàng để tạo một hình ảnh Docker tùy chỉnh từ các hình ảnh Docker hiện có bằng cách sử dụng Dockerfile . Thông thường mọi người sử dụng một hình ảnh cơ sở tối thiểu, chẳng hạn như núi cao hoặc ubuntu / debian cho mục đích đó. Giả sử, bạn muốn tạo hình ảnh Docker tùy chỉnh của ứng dụng web yêu thích của bạn được viết bằng NodeJS. Ứng dụng sẽ chạy trên cổng 8080 . Theo mặc định, bạn sẽ không thể truy cập vào ứng dụng web trên cổng 8080 từ máy chủ của bạn. Bạn sẽ phải nói với Docker rằng bạn muốn để lộ hoặc mở cổng 8080 để có thể truy cập nó từ máy chủ của bạn.

Trong bài viết này, tôi sẽ chỉ cho bạn cách để lộ các cổng bằng cách sử dụng Dockerfile với một ví dụ trong thế giới thực. Bắt đầu nào.







Đầu tiên, chúng ta phải tạo một thư mục dự án. Trong thư mục này, bạn nên giữ tất cả các tệp dự án và Dockerfile .



Chạy lệnh sau để tạo thư mục dự án ứng dụng của tôi/ trong thư mục HOME của người dùng của bạn và điều hướng đến nó:



$mkdir~/ứng dụng của tôi&& đĩa CD~/ứng dụng của tôi

Chuẩn bị sẵn sàng ứng dụng web:

Bây giờ hãy tạo một thư mục src / bên trong ~ / myapp / thư mục bằng lệnh sau:

$mkdirsrc

bên trong src / thư mục, tất cả mã nguồn của ứng dụng NodeJS của tôi sẽ được giữ lại.

Tôi sẽ chỉ tạo một đơn giản app.js tập tin trong src / thư mục và chạy một máy chủ web đơn giản trên cổng 8080 chỉ để trình diễn.

Các src / app.js tệp chứa các dòng mã sau:

Viết Dockerfile và phơi bày các cổng:

Bây giờ hãy tạo một Dockerfile bên trong ~ / myapp thư mục bằng lệnh sau:

$chạm vàoDockerfile

Bây giờ gõ vào các dòng sau để Dockerfile và lưu nó. Tôi sẽ thảo luận về ý nghĩa của những dòng này sau.

Ở đây, TỪ núi cao: 3,8 có nghĩa là, sử dụng núi cao: 3,8 Hình ảnh Docker làm nền tảng cho hình ảnh mới mà chúng tôi sẽ xây dựng từ hình ảnh này Dockerfile .

Cập nhật apk RUN có nghĩa là, chạy cập nhật apk lệnh trong hình ảnh Docker cơ sở núi cao: 3,8 .

RUN apk thêm –no-cache nodejs có nghĩa là, chạy thêm apk lệnh cài đặt ngôn ngữ lập trình NodeJS trong núi cao: 3,8 Hình ảnh cơ sở Docker.

SAO CHÉP ./src / app có nghĩa là, sao chép tất cả các tệp từ ~ / myapp / src thư mục đến /ứng dụng thư mục của hình ảnh Docker mới mà chúng tôi sẽ tạo bằng cách sử dụng Dockerfile .

CMD [/ usr / bin / node, /app/app.js] có nghĩa là, chạy /app/app.js tệp từ vùng chứa mới bằng cách sử dụng nút nhị phân nằm ở / usr / bin / node .

Cuối cùng, để EXPOSE 8080 / tcp nghĩa là, để lộ hoặc mở cổng TCP 8080 vào máy tính chủ.

Tạo hình ảnh Docker tùy chỉnh bằng Dockerfile:

Bây giờ chúng ta hãy tạo một hình ảnh Docker tùy chỉnh alpine-node: v1 sử dụng Dockerfile mà chúng tôi vừa tạo.

Trước tiên, hãy đảm bảo rằng bạn đang ở trong ~ / myapp / thư mục và sau đó chạy lệnh sau để tạo hình ảnh Docker tùy chỉnh của bạn alpine-node: v1 :

$xây dựng docker-NSnút núi cao: v1.

Như bạn có thể thấy, hình ảnh Docker tùy chỉnh alpine-node: v1 đang được tạo. Hình ảnh Docker cơ sở bắt buộc và các gói đang được lấy từ internet.

Như bạn có thể thấy, hình ảnh Docker tùy chỉnh alpine-node: v1 được tạo thành công.

Kiểm tra Hình ảnh Docker Tùy chỉnh:

Bây giờ chúng ta có thể kiểm tra hình ảnh Docker tùy chỉnh alpine-node: v1 rất dễ dàng. Tất cả những gì chúng ta phải làm là tạo một vùng chứa từ alpine-node: v1 hình ảnh.

Chạy lệnh sau để tạo vùng chứa Docker www từ alpine-node: v1 Hình ảnh Docker:

$docker chạy-NS -nó --Tênwww alpine-node: v1

Thùng chứa www được tạo ra.

Bây giờ chúng ta hãy tìm hiểu địa chỉ IP của www Vùng chứa Docker với lệnh sau:

$docker kiểm tra www| nắm chặtĐịa chỉ nhà

Như bạn có thể thấy, trong trường hợp của tôi, địa chỉ IP là 172.17.0.3 . Vì vậy, ứng dụng NodeJS mà tôi đã viết sẽ có thể truy cập được từ trình duyệt web tại cổng 8080 của địa chỉ IP này.

Thì đấy! Tôi có thể vào cảng 8080 của tôi www Hộp chứa Docker.

Về cơ bản, đó là cách bạn hiển thị các cổng nhất định trong hình ảnh Docker tùy chỉnh mà bạn sẽ xây dựng bằng cách sử dụng Dockerfile .

Hiển thị các cổng TCP và UDP bằng Dockerfile:

Trong phần trước của bài viết này, tôi đã chỉ cho bạn cách để lộ một cổng TCP bằng cách sử dụng Dockerfile .

Bạn có thể dễ dàng để lộ cổng TCP (giả sử cổng TCP 53 ) trong của bạn Dockerfile với dòng sau:

PHƠI RA53/tcp

Bạn cũng có thể hiển thị một cổng UDP (Giả sử cổng UDP 53 ) với dòng sau trong của bạn Dockerfile :

PHƠI RA53/udp

Bạn có thể hiển thị cổng TCP và UDP cùng lúc với các dòng sau trong Dockerfile :

PHƠI RA53/tcp
PHƠI RA53/udp

Nếu bạn không chỉ định giao thức nào (TCP hoặc UDP) sẽ sử dụng, TCP được sử dụng theo mặc định. Ví dụ: nếu bạn viết dòng sau trong Dockerfile :

PHƠI RA53

Sau đó, Docker sẽ giả định rằng bạn muốn sử dụng cổng TCP 53.

Hiển thị nhiều cổng bằng Dockerfile:

Giả sử bạn muốn tạo hình ảnh Docker ngăn xếp MEAN tùy chỉnh. Trong trường hợp này, bạn sẽ chạy máy chủ HTTP trên một số cổng (giả sử cổng TCP 80 hoặc 8080), máy chủ FTP chạy trên cổng TCP 21, máy chủ cơ sở dữ liệu SQL (giả sử MySQL) chạy trên cổng TCP 3306, hoặc máy chủ cơ sở dữ liệu NoSQL (giả sử MongoDB) chạy trên cổng TCP 27017 hoặc 27018, một máy chủ SSH chạy trên cổng TCP 22. Đó là rất nhiều cổng!

Tin tốt là; bạn có thể hiển thị nhiều cổng nếu cần trên hình ảnh Docker tùy chỉnh của bạn được tạo bằng cách sử dụng Dockerfile .

Các cổng trong ví dụ trên có thể được hiển thị với các dòng sau trong Dockerfile :

PHƠI RA80/tcp
PHƠI RA8080/tcp
PHƠI RAhai mươi mốt/tcp
PHƠI RA22/tcp
PHƠI RA3306/tcp
PHƠI RA27017/tcp
PHƠI RA27018/tcp

Nếu muốn, bạn có thể để lại đặc tả giao thức vì Docker sử dụng TCP theo mặc định và làm điều tương tự với các dòng sau trong Dockerfile :

PHƠI RA80
PHƠI RA8080
PHƠI RAhai mươi mốt
PHƠI RA22
PHƠI RA3306
PHƠI RA27017
PHƠI RA27018

Nếu cần, bạn có thể kết hợp các cổng TCP và UDP trong Dockerfile . Ví dụ: nếu bạn chạy máy chủ DNS (chạy trên cổng UDP 53), cùng với ví dụ trên, bạn sẽ thêm các dòng sau vào Dockerfile .

PHƠI RA80
PHƠI RA8080
PHƠI RAhai mươi mốt
PHƠI RA22
PHƠI RA53/udp
PHƠI RA3306
PHƠI RA27017
PHƠI RA27018

Vì vậy, đó là cách bạn hiển thị các cổng bằng cách sử dụng Dockerfile . Để tìm hiểu thêm về Dockerfile và để lộ các cổng bằng cách sử dụng Dockerfile , đọc Dockerfile hướng dẫn tham khảo tại https://docs.docker.com/engine/reference/builder/#expose

Cảm ơn đã đọc bài viết này.