一、序

dockerhub 官网提供了 php7.4 fpm 官方镜像(参见 https://hub.docker.com/_/php/tags?page=1&name=7.4-fpm-alpine),其中有 alpine 版本只要几十兆,但这样的镜像基础工具很少,项目内需安装一些额外扩展还是很费劲,本着简单实用原则,自己编写了下述 Dockerfile 便于快速创建出基于 centos 系统的 php docker 环境并支持 ssh 登录

二、start.sh

#!/bin/bash

# 启动 php-fpm
php-fpm

# 启动SSH服务
/usr/sbin/sshd -D

三、Dockerfile

# 使用 CentOS 7 作为基础镜像
FROM centos:7

# 复制文件进容器
COPY start.sh /start.sh

# 更换 CentOS 镜像源为腾讯云,清理缓存并重建,加快后续 yum 命令
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.cloud.tencent.com/repo/centos7_base.repo && \
    yum clean all && \
    yum makecache fast

# 安装 EPEL 源,导入 remi 源 GPG key 用于 yum 安装 remi-php74
RUN yum install -y https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm && \
    rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi && \
    yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
    # 安装 工具
    yum install -y wget yum-utils net-tools vim openssh-server passwd && \
    # 启用 remi-php74 源
    yum-config-manager --enable remi-php74 && \
    # 安装 PHP74 及相关扩展
    yum install -y php php-fpm php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-redis php-opcache && \
    # 系统时区设置
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    # 设置 root ssh 登录,安装 net-tools 和 vim
    ssh-keygen -A && \
    sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    echo "root:root" | chpasswd && \
    # 创建 php-fpm pid 文件目录,调整 php-fpm 来源客户端限制
    mkdir /run/php-fpm && \
    sed -i 's/^listen.allowed_clients/;listen.allowed_clients/g' /etc/php-fpm.d/www.conf && \
    sed -i 's/^listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g' /etc/php-fpm.d/www.conf && \
    # vi 中文乱码
    echo "alias vi='vim'" >>/root/.bashrc && \
    echo "set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1" >>/root/.vimrc && \
    echo "set enc=utf8" >>/root/.vimrc && \
    echo "set fencs=utf8,gbk,gb2312,gb18030" >>/root/.vimrc && \
    # 启动脚本权限调整
    chmod 755 /start.sh
        
EXPOSE 9000 22

# 启动
CMD ["/start.sh"]

# 手动打镜像
# docker build -t centos_php74:test1 Dockerfile .

# 手动启动挂到后台
# docker run -d -p 2222:22 xxx

# 手动启动一次性容器进行测试
# docker run --rm -p 2222:22 -it xxx /bin/bash

# 服务端容器重建的后,会导致客户端 ssh 登录失败,可在客户端使用下述清除本地 known_hosts
# ssh-keygen -R CONTAINER_IP

以上,若有疑问可邮件沟通~