Dockerfile
· 3.0 KiB · Docker
Brut
# 強制指定使用 bookworm (Debian 12) 基礎映像檔,避免 Trixie 的套件衝突
FROM php:8.2-apache-bookworm
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# 1. 修正網路連線並安裝系統相依套件
RUN rm -f /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list && \
printf "deb https://free.nchc.org.tw/debian bookworm main contrib non-free non-free-firmware\n\
deb https://free.nchc.org.tw/debian bookworm-updates main contrib non-free non-free-firmware\n\
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware\n" > /etc/apt/sources.list && \
# 第一次 update 必須跳過驗證
apt-get -o Acquire::https::Verify-Peer=false update && \
apt-get install -y --no-install-recommends -o Acquire::https::Verify-Peer=false \
ca-certificates \
curl \
gnupg \
gnupg2 && \
# 第二步:有了證書後安裝其餘套件(Bookworm 絕對不會有 libssl 版本衝突)
apt-get update && apt-get install -y --no-install-recommends \
lsb-release \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libgmp-dev \
libxml2-dev \
libcurl4-gnutls-dev \
libmariadb-dev-compat \
libmariadb-dev \
libpq-dev \
libsqlite3-dev \
unixodbc-dev \
libmemcached-dev \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
# 2. 安裝微軟 ODBC Driver for SQL Server
RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
| gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \
&& echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \
> /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \
msodbcsql18 \
mssql-tools18 \
&& rm -rf /var/lib/apt/lists/*
ENV PATH="$PATH:/opt/mssql-tools18/bin"
# 3. 安裝 PHP 內建擴充
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-configure gmp \
&& docker-php-ext-install -j"$(nproc)" \
gd exif gmp mysqli pdo_mysql pdo_pgsql pgsql pdo_sqlite opcache
# 4. 安裝 PECL 擴充
RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \
&& pecl install sqlsrv pdo_sqlsrv \
&& pecl install memcached \
&& docker-php-ext-enable xmlrpc sqlsrv pdo_sqlsrv memcached
# SQL Server TLS workaround
RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \
&& echo '[default_conf]' >> /etc/ssl/openssl_custom.cnf \
&& echo 'ssl_conf = ssl_sect' >> /etc/ssl/openssl_custom.cnf \
&& echo '[ssl_sect]' >> /etc/ssl/openssl_custom.cnf \
&& echo 'system_default = system_default_sect' >> /etc/ssl/openssl_custom.cnf \
&& echo '[system_default_sect]' >> /etc/ssl/openssl_custom.cnf \
&& echo 'CipherString = DEFAULT@SECLEVEL=0' >> /etc/ssl/openssl_custom.cnf \
&& echo 'Options = UnsafeLegacyRenegotiation' >> /etc/ssl/openssl_custom.cnf
ENV OPENSSL_CONF=/etc/ssl/openssl_custom.cnf
WORKDIR /var/www/html
RUN a2enmod rewrite
| 1 | # 強制指定使用 bookworm (Debian 12) 基礎映像檔,避免 Trixie 的套件衝突 |
| 2 | FROM php:8.2-apache-bookworm |
| 3 | |
| 4 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] |
| 5 | |
| 6 | # 1. 修正網路連線並安裝系統相依套件 |
| 7 | RUN rm -f /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list && \ |
| 8 | printf "deb https://free.nchc.org.tw/debian bookworm main contrib non-free non-free-firmware\n\ |
| 9 | deb https://free.nchc.org.tw/debian bookworm-updates main contrib non-free non-free-firmware\n\ |
| 10 | deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware\n" > /etc/apt/sources.list && \ |
| 11 | # 第一次 update 必須跳過驗證 |
| 12 | apt-get -o Acquire::https::Verify-Peer=false update && \ |
| 13 | apt-get install -y --no-install-recommends -o Acquire::https::Verify-Peer=false \ |
| 14 | ca-certificates \ |
| 15 | curl \ |
| 16 | gnupg \ |
| 17 | gnupg2 && \ |
| 18 | # 第二步:有了證書後安裝其餘套件(Bookworm 絕對不會有 libssl 版本衝突) |
| 19 | apt-get update && apt-get install -y --no-install-recommends \ |
| 20 | lsb-release \ |
| 21 | libfreetype6-dev \ |
| 22 | libjpeg62-turbo-dev \ |
| 23 | libpng-dev \ |
| 24 | libgmp-dev \ |
| 25 | libxml2-dev \ |
| 26 | libcurl4-gnutls-dev \ |
| 27 | libmariadb-dev-compat \ |
| 28 | libmariadb-dev \ |
| 29 | libpq-dev \ |
| 30 | libsqlite3-dev \ |
| 31 | unixodbc-dev \ |
| 32 | libmemcached-dev \ |
| 33 | zlib1g-dev \ |
| 34 | && rm -rf /var/lib/apt/lists/* |
| 35 | |
| 36 | # 2. 安裝微軟 ODBC Driver for SQL Server |
| 37 | RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \ |
| 38 | | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ |
| 39 | && echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \ |
| 40 | > /etc/apt/sources.list.d/mssql-release.list \ |
| 41 | && apt-get update && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ |
| 42 | msodbcsql18 \ |
| 43 | mssql-tools18 \ |
| 44 | && rm -rf /var/lib/apt/lists/* |
| 45 | |
| 46 | ENV PATH="$PATH:/opt/mssql-tools18/bin" |
| 47 | |
| 48 | # 3. 安裝 PHP 內建擴充 |
| 49 | RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ |
| 50 | && docker-php-ext-configure gmp \ |
| 51 | && docker-php-ext-install -j"$(nproc)" \ |
| 52 | gd exif gmp mysqli pdo_mysql pdo_pgsql pgsql pdo_sqlite opcache |
| 53 | |
| 54 | # 4. 安裝 PECL 擴充 |
| 55 | RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \ |
| 56 | && pecl install sqlsrv pdo_sqlsrv \ |
| 57 | && pecl install memcached \ |
| 58 | && docker-php-ext-enable xmlrpc sqlsrv pdo_sqlsrv memcached |
| 59 | |
| 60 | # SQL Server TLS workaround |
| 61 | RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \ |
| 62 | && echo '[default_conf]' >> /etc/ssl/openssl_custom.cnf \ |
| 63 | && echo 'ssl_conf = ssl_sect' >> /etc/ssl/openssl_custom.cnf \ |
| 64 | && echo '[ssl_sect]' >> /etc/ssl/openssl_custom.cnf \ |
| 65 | && echo 'system_default = system_default_sect' >> /etc/ssl/openssl_custom.cnf \ |
| 66 | && echo '[system_default_sect]' >> /etc/ssl/openssl_custom.cnf \ |
| 67 | && echo 'CipherString = DEFAULT@SECLEVEL=0' >> /etc/ssl/openssl_custom.cnf \ |
| 68 | && echo 'Options = UnsafeLegacyRenegotiation' >> /etc/ssl/openssl_custom.cnf |
| 69 | |
| 70 | ENV OPENSSL_CONF=/etc/ssl/openssl_custom.cnf |
| 71 | |
| 72 | WORKDIR /var/www/html |
| 73 | RUN a2enmod rewrite |
docker-compose.yml
· 451 B · YAML
Brut
services:
php:
image: timmy/php_base:v1.0
container_name: php
restart: always
tty: true
stdin_open: true
ports:
- "8888:80"
volumes:
- "./html:/var/www/html" # 將目前目錄下的 html 資料夾對映進去
environment:
MEMCACHED_HOST: memcached
MEMCACHED_PORT: 11211
depends_on:
- memcached
memcached:
image: memcached:1.6
command: ["-m", "64", "-p", "11211", "-vv"]
| 1 | services: |
| 2 | php: |
| 3 | image: timmy/php_base:v1.0 |
| 4 | container_name: php |
| 5 | restart: always |
| 6 | tty: true |
| 7 | stdin_open: true |
| 8 | ports: |
| 9 | - "8888:80" |
| 10 | volumes: |
| 11 | - "./html:/var/www/html" # 將目前目錄下的 html 資料夾對映進去 |
| 12 | environment: |
| 13 | MEMCACHED_HOST: memcached |
| 14 | MEMCACHED_PORT: 11211 |
| 15 | depends_on: |
| 16 | - memcached |
| 17 | |
| 18 | memcached: |
| 19 | image: memcached:1.6 |
| 20 | command: ["-m", "64", "-p", "11211", "-vv"] |
| 21 | |
| 22 |