這次分享的內容是使用 docker 來建置服務與環境,減少上述問題的發生,讓協同開發變得順利。首先準備好 docker 環境,在開發 Joomla 時會需要 PHP, MySQL/Mariadb, Apache/Nginx (常見配置),以下內容會用官方映像檔 Joomla 和 Mariadb 作範例,說明如何建置 Joomla 服務。
# 建立 docker-compose.yml cd ~ mkdir cms touch cms/docker-compose.yml # 修改 docker-compose.yml 的內容 vi docker-compose.yml
version: '3' services: joomla: image: joomla container_name: web restart: always ports: # 掛載本機連接埠至容器連接埠 - 8080:80 environment: # Joomla default db connection settings # mariadb 指的是 mariadb 容器名稱 JOOMLA_DB_HOST: mariadb # 使用以下環境變數設定 Joomla 資料庫連線 JOOMLA_DB_USER: web_admin JOOMLA_DB_PASSWORD: web_admin_pwd JOOMLA_DB_NAME: web mariadb: image: mariadb container_name: mariadb restart: always environment: # 使用以下環境變數設定初始化資料庫 MARIADB_ROOT_PASSWORD: root_pwd MARIADB_USER: web_admin MARIADB_PASSWORD: web_admin_pwd MARIADB_DATABASE: web
# 接著執行以下指令啟動服務(容器) cd cms docker-compose up -d docker logs -f
接著畫面會顯示以下資訊,表示資料庫已成功建立,Joomla 啟動正常,可以發現以下重點:
以上為完整的 Joomla 網站建置流程,網站和資料庫在每次停用、刪除,啟用容器,資料都會被重置。
在開發網站的時候會需要更新檔案與程式碼,可以使用以下兩種方式把資料保存下來。
joomla: image: joomla container_name: web ... volumes: # 本機路徑掛載至容器內路徑 - ~/cms/web:/var/www/html # 使用持久化資料卷掛載至容器內路徑 - web-data:/var/www/html mariadb: image: mariadb container_name: mariadb ... volumes: # 本機路徑掛載至容器內路徑 - ~/cms/db:/var/lib/mysql # 使用持久化資料卷掛載至容器內路徑 - db-data:/var/lib/mysql volumes: # 建立持久化資料卷 - web-data: - db-data:
之後只需要啟動、關閉容器,就能夠即時開發,預覽網站了。
docker-compose up -d docker-compose down
使用 docker 來統一各個開發者的開發環境,來減少環境差異,亦能保持環境單一與隔離性。若是在客戶端發生問題,透過 docker 能夠快速建立相似的使用環境,來釐清與排除問題。這些特點對比於開頭提到的不同開發環境來說,在啟動環境所花費的時間、服務使用的資源量、環境的掌控度等等都有著顯著的優勢。當然每個工具都有它的長處與適用的時機,在使用時需評估何種工具較為合適,以及發揮其功用,才能把事情做好。這篇文章主要大略說明如何使用 docker 來建置 Joomla 網站,之後有時間的話再來分享更細節、觀念與設定。