Docker: LAMP

tl;dr

序言

前面裝 nginx 已經吃過太多苦頭,所以我決定試試 Apache。正好這次有人把筆記與程式寫好了。這對我而言幫助甚多。

@titangene 寫得非常清楚。裝起來實在比幾乎所有 nginx 系的 container 設定順利很多。不過還是有幾個點可以說。

Trobuleshooting

先來點小提示:

  1. 啟動指令是 docker-compose up -d。其中 d 是 detach 的縮寫。它會讓 docker 背景執行。啟動後可以用 GUI 介面來觀察。
  2. 如果一切都失敗了,永遠可以把 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 MySQLGD 套件的話可以這麼下:

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 的配置、還有如何銜接他們。

感覺,這就好像在想,怎麼讓偷渡客在貨輪中的貨櫃跑來跑去,又不被船員發現一樣;又或著,就像是玩創世組合,但難度設為地獄級一樣。

參考資料