2016-01-19 4 views
26

ПРИМЕЧАНИЕ. Я больше не использую эту среду, поэтому нет возможности проверить ответы и принять их. Прости.Получить композитор (менеджер зависимостей php) для запуска сборки образа docker

TL; DR Можете ли вы указать мне на пример грузчиком изображения, который использует композитор для обработки зависимостей PHP?

Все мои вопросы в этой почте относительно композитору инструмента PHP зависимостьнедокер-композитор правопреемником рис.

Я пытаюсь создать собственное изображение докеров для запуска wordpress installed as a composer dependency.

Я работаю над созданием изображения докеров с использованием изображения php-docker в качестве базы, и что мне нужно сделать, это установить композитор и запустить команду обновления композитора либо на время создания изображения, либо на время сборки изображения (не знаю если оба будут в порядке).

Я могу запустить все как можно лучше, выполнив все шаги (запустив изображение докеров, вникая в него, копируя и вставляя каждый шаг).

Но когда я делаю все эти шаги на Dockerfile, я не получаю композитор для записи файлов.

Я пытался получить минимальный неудачный пример в течение некоторого времени, но тот, который у меня есть, совсем не минимальный.

Мой тест состоит из следующих (ссылки на соответствующие операции РЕПО GitHub ниже)

Dockerfile

NFORMATION ~~~# 

# based on 
# https://hub.docker.com/r/richarvey/nginx-php-fpm/ 
# and 
# https://hub.docker.com/_/wordpress/ 

FROM php:7.0.2-apache 

MAINTAINER Miquel Adell <[email protected]> 

ENV WORDPRESS_VERSION 4.4.1 



#~~~ DEPENDENCIES ~~~# 

# Add PHP repository to apt source 
RUN apt-get update \ 
    && apt-get install -y \ 
     libpng12-dev \ 
     libjpeg-dev \ 
     curl \ 
     sed \ 
     zlib1g-dev \ 
    && docker-php-ext-install \ 
     zip \ 
     mysqli 

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 



#~~~ DIRS ~~~# 

WORKDIR /var/www/html/ 



#~~~ WORDPRESS ~~~# 

COPY files/composer.json composer.json 
ONBUILD RUN composer update 

докер-compose.yml

wordpress: 
    image: miqueladell/composed_wordpress_test 
    links: 
    - wordpress_db:mysql 
    environment: 
    - VIRTUAL_HOST=miqueladell.dev 
    - WORDPRESS_DB_NAME=wordpress 
    ports: 
    - "80" 

wordpress_db: 
    image: miqueladell/mariadb-utf8mb4 
    environment: 
    - MYSQL_ROOT_PASSWORD=password 

Мои следующим образом:

  1. Построить изображение выполнения этой команды в каталоге, содержащем Dockerfile вставили выше

    docker build -t miqueladell/composed_wordpress_test . 
    

    (нет ошибок в журнале)

  2. Используйте этот образ для создания контейнера, выполнив следующую команду в каталоге, содержащем компоновку докеров.YML вставили выше

    docker-compose up 
    

    (нет ошибок в журнале)

  3. Баша в бегущем контейнер, чтобы иметь возможность увидеть, если файлы есть

    docker exec -i -t miqueladellv2_wordpress_1 bash 
    
  4. Ls из/вара/WWW/HTML

    [email protected]:/var/www/html# ls -al 
    total 12 
    drwxr-xr-x 2 www-data www-data 4096 Jan 19 10:50 . 
    drwxr-xr-x 5 root  root  4096 Jan 19 10:50 .. 
    -rw-r--r-- 1 root  root  138 Jan 15 09:18 composer.json 
    

На шаге 4 вы можете видеть, что обновление композитора, похоже, не работает вообще.

Я попытался использовать оба

RUN composer update 

и

ONBUILD RUN composer update 

на Dockerfile с теми же результатами.

Если я вернусь к предыдущему шагу 4 теста, и я вручную запустить обновления композитора на Баш строке контейнера Docker я получаю:

[email protected]:/var/www/html# composer update 
Loading composer repositories with package information 
Updating dependencies (including require-dev) 
    - Installing johnpbloch/wordpress-core-installer (0.2.1) 
    Downloading: 100% 

    - Installing johnpbloch/wordpress (4.4.1) 
    Downloading: 100% 

Writing lock file 
Generating autoload files 
[email protected]:/var/www/html# ls -al 
total 24 
drwxr-xr-x 4 www-data www-data 4096 Jan 19 11:12 . 
drwxr-xr-x 6 root  root  4096 Jan 19 11:12 .. 
-rw-r--r-- 1 root  root  138 Jan 15 09:18 composer.json 
-rw-r--r-- 1 root  root  3718 Jan 19 11:12 composer.lock 
drwxr-xr-x 4 root  root  4096 Jan 19 11:12 vendor 
drwxr-xr-x 5 root  root  4096 Jan 19 11:12 wordpress 
[email protected]:/var/www/html# 

которым именно выход я ожидал на этапе 4

Я хотел бы получить совет. Благодарю.

GitHub ссылки на полные файлы

+0

Удаление ONBUILD из строки ONBUILD. пример ... так что мой предыдущий вопрос неправильный, но проблема решена. –

ответ

15

Я столкнулся с этой проблемой сегодня.

Что для меня решило использовать другую директорию, чем та, которая была определена на изображении.

Похоже, что изменения, внесенные в каталог во время процесса сборки, отбрасываются, если каталог определяется как тома.

Вот пример моего рабочего Dockerfile

FROM richarvey/nginx-php-fpm 

# Install dependencies 
RUN apt-get update && \ 
    apt-get install curl nano && \ 
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 

# Add update nginx config 
COPY conf/nginx-site.conf /etc/nginx/sites-available/default.conf 

# Bundle app source 
COPY app/ /app 

# Install app dependencies 
RUN cd /app && \ 
    composer install --no-interaction 

EXPOSE 80 

, а затем в conf/nginx-site.conf я обновил корень для моего приложения (укороченный для краткости)

server { 
    # ... the rest of your nginx config 

    root /app/public; 

    # ... the rest of your nginx config 
} 
+1

не забудьте использовать флаг Y: «apt-get install -Y ...» – EnchanterIO

7

Установка композитор, как это позволит избежать этой проблемы:

RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \ 
&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \ 
# Make sure we're installing what we think we're installing! 
&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \ 
&& php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \ 
&& rm -f /tmp/composer-setup.* 
+0

Проверка хеша - это действительно приятный штрих здесь – erkmene

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