PHP和Redis在同一个Docker映像中

时间:2018-10-26 20:07:34

标签: docker

我正在尝试使用此Dockerfile将Redis添加到php:7.0-apache图像中:

FROM php:7.0-apache

RUN apt-get update && apt-get -y install build-essential tcl

RUN cd /tmp \
    && curl -O http://download.redis.io/redis-stable.tar.gz \
    && tar xzvf redis-stable.tar.gz \
    && cd redis-stable \
    && make \
    && make install


COPY php.ini /usr/local/etc/php/
COPY public /var/www/html/

RUN chown -R root:www-data /var/www/html
RUN chmod -R 1755 /var/www/html
RUN find /var/www/html -type d -exec chmod 1775 {} +

RUN mkdir -p /var/redis/6379
COPY 6379.conf /etc/redis/6379.conf
COPY redis_6379 /etc/init.d/redis_6379

RUN chmod 777 /etc/init.d/redis_6379

RUN update-rc.d redis_6379 defaults
RUN service apache2 restart
RUN service redis_6379 start

它可以构建并运行,但是redis从未启动?当我在容器中运行/ bin / bash并手动输入“ service redis_6379 start”时,它可以工作,因此,我假设我的.conf和init.d文件都可以。

虽然我知道使用docker-compose会容易得多,但我特别想避免由于特定原因而不得不使用它。

2 个答案:

答案 0 :(得分:1)

这里有很多错误:

  • 在dockerfile中启动进程无效。 dockerfile构建映像。该过程需要在容器构建时开始。可以使用可以通过使用ENTRYPOINT在dockerfile中定义的入口点来完成此操作。该入口点通常是在启动实际容器时执行的脚本。
  • 默认情况下,docker中没有初始化进程。发出service呼叫将失败,无需进一步工作。如果您需要启动多个进程,则可以查找受监管程序的文档。
  • 在一个容器中同时运行Redis和Web服务器不是最佳实践。对于使用Redis的php应用程序,您通常会有2个容器-一个正在运行的Redis和一个正在运行的Apache,并允许它们通过网络进行交互。

我建议您先阅读docker documentation,然后再继续。所有这些都在此进行了深入的描述。

答案 1 :(得分:1)

我同意@Richard。根据您的需要使用两个或多个容器,然后-将它们链接起来,以使一切正常!