沿着之前的思路,从nightly-php8.2-fpm-alpine构建了一个一个镜像asnil/typecho

可以看到镜像大小相比于apache的版本还是小很多

alarm ~/typecho# docker images asnil/typecho
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
asnil/typecho   latest    91392c3c14e7   20 minutes ago   89.8MB
alarm ~/typecho# docker images joyqi/typecho
REPOSITORY      TAG                         IMAGE ID       CREATED        SIZE
joyqi/typecho   nightly-php8.2-apache       90d7e036c8bc   19 hours ago   521MB
joyqi/typecho   nightly-php8.2-alpine       9ef651c57fcb   45 hours ago   103MB
joyqi/typecho   nightly-php8.2-fpm-alpine   3746b6212c1f   4 days ago     87.7MB

简单的测试了一下,可以正常运行。

alarm ~/typecho# dp stats --no-stream
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
2c7dc1b9944d   typecho_blog      0.01%     22.22MiB / 3.681GiB   0.59%     188kB / 874kB     4.51MB / 6.84MB   9

这是Dockerfile文件

FROM joyqi/typecho:nightly-php8.2-fpm-alpine

RUN apk add --no-cache tzdata nginx && \
    sed -i 's|listen = 9000|listen = /var/run/php-fpm.sock|' /usr/local/etc/php-fpm.d/zz-docker.conf && \
    echo "listen.owner = www-data" >> /usr/local/etc/php-fpm.d/zz-docker.conf && \
    echo "listen.group = www-data" >> /usr/local/etc/php-fpm.d/zz-docker.conf && \
    sed -i 's|php-fpm|php-fpm -D > /dev/null 2>\&1 \&\& nginx -g "daemon off;"|' /bin/init_typecho
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

COPY default.conf /etc/nginx/http.d/default.conf

EXPOSE 80

这是default.conf文件,通过unix:/var/run/php-fpm.sock与php-fpm交互 来源

server {
    listen 80 default_server;
    server_name _;

    root /app;
    index index.php;

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
    }

    location ~ ^/usr/.*\.db$ {
        deny all;
        return 404;
    }

    location ~ .*\.php(\/.*)*$ {
        include fastcgi.conf;
        fastcgi_hide_header X-Powered-By;
        fastcgi_pass unix:/var/run/php-fpm.sock;
    }
}

顺便解决了使用sqlite时,/usr路径下的db文件可以直接被下载的问题

image.png
image.png