2016-09-23 2 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.ini и zz-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 параметры по умолчанию на изображении с теми, на этих файлов при создании образа?

EDIT: Улучшить вопрос

Чтобы оставить пример, 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

Что касается IP-адрес хоста, я думаю, я мог бы использовать ENV вар и перейти к build как argume nt, я прав? Если нет, то как вы получите IP-адрес хоста, необходимый для этой настройки?

ответ

1

Это два вопроса.

1) Просто используйте инструкцию COPY, чтобы скопировать локальный php.ini в местоположение изображения. Например:

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

2) Вы не хотите жестко кодировать любой ip-адрес в свое изображение. Это необходимо сделать, когда контейнер запущен. Стандартный способ сделать это с докером - указать переменную среды, например HOST_IP, и использовать сценарий оболочки для внесения изменений в контейнер во время запуска. Например:

Ваш 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

Ну, я не хочу «копировать» 'zz-php.ini' на'/etc/php5/apache2/php.ini' Я хочу изменить значения по умолчанию для '/ etc/php5/apache2/php.ini' с теми, которые предоставляются в 'zz-php.ini', это то, что делает' COPY'? – ReynierPM

+0

Ваш 'zz-php.ini' файл - это файл, который у вас есть локально? (скажем, на вашем ноутбуке). Копия скопирует его на изображение с вашего ноутбука. Если вы хотите переместить/переименовать файл, который уже находится на изображении, вам необходимо выполнить операцию в инструкции RUN. См. Https://docs.docker.com/engine/reference/builder/#/copy – Alkaline

+0

Я думаю, что я не буду следовать за вами или вы не понимаете меня, см. Мое редактирование на OP, пожалуйста и спасибо – ReynierPM

Смежные вопросы