iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0

在上一篇內容中我們透過 Docker Compose 同時開啟了網站服務和資料庫。透過簡單的操作就可以知道其驚人的方便性。本篇當中我們更細部的介紹 Docker Compose 的參數及設定。

YAML

我們在編寫 Docker Compose服務時,是透過docker-compose.yml 檔案進行相關設定,那什麼是 .yml檔呢?
yml檔 指的是 YAML 格式的檔案, YAML 的讀法為『耶某』。是一種就有高可讀性,用於表達資料序列的格式。 YAML的全名為 "YAML Ain't Markup Languoage", 起初的名稱為 "Yet Another Markup Language",表示這格式是以數據為中心,不是以標記語言為重點。

YAML檔可以使用縮排/區塊進行表示,而我們在此處為縮排方式,透過縮排區隔服務。更細部的介紹可以參考 YAML官網及維基百科。

https://yaml.org/
https://zh.wikipedia.org/wiki/YAML

Docker Compose Yaml 介紹

再回頭來看看上一篇中的 docker-compose.yml

version: '3'

services:
  app:
    # docker build 的設定
    build:
      context: .
    #port 對應
    ports:
      - "8888:8888"
    #volumes 對應
    volumes:
      - ./app:/app
    #指令
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8888"
      
  db:
    # mysql image 版本
    image: mysql:5.7
    # 是否自動啟動
    restart: always
    # 環境變數設定
    environment:
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'admin'
      MYSQL_PASSWORD: 'admin'
      MYSQL_ROOT_PASSWORD: 12345678
    ports:
      - '3306:3306'

version 定義docker-compose 的版本
service 的區塊當中,我們設定我們會用到的服務,其中在這邊我們設定為 app 以及 db,並在各自的縮排下進行係度的設定

app 區塊

  1. build 為指定 docker build的相關設定,我們設定 context: . 其中 "."的符號代表當前的路徑,程式會抓取當前路徑的Dockerfile進行 docker build
  2. ports 設定docker 內外部 port 的連結這邊的意思是,外部的8888對應的是 docker 的 8888 port
  3. volumes 可以將 docker 外部以及內部的資料夾進行同步,因此當內部有改動時外在外部的夾也可以即時看到,反之若是外部有改動時,內部也可以馬上擁有最新的版本,這在開發時是十分方便的設定,讓我們改動程式碼時,不需要重新一直build改動的程式。在這邊的 ./app:/app 意思是把外部的app資料夾,映射到內部的app資料夾。
  4. command 則是設定完參數以及環境之後,執行的指令。在這邊我們希望他設定完參數之後就啟動server,因此可以直接下達 python manage.py runserver 0.0.0.0:8888

db 區塊

  1. image 選擇 db想使用的image 檔案,系統會將其抓下來並且啟動
  2. restart 設定程式開機或是掛掉時是否自動重新啟動
  3. environment 則是設定 mysql相關的設定
  4. ports 一樣是將外部的port對應到內部

在這邊我們列出常用到的,以及本次教學裡會用到的設定,Docker Compose 還有更多可以設定的功能,有興趣可以參考其官網。

https://docs.docker.com/compose/


上一篇
[Day9] - Docker Compose 介紹與實作
下一篇
[Day11] - Django REST Framework 介紹
系列文
使用Django Rest Framework, Docker, Docker Compose 製作後端服務應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言