Docker Certified Associate(DCA)認證考試學習- Docker Compose Yaml Ports Docker Certified Associate(DCA)認證相關資源、Docker Compose Yaml Ports

Published on Friday, March 10, 2023

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 這邊多了幾個設定值 buildcontextdockerfile

  • 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
相比之前需要一個一個綁定,新的設定方法方便了許多