构建容器用于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 update -y \
&& 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"]
以上配置中,将安装软件的所有命令写在同一行,可实现一个文件层,由此可显著减少容器的体积。此外,在安装软件时候,执行 yum update -y 可将补丁升级到最新,减少安全风险。
启动脚本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容器服务。