iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0

在完成前端網頁開發後,一個完整的網站專案通常還包含後端程式碼、資料庫檔案,以及各種環境設定檔案。若要將這些檔案移轉到其他電腦或伺服器進行測試,可能會因作業系統、軟體版本或系統環境不同,而造成相容性問題與部署困難。

Docker則是為了解決跨平台部署與環境一致性問題而誕生的應用程式。Docker採用容器(container)的技術,將前端、後端、資料庫以及所需的環境與設定,一併打包到容器中,讓專案能在不同環境中快速、穩定地運行,提升可攜性與部署效率。

在啟動Docker容器前,可以利用事先撰寫的Dockerfile來定義專案的建置流程與依賴環境,確保在任何地方部署時都能保持一致,進一步提升專案的可攜性與展示的便利性,相關Dockerfile的內容撰寫,參考如下:

# docker-compose.yml
version: '3.0'

services:
  # MSSQL資料庫服務
  database:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: database
    user: root
    ports:
      - "1433:1433" # 由主機(左)1433,連到容器(右)1433
    volumes:
      - ./database/mssql_data:/var/opt/mssql/data # 永久儲存資料庫檔案
      - ./database/mssql_backup:/backup           # 儲存備份檔
    env_file: 
      - ./server/envs/dev.env # 匯入環境變數及位置
    networks:
      - global-net

  # 後端服務
  backend:
    build:
      context: ./server                 # 建立映像檔的位置
      dockerfile: server.Dockerfile     # 使用server.Dockerfile作為建置檔
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./server:/usr/src/app/ 
    ports:
      - "8002:8000" # 外部訪問網址(localhost:8002),於容器中被訪問的網址(localhost:8000)
    env_file: './server/envs/dev.env'   # 匯入環境變數及位置
    restart: "always"
    networks:
      - global-net

  # 前端服務
  frontend:
    build:
      context: ./client                 # 建立映像檔的位置
      dockerfile: client.Dockerfile     # 使用client.Dockerfile作為建置檔
    ports:
      - "8080:8080" # 外部訪問網址(localhost:8080),於容器中被訪問的網址(localhost:8080)
    stdin_open: true
    tty: true
    networks:
      - global-net

# 使用共用網路,以讓各容器互通
networks:
  global-net:
    driver: bridge
  • Dockerfile中,常有(左邊):(右邊)的配對,代表的是本機(左邊)的資料夾檔案,放置於容器(右邊)的資料夾位置。
  • 在容器之中,各服務共用相同的網路,服務彼此間可直接用容器名稱相互連線。

環境變數的設定檔案server/envs/dev.env,可於外部資料夾另外放置,避免機敏性的資料寫於Dockerfile,並因Dockerfile移轉而造成的資料外洩風險,參考如下:

# SQL Server啟動時,讀取
SA_PASSWORD=sa管理員帳號密碼
ACCEPT_EULA=Y

# Django啟動時,讀取開發用環境變數
SECRET_KEY=Django後端密碼
DEBUG=True

# Django啟動時,讀取資料庫設定
DB_NAME=資料庫名稱
DB_USER=資料庫帳號
MSSQL_SA_PASSWORD=資料庫密碼
DB_HOST=資料庫網址,連接埠

要啟動Docker之前,需先安裝Docker Desktop應用程式,且啟動時需開啟所安裝的Docker Desktop應用程式軟體。

將Dockerfile,即docker-compose.yml放置於專案根目錄,並輸入啟動指令。

docker-compose up --build -d
  • --build,代表啟動前先重新建置(build)映像檔
  • -d,代表背景執行

成功啟動後,可以查看所啟動的容器狀態,檢查各服務有沒有順利運行中。

docker-compose ps

啟動容器後,即可訪問容器所提供的本機網址,以查看網站有無正常顯示,及API請求有無順利完成。

若要停止容器,可區分是否移除容器、網路,而有不同指令,但皆會保留映像檔與資料(volumes),參考如下。

# 移除容器、刪除網路,但保留映像檔與資料(volumes)
docker-compose down

# 保留容器、保留網路,並保留映像檔與資料(volumes)
docker-compose stop

上一篇
Day 26: Django專案結構簡單介紹
下一篇
Day 28: Docker區分開發及正式環境的部署設定
系列文
從零打造網頁系統:非資訊人也能完成的全端專題實作29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言