iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Software Development

30天收斂後端開發心法系列 第 28

30天收斂後端開發心法 - (28) Docker Compose

  • 分享至 

  • xImage
  •  

為什麼需要 Docker Compose?

前面我們提到 Dockerfile 是將「環境與服務設定」寫成文字檔,來建構 image 並運行 container。但實際上,單一服務往往不夠,例如:

  • 你可能用 Nginx 來接收使用者請求
  • 再交給 PHP(Laravel 專案)來處理

如果這兩個 container 彼此無法透過網路連線,那即使都成功啟動,也完全無法對外提供服務。因此,Docker 官方推薦使用 Docker Compose,這是一個可以定義多個服務(containers)間如何協作的工具。

安裝 Docker Compose(以 Linux 為例)

Docker Compose 現在被改為 Docker CLI 的 plugin,所以需透過套件管理工具安裝:

sudo yum install docker-compose-plugin
安裝完成後,可透過以下指令檢查是否成功:

docker compose version

建立 docker-compose.yml

在專案根目錄中建立一個設定檔:

touch docker-compose.yml

範例內容解析

services:  # 定義多個 container 組成的服務群
  nginx:  # 第一個服務:Nginx
    image: nginx:mainline-alpine  # 使用官方輕量 Nginx image
    ports:
      - "${NGINX_PORT:-8080}:8080"  # 對外映射:主機:容器
    volumes:
      - ./environmentConfig/nginx.conf:/etc/nginx/nginx.conf  # 覆蓋 Nginx 設定檔
    networks:
      - backend-local  # 加入內部自訂的 bridge 網路
    depends_on:
      - php  # 等待 php container 啟動後再啟動 nginx
  php:  # 第二個服務:PHP (Laravel 專案)
    image: "${IMAGE_NAME:-demo-php}"  # 支援 .env 設定 image 名稱
    build:  # 若 image 尚未存在,從 Dockerfile 建立
      context: ./  # Dockerfile 所在目錄(. 是當前目錄)
      dockerfile: Dockerfile
      args:
        - APP_ENV=${APP_ENV}  # 傳入建構參數(來自 .env)
    volumes:
      - ./environmentConfig/php.ini:/usr/local/etc/php/conf.d/local.ini
      - ./environmentConfig/www.conf:/usr/local/etc/php-fpm.d/www.conf
      - ./:/www  # 專案資料夾掛載進 container 的 /www
      - /www/vendor
      - /www/bootstrap/cache
    extra_hosts:
      - "host.docker.internal:host-gateway"
      # 讓 container 可透過 host.docker.internal 訪問主機 IP(Linux 上需加這行)
    expose:
      - "9003"
      # 開放給同網段容器使用的 port(但不對外公開)
    networks:
      - backend-local
networks:
  backend-local:
    driver: bridge  # 使用 bridge 模式建立內部虛擬網路

重點整理

  • 使用 Docker Compose 可以讓 多個 container 一起啟動、共用網路
  • 透過 volumes 掛載設定檔與程式碼,達到同步開發
  • depends_on 解決了啟動順序問題
  • networks 則提供 container 間通訊的橋梁

範例完整啟動流程

docker compose up -d --build


上一篇
30天收斂後端開發心法 - (27) Dockerfile
下一篇
30天收斂後端開發心法 - (29) K8S
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言