构建Apache2+PHP容器的例子

构建容器用于AWS ECS服务和AWS EKS服务的时候,由于容器服务的启动endpoint只能是唯一的启动进程,而且必须处于前台,因此会面临无法同时启动php-fpm和httpd的问题。此外,在构建容器中,还经常遇到体积过大,影响服务发布速度等问题。

如下配置文件可参考构建容器镜像用于AWS ECS服务和AWS EKS服务。中国区和海外区测试通过。

以下为Dockerfile主文件内容:

FROM public.ecr.aws/amazonlinux/amazonlinux:2

# Install apache/php
RUN yum install -y which curl httpd mysql htop net-tools gd procps-ng iputils bind-utils vim nc awscli \
	&& amazon-linux-extras install -y php7.4 \
	&& yum install -y php-gd php-pecl-imagick php-mbstring php-xml php-xmlrpc \
	&& yum clean all

# Install configuration file
ADD src/httpd.conf /etc/httpd/conf/
ADD src/run_apache.sh /root/

# Configure apache
RUN chown -R apache:apache /var/www && chmod +x /root/run_apache.sh
ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

# starting script for php-fpm and httpd
CMD ["/bin/bash", "-c", "/root/run_apache.sh"]

以上配置中,将安装软件的所有命令写在同一行,可实现一个文件层,由此可显著减少容器的体积。

启动脚本src目录下的run_apache.sh内容如下:

mkdir -p /var/run/apache2
mkdir -p /var/lock/apache2
/usr/sbin/php-fpm -D
/usr/sbin/httpd -D FOREGROUND

由此可按照这篇文章构建容器镜像,然后上传到AWS ECR,即可用于ECS和EKS容器服务。