您不想将多个图像旋转到一个容器中。有可能你甚至不需要docker文件(但是对于PHP,你可能会这样做)。
关于码头工人通常的口头禅是“每个容器中的一个过程”,并与它一起工作了几个月之后,我觉得这是很好的建议,即使它并不总是可以实现的。对于PHP应用程序,无论是交响乐,蛋糕,Laravel,Wordpress等等,这都是我的方式。我使用apache,听起来你可能更熟悉apache。如果需要,你可以很容易地用官方的nginx容器替换我的例子。
- 一个容器中运行PHP-FPM
- 一个容器中运行的Apache(httpd的)
- 如果你需要一个数据库,为MySQL
- 可选的,作曲家的容器一个容器。
- 搬运工-组成编排所有这些容器
我通常使用official httpd container,the official mysql container,我程度offical php fpm container如所描述的,包括我需要的器官功能障碍综合征。下面是在可能需要为自己的应用一些外部库增加了一个PHP-FPM dockerfile的例子:
FROM php:5.5-fpm
RUN apt-get update && apt-get install -y \
php5-mysql \
php5-curl \
php5-common \
php5-gd \
php5-imagick \
php5-intl \
php5-dev \
php5-sqlite \
php5-xdebug \
php5-memcached \
\
libmemcached-dev \
libmcrypt-dev \
libfreetype6-dev \
libxml2-dev \
libmagickwand-dev \
libjpeg62-turbo-dev \
libpng-dev && \
\
docker-php-ext-install pdo pdo_mysql && \
docker-php-ext-install soap && \
docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install gd && \
docker-php-ext-install iconv mcrypt && \
\
pecl install imagick && \
docker-php-ext-enable imagick && \
pecl install memcached && \
docker-php-ext-enable memcached && \
\
pecl install xdebug && \
docker-php-ext-enable xdebug && \
\
mkdir -p /app/content && \
mkdir -p /app/usr/local/apache2 && \
cd /app/usr/local/apache2 && \
ln -s ../../../content htdocs
COPY copy/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
这将构建我实际用于开发的图像。除了安装的依赖性,它副本XDebug的一个配置,并设置文件夹结构,以保持我的应用程序。
您将建立此容器是这样的:
docker build -f nameoffile.Dockerfile -t myhubaccount/myphpcontainer \ ./path/to/folder/where/dockerfile/is
这将构建标记为myhubaccount/myphpcontainer
你的机器上的图像,你可以参考它在你撰写的文件。
基本撰写文件,告诉这些容器如何互相交谈可能是这个样子:
泊坞窗,compose.yml
version: '2'
services:
httpd:
image: httpd:latest
volumes:
- ./docker_conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./webroot:/usr/local/apache2/htdocs
ports:
- "80:80"
links:
- fpm
logging:
options:
max-size: "0"
database:
image: mysql
ports:
- "3306:3306"
volumes:
- ./schema.sql:/docker-entrypoint-initdb.d/schema.sql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_DATABASE: development
logging:
options:
max-size: "5k"
fpm:
image: myhubaccount/myphpcontainer
volumes:
- ./webroot:/app/content
links:
- database
logging:
options:
max-size: "50k"
我认为这是有益的突出几个部分这个文件的。首先,对于php-fpm,你需要设置apache来与fpm服务器通信。 httpd下的links
对象告诉容器有一个域名为“fpm”的另一个容器,并且docker知道如何解析该名称,所以任何与fpm服务器的通信都可以使用该名称。我们必须在httpd容器中装入(在卷下)apache配置。它看起来像默认的配置,但这个部分加入到容纳PHP-FPM:
ProxyTimeout 30
<FilesMatch ".*\.php$">
SetHandler "proxy:fcgi://fpm:9000"
</FilesMatch>
这告诉Apache对于PHP文件请求转发到服务器FPM和服务的结果。
ports
条目导致容器的端口80被转发到码头工机器的端口80。这是linux上的本地主机,或者Mac和Windows上的docker-machine ip。你可以用控制台命令docker-machine ip
找到这个IP地址。
我们在mysql容器上做同样的事情,以便我们直接使用Mysql Workbench这样的工具访问mysql。你可以阅读官方mysql容器允许的环境变量以及它们的功能。
对于fpm我们有links
,如果需要与数据库交谈。在这种情况下,数据库的主机名只是“数据库”。
logging
项目不是必需的,只是个人偏好让日志输出变得过度。
将所有这些设置好后,您就可以用docker-compose up
调出环境。如果您想查看容器的外观,可以在运行容器上使用docker-compose exec fpm bash
获得外壳,将“fpm”替换为您要查看的容器的名称。需要注意的是容器必须包含bash
二进制文件。所有这些在这里都有,但有些容器没有。
我希望这给出了足够的PHP特定的示例来帮助您围绕Docker类型的作品进行包装。我会建议重新阅读Docker和Docker Compose的文档。如果您有兴趣构建自己的容器,我还建议阅读Dockerfiles官方图片。 The docs有链接到Docker团队认为是示例的Dockerfiles。
你最好打赌的是通过一些教程来工作,并回到这里带着你遇到的具体问题或问题。请参阅:https://docs.docker.com/engine/getstarted/和其他地方。 – ldg