我已经使用PHP中的基础映像,尤其是https://hub.docker.com/_/php/中的7.3-apache-stretch
成功地在ECS上部署了Laravel Web应用程序
在充分了解有关Docker中Alpine Linux映像的讨论(允许最终映像尺寸显着减少)后,我想进行一次试验,看看其性能如何。不幸的是,尽管使用CLI版本非常容易(使用7.3-cli-alpine3.9
),但没有启用Apache的版本。我需要的是Dockerfile
作为开发基础。
仅Apache
正在浏览SO,我发现How do I run Apache 2 on Alpine in Docker?引起了我对https://github.com/nimmis/docker-alpine-apache的关注,可以启用apache,但是PHP完全缺失了,因此我必须对此进行集成。
通过FCGI运行Apache / NGINX和PHP
另一个问题Alpine variants of PHP and Apache/httpd in Docker使我们更加接近,但是暗示了使用两个容器,这不是我想要的。
Dockerfile
应该如何允许我现成部署Laravel Web应用程序?
答案 0 :(得分:4)
经过两天的尝试,我终于到达可以将Laravel应用程序部署在启用php的apache容器上的地步。由于发现的问题数不胜数,因此这里是最后的Dockerfile
,以及各节的说明:
# PHP Images can be found at https://hub.docker.com/_/php/
FROM php:7.3-alpine3.9
# The application will be copied in /home/application and the original document root will be replaced in the apache configuration
COPY . /home/application/
# Custom Document Root
ENV APACHE_DOCUMENT_ROOT /home/application/public
# Concatenated RUN commands
RUN apk add --update apache2 php7-apache2 php7-mbstring php7-session php7-json php7-pdo php7-openssl php7-tokenizer php7-pdo php7-pdo_mysql php7-xml php7-simplexml\
&& chmod -R 777 /home/application/storage \
&& chown -R www-data:www-data /home/application \
&& mkdir -p /run/apache2 \
&& sed -i '/LoadModule rewrite_module/s/^#//g' /etc/apache2/httpd.conf \
&& sed -i '/LoadModule session_module/s/^#//g' /etc/apache2/httpd.conf \
&& sed -ri -e 's!/var/www/localhost/htdocs!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/httpd.conf \
&& sed -i 's/AllowOverride\ None/AllowOverride\ All/g' /etc/apache2/httpd.conf \
&& docker-php-ext-install pdo_mysql \
&& rm -rf /tmp/* /var/cache/apk/*
# Launch the httpd in foreground
CMD rm -rf /run/apache2/* || true && /usr/sbin/httpd -DFOREGROUND
这是我在Dockerfile
/home/application
public
Laravel文件夹apk
请求安装操作系统软件包(所有这些都是我的Laravel应用程序所必需的)。可用软件包的完整列表可在http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/ storage
文件夹的权限/home/application/
文件夹的所有者httpd.conf
文件中的文档根目录AllowOverride All
指令pdo_mysql
扩展名(否则命令将无法访问mysql)httpd
使用此Dockerfile
,现在可以运行所有Laravel Web应用程序,只需在/home/application/
中复制应用程序源代码即可。