2016-09-23 145 views
0

我在下面Dockerfile工作的默认配置:我自己替换泊坞窗图像

RUN apt-get update && \ 
    DEBIAN_FRONTEND=noninteractive \ 
    apt-get install -y \ 
     curl \ 
     apache2 \ 
     php5 \ 
     php5-cli \ 
     libapache2-mod-php5 \ 
     php5-gd \ 
     php5-json \ 
     php5-mcrypt \ 
     php5-mysql \ 
     php5-curl \ 
     php5-memcached \ 
     php5-mongo \ 
     zend-framework 

# Install Composer 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ 
    chown www-data /usr/local/bin/composer && composer --version 

# Install usefull PHP tools 
RUN composer global require sebastian/phpcpd && \ 
    composer global require phpmd/phpmd && \ 
    composer global require squizlabs/php_codesniffer 

# Install xdebug after we install composer since it cause issues 
# see https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer 
RUN apt-get install -y php5-xdebug 

正如你可能会注意到此安装PHP的5.5.x和它与我想的默认配置用我自己的价值取代。

我有以下目录结构:

docker-php55/ 
├── container-files 
│   ├── config 
│   │   └── init 
│   │    └── vhost_default 
│   └── etc 
│    └── php.d 
│     ├── zz-php-directories.ini 
│     └── zz-php.ini 
├── Dockerfile 
├── LICENSE 
├── README.md 
└── run 

的文件zz-php-directories.inizz-php.ini是我的配置,我应该在映像创建写入/etc/php5/apache2/php.ini。这些文件的内容如下:

zz-php.ini 
; Basic configuration override 
expose_php = Off 
memory_limit = 512M 
post_max_size = 128M 
upload_max_filesize = 128M 
date.timezone = UTC 
max_execution_time = 120 

; Error reporting 
display_errors = stderr 
display_startup_errors = Off 
error_reporting = E_ALL 

; A bit of performance tuning 
realpath_cache_size = 128k 

; OpCache tuning 
opcache.max_accelerated_files = 32000 
; Temporarily disable using HUGE PAGES by OpCache. 
; This should improve performance, but requires appropriate OS configuration 
; and for now it often results with some weird PHP warning: 
; PHP Warning: Zend OPcache huge_code_pages: madvise(HUGEPAGE) failed: Invalid argument (22) in Unknown on line 0 
opcache.huge_code_pages=0 

; Xdebug 
[Xdebug] 
xdebug.remote_enable = true 
xdebug.remote_host = "192.168.3.1" // this IP should be the host IP 
xdebug.remote_port = "9001" 
xdebug.idekey  = "XDEBUG_PHPSTORM" 

zz-php-directories.ini 
; Configure temp path locations 
sys_temp_dir = /data/tmp/php 
upload_tmp_dir = /data/tmp/php/uploads 
session.save_path = /data/tmp/php/sessions 

uploadprogress.file.contents_template = "/data/tmp/php/upload_contents_%s" 
uploadprogress.file.filename_template = "/data/tmp/php/upt_%s.txt" 

如何与在图像创建这些文件的那些覆盖在图像上的默认php.ini参数?

编辑:提高的问题

留下一个例子,zz-php.ini是摆在我的笔记本电脑本地文件| PC。一旦我在图像中安装了PHP,它就会提供一个默认配置文件,这意味着我应该有一个/etc/php5/apache2/php.ini下的文件。

这个默认的配置文件已经有默认值,例如像:expose_php = On(这同样是默认的,其他的当属;realpath_cache_size =),所以我想要做的是改变值从我的文件中的值的默认文件换句话说:

default (as in /etc/php5/apache2/php.ini) expose_php = On 
override (as in zz-php.ini) expose_php = Off 

最后我应该zz-php.ini/etc/php5/apache2/php.ini

overwrited为主机IP地址,我想我可以用一个ENV var和传递给build作为一个有值论据, 我是对的?如果不是,那么如何获得该设置所需的主机IP地址?

回答

1

这是两个问题。

1)只需使用COPY指令将您的本地php.ini复制到映像位置。例如:

COPY php.ini /etc/php5/apache2/php.ini 

2)您不想将任何ip硬编码到您的图像中。这需要在容器启动时完成。使用docker执行此操作的标准方法是指定一个环境变量,如HOST_IP,并在开始时使用shell脚本对容器进行修改。例如:

inject.sh脚本:

#!/usr/bin/bash 
sed -i -E "s/xdebug.remote_host.*/xdebug.remote_host=$HOST_IP/" /etc/php5/apache2/php.ini 

您需要的inject.sh文件添加到您的形象,当你建立它。

COPY inject.sh /usr/local/bin/ 

然后你就可以初始化和启动你的容器如下:

docker run -e HOST_IP=53.62.10.12 mycontainer bash -c "inject.sh && exec myphpapp" 

exec是需要确保myphpapp成为容器的主要过程(即:它具有PID 1),否则它不会收到kill命令(如Ctrl-C)。

+0

好了,我不想'copy'上''的ZZ-php.ini'的/ etc/PHP5 /的Apache2/php.ini'我想改变默认值,'的/ etc/PHP5/Apache2的/ php.ini'与'zz-php.ini'中提供的一样,那是什么'COPY'呢? – ReynierPM

+0

你的'zz-php.ini'文件是你在本地使用的文件吗? (在你的笔记本电脑上说吧)。 COPY会将其复制到笔记本电脑的图像中。如果要移动/重命名图像中已存在的文件,则需要在RUN语句中执行该操作。见https://docs.docker.com/engine/reference/builder/#/copy – Alkaline

+0

我想我不会跟着你或你不理解我,看到OP请我的编辑,并感谢您 – ReynierPM