Docker Compose Yaml Ports
今天要來學習如何在 Docker Compose 開放 Port 讓我們可以使用到 container 提供的服務,首先先看一下文檔
用法也跟之前類似,之前的作法是需要先在 Dockerfile 設定要開放的 container port, 之後在 docker run
帶入 -p
參數,指定要和哪個 Host port 進行綁定
在docker compose 中也是要先在 Dockerfile 設定,之後在 docker-compose.yml 中進行設定
mkdir mycompose && cd $_
vi docker-compose.yml
services:
nginx:
image: nginx
tty: true
stdin_open: true
ports:
- 8081:80
接下來我們使用命令 docker compose up -d
來運行這個設定檔
此設定檔會將 container 的 80 port 與 Host 8081 port 進行綁定
我們可以使用瀏覽器開啟目前的 Host ip 加上 8081 port 就能看到歡迎頁面了
也跟 Volumes 的設定一樣 ports 也支援長寫法
services:
nginx:
image: nginx
tty: true
stdin_open: true
ports:
- target: 80
published: 8081
protocol: tcp
mode: host
還有令一個好處是可以直接綁定一個範圍的 port
services:
nginx:
image: nginx
tty: true
stdin_open: true
ports:
- "9090-9091:8080-8081"
``
我們參考以前的[文章](https://blog.allengaodev.com/posts/dca-expose-port){target="_blank"}來做個綜合練習
``` text
touch Dockerfile
touch 8081.conf
touch custom.html
#8081.conf
server {
listen 8081;
listen [::]:8081;
server_name localhost;
location / {
root /usr/share/nginx/html;
index custom.html custom.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
#custom.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx! From Custom Port</title>
</head>
<body>
<h1>Welcome to nginx! From Custom Port</h1>
</body>
</html>
我們準備一個客製化的 Nginx image 並且開放 8081 port 顯示我們的客制頁面
準備好之後可以使用 docker compose 另一個方便的特性,就是可以直接讓 docker compose 直接讀取我們的 Dockerfile
並且可以直接幫我們建構出 image 我們可以不用自己手動輸入命令 docker build
這邊多了幾個設定值 build
、 context
、 dockerfile
context
指定建構的環境,這邊指定與docker-compose.yml同一個目錄dockerfile
指定 Dockerfile 的位置,可以不用在同一個資料夾
services:
mynginx:
build:
context: .
dockerfile: ./Dockerfile
image: mynginx
tty: true
stdin_open: true
ports:
- 80:80
- 8081:8081
最後再次輸入命令 docker compose up -d
,就可以在 80 port 看到歡迎頁面與 8081 port 看到我們的客制頁面
Summary
今天學習了如何開放 port 讓我們更方便使用 container 內部的服務,使用 docker compose 之後我們可以一次綁定大量的 port
相比之前需要一個一個綁定,新的設定方法方便了許多