Trong Dockerfile, EXPOSE là một chỉ thị được sử dụng để khai báo các cổng mạng mà container Docker sẽ lắng nghe khi chạy.

Chỉ thị EXPOSE không mở các cổng trên host machine hoặc container, mà chỉ thông báo rằng container sẽ lắng nghe các cổng đã được khai báo khi chạy. Để thực tế mở các cổng và kết nối chúng với các cổng trên host machine, bạn cần sử dụng tùy chọn -p hoặc –publish khi chạy lệnh docker run.

Cú pháp của EXPOSE trong Dockerfile như sau:

EXPOSE <port1> [<port2>...]
  • <port1>, <port2>, vv.: Các cổng mạng mà container sẽ lắng nghe.

Ví dụ, để khai báo rằng container sẽ lắng nghe cổng 80 và 443, bạn có thể thêm dòng sau vào Dockerfile:

EXPOSE 80 443

Khi chạy container từ image đã xây dựng, bạn có thể mở các cổng trên host machine và kết nối chúng với các cổng trong container bằng cách sử dụng -p hoặc –publish:

docker run -p 8080:80 -p 8443:443 tên_image

Trong ví dụ trên, cổng 80 trong container sẽ được kết nối với cổng 8080 trên host machine và cổng 443 trong container sẽ được kết nối với cổng 8443 trên host machine.

Chú ý rằng chỉ thị EXPOSE chỉ là một khai báo trong Dockerfile và không thực hiện thay đổi trên host machine hoặc container. Nó chỉ thông báo rằng các cổng đã được khai báo sẽ được container lắng nghe. Việc mở và kết nối các cổng thực tế sẽ được thực hiện khi chạy container bằng lệnh docker run với tùy chọn -p hoặc –publish.

Các bước

  • Tạo một hình ảnh với hướng dẫn EXPOSE
  • Kiểm tra cổng EXPOSE trong ảnh
  • Xuất bản tất cả các cổng tiếp xúc

Tạo một image với EXPOSE

Dockerfile

FROM nginx:alpine
LABEL maintainer="hocdevops"
EXPOSE 80/tcp
EXPOSE 80/udp
CMD [ "nginx","-g","daemon off;" ]

Build docker image

$ docker build -t expose:v1 .

Tạo container dựa trên image Exposure:v1

$  docker container run --rm -d --name expose-inst expose:v1

Kiểm tra cổng EXPOSE trong image

$ docker image inspect --format= expose:v1

Publish tất cả các port

Chúng ta có thể publish tất cả port EXPOSE bằng flag -P .

$ docker container run --rm -P -d --name expose-inst-Publish expose:v1

Kiểm tra published port

$  docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                          NAMES
24983e09bd86        expose:v1           "nginx -g 'daemon of…"   46 seconds ago      Up 45 seconds       0.0.0.0:32768->80/tcp, 0.0.0.0:32768->80/udp   expose-inst-Publish
5 1 vote
Article Rating
Tagged:
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments