获取composer php(PHP的依赖pipe理器)运行在docker上的图像构build

注:我不再使用这个环境,所以我无法testing答案并接受答案。 对不起。

TL; DR你能指点我一个使用composer php处理PHP依赖关系的docker镜像的例子吗?

我在这篇文章中的所有问题都是关于composer php的PHP依赖工具 而不是 dockercomposer php的后继者。

我试图build立我自己的docker图像来运行wordpress作为一个composer php依赖项安装 。

我正在使用docker php image作为基础来构build一个docker镜像,我需要做的是安装composer并运行一个composer update命令,不pipe是在图像创build时间还是图像构build时间(不知道是否两者都是好)。

我可以通过手动执行所有步骤(运行Docker镜像,抨击它,复制和粘贴每一步)来运行一切。

但是当我将所有这些步骤放在一个Dockerfile上时,我不会让作曲者编写这些文件。

一段时间以来,我一直试图获得一个最小的失败的例子,但是我得到的那个并不是最小的。

我的testing是由以下内容组成(下面的链接到相关的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 <miquel@miqueladell.com> 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 

我的testing如下

  1. 在包含上面粘贴的Dockerfile的目录中生成执行此命令的映像

     docker build -t miqueladell/composed_wordpress_test . 

    (在日志中没有错误)

  2. 通过在包含上面粘贴的docker-compose.yml的目录中运行以下命令来使用该映像构build容器

     docker-compose up 

    (在日志中没有错误)

  3. 打开正在运行的容器,以便能够查看文件是否存在

     docker exec -i -t miqueladellv2_wordpress_1 bash 
  4. ls / var / www / html

     root@bff14367658b:/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看到composer php更新似乎没有运行。

我已经尝试使用两者

 RUN composer update 

 ONBUILD RUN composer update 

在Dockerfile上有相同的结果。

如果我回到testing的前面的第4步,我手动运行泊坞窗容器的bash提示符上的composer php更新我得到:

 root@bff14367658b:/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 root@bff14367658b:/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 root@bff14367658b:/var/www/html# 

这正是我在第4步期待的输出

我会喜欢一些build议。 谢谢。

github链接到完整的文件

  • Dockerfile及其依赖关系
  • docker工人composer php

我今天遇到了这个问题。

对我来说,解决的办法是使用与图像中定义的目录不同的目录。

如果将目录定义为卷,则似乎在构build过程中对目录所做的更改将被丢弃。

这里是我的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 } 

像这样安装composer php可以避免这个问题:

 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.*