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 堆栈的主要内容,如果未能解决你的问题,请参考以下文章