Docker: LAMP
序言
前面裝 nginx 已經吃過太多苦頭,所以我決定試試 Apache。正好這次有人把筆記與程式寫好了。這對我而言幫助甚多。
@titangene 寫得非常清楚。裝起來實在比幾乎所有 nginx 系的 container 設定順利很多。不過還是有幾個點可以說。
Trobuleshooting
先來點小提示:
- 啟動指令是
docker-compose up -d
。其中 d 是 detach 的縮寫。它會讓 docker 背景執行。啟動後可以用 GUI 介面來觀察。 - 如果一切都失敗了,永遠可以把 Image 砍掉重來。
PHP extensions
PHP 擁有很多套件可以安裝:只要有相應的配置,PHP 就可以跑。一般而言,我們需要從 PHP 的設定文件修改;但這次的 container 本身並沒有設定文件,怎麼辦呢?
答案是 docker-php-ext-*
指令。Docker 在官方 PHP 套件內添加了 docker-php-ext-configure
, docker-php-ext-install
, docker-php-ext-enable
方便開發者安裝 PHP 套件。
所以如果要安裝 PDO MySQL 與 GD 套件的話可以這麼下:
FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
&& docker-php-ext-install -j$(nproc) pdo_mysql
mysql and mariadb
我把裡面的資料庫改為 mariadb 來用,想說兩個應該差不多。
我錯了。
故事是這樣的:如果想親自檢查資料庫的話,怎麼辦呢?當然是去資料庫 Image 的 console 了。
$ mysql
/bin/sh: 1: ㅡmysql: not found
咦?為什麼不能用?
查了一下,原來是因為 Docker 的 mariadb 並沒有 mysql
指令,所以要改用 mariadb
這個指令進去:
$ mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 87
Server version: 11.2.2-MariaDB-1:11.2.2+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
感想
伺服器配置需要很多、很多知識。多到我完全很難全部容納。尤其是 nginx 非常難用。Apache 相較之下好用多了。
不過在怎麼抱怨,問題其實都不是 Docker 本身,而是各 Image 的配置、還有如何銜接他們。
感覺,這就好像在想,怎麼讓偷渡客在貨輪中的貨櫃跑來跑去,又不被船員發現一樣;又或著,就像是玩創世組合,但難度設為地獄級一樣。