Apache HTTP Server Docker映像-需要在Dockerfile中进行更干净的配置

时间:2018-12-03 18:51:23

标签: apache docker dockerfile

我有这个Dockerfile,它对官方Apache HTTP Server Docker映像进行了额外的配置。有没有更干净的方法可以在Dockerfile中执行此操作?我对Apache HTTP Server的配置非常陌生,几乎可以将它们拼凑起来。 (启用mod_rewrite的原因是因为我在htdocs文件夹中的.htaccess文件中使用了它)

ARG BUILD_DIR=/usr/src/app

FROM node:10.13.0-alpine as build
ARG BUILD_DIR
WORKDIR $BUILD_DIR
COPY package.json .
RUN npm install
COPY src src
COPY public public
RUN npm run build

FROM httpd:2.4.37-alpine
ARG BUILD_DIR
ENV SERVER_CONTAINER_NAME=server
COPY --from=build $BUILD_DIR/build htdocs
RUN sed -i 's,#\(LoadModule rewrite_module modules/mod_rewrite.so\),\1,g' conf/httpd.conf \
  && sed -i -e '/<Directory "\/usr\/local\/apache2\/htdocs">/,/<\/Directory>/{s/AllowOverride None/AllowOverride All/}' conf/httpd.conf \
  && sed -i 's,#\(LoadModule proxy_module modules/mod_proxy.so\),\1,g' conf/httpd.conf \
  && sed -i 's,#\(LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so\),\1,g' conf/httpd.conf \
  && echo 'ProxyRequests off' >> conf/httpd.conf \
  && echo 'ProxyPass /ws ws://${SERVER_CONTAINER_NAME}:8080/ws interpolate' >> conf/httpd.conf

1 个答案:

答案 0 :(得分:0)

将这些配置文件的修改后的版本保留在映像之外,然后在构建过程中将其复制到容器中可能会更清洁。

或者,您可以将所有shell命令放在脚本中。在构建过程中,将脚本复制到容器中。在脚本末尾添加以下内容:

  exec /usr/sbin/apache2ctl -f /etc/apache2/apache2.conf -DFOREGROUND

启动服务器。然后让docker以以下方式调用脚本

CMD [ "/MyScript.sh" ]