Docker LAMP 堆栈

Posted

技术标签:

【中文标题】Docker LAMP 堆栈【英文标题】:Docker LAMP Stack 【发布时间】:2015-12-22 14:52:12 【问题描述】:

我刚刚学习 Docker,我已经设法让一些容器运行起来,但我正在尝试学习如何在单独的容器上运行所有东西。所以,我的想法是:

mysql 容器(工作) php-FPM 容器(部分工作) Apache 容器(尚未工作)

我已经在 vagrant 上设置了我的 LAMP 堆栈,并仅使用 phpmyadmin 对其进行了测试。然后我将 MySQL 拆分为一个容器,一切都运行良好。

然后我运行了 php-fpm,但我不知道如何让 Apache 使用它。我理解我的配置显然是错误的,问题是我不知道如何正确设置。

计划是,一旦它起作用,我应该能够轻松地将 Apache 转移过来,让它们一起玩得很好。

我只是使用官方的mysql:latest,所以很简单。

我正在使用来自官方 php 的 Dockerfile。

FROM php:5.6-fpm
# Install modules
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd 
CMD ["php-fpm"]

运行命令

docker run -d --name php56 -v /var/log/php:/var/docker/php5-fpm -p 127.0.0.1:9000:9000 php56

/etc/apache2/sites-enabled/010-phpmyadmin.conf

<VirtualHost *:80>
    ServerName phpmyadmin.docker
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/phpmyadmin
    ErrorLog $APACHE_LOG_DIR/phpmyadmin_error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

/etc/apache2/conf-enabled/php5-fpm.conf

<IfModule mod_fastcgi.c>
   AddHandler php5.fcgi .php
   Action php5.fcgi /php5.fcgi
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -host 127.0.0.1:9000 -pass-header Authorization -idle-timeout 3600
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory>
</IfModule>

显然“FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi”是错误的,因为我在一个容器上运行 php-fpm,而不是在本地 vagrant 上,但它应该是什么?

我已经阅读了许多关于拥有单独的 apache/nginx 和 fpm 或在同一个容器上拥有 fpm 和 Apache/nginx 的好处的文章。我很高兴听到更多关于这一点的信息,但我真的很想解决这个问题。我不知道我是否会在生产中使用它,但我正在努力学习 Docker。

【问题讨论】:

【参考方案1】:

如果您需要从其他容器访问文件,只需在 php 容器上公开一个卷,然后使用 --volumes-from 启动您的 Apache 容器,并将其指向您的 php 容器的名称,以便它可以找到 .cgi 文件需要。

【讨论】:

是的,我想我能做到。我试图一步一步地了解它是如何工作的,所以目前 Apache 不在容器中,它只是在 Ubuntu VM 中。所以目前只有 php 和 mysql 在容器中。【参考方案2】:

你可以查看我的apache+php5-fpm+mysql+phpmyadmin

那里:

https://bitbucket.org/haveapland/docker/src

不要在外面暴露端口,使用链接

如果您需要从容器内的 shell 运行 php 脚本,只需键入:

docker exec -it name_of_php_fpm_container bash

停止所有容器:

docker stop $(docker ps -a -q)

移除所有容器:

docker rm $(docker ps -a -q)

【讨论】:

【参考方案3】:

你可以试试这个:“PHP development environment with Docker” 祝你好运!

【讨论】:

以上是关于Docker LAMP 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker compose 的最佳部署策略(LAMP 堆栈)

无法连接到在 docker 中运行的 MySQL

docker学习---搭建Docker LAMP环境

docker安装lamp环境

docker安装lamp环境

python 我的Docker Alpine LAMP的Docker控制台