获取要在 docker 映像构建上运行的 composer(php 依赖项管理器)
TL;DR你能给我指出一个使用 composer 来处理 PHP 依赖项的 docker 映像的例子吗?
我在这篇文章中的所有问题都是关于作曲家的php依赖工具,而不是docker-composer是fig的继任者。
我正在尝试构建自己的docker映像来运行作为作曲家依赖项安装的WordPress。
我正在使用docker PHP映像作为基础构建docker映像,我需要做的是安装composer并在映像创建时或映像构建时运行composer更新命令(不知道两者是否可以)。
我可以通过手动执行所有步骤(运行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 <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
docker-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
我的测试如下
-
在包含上面粘贴的 Dockerfile 的目录中构建执行此命令的映像
docker build -t miqueladell/composed_wordpress_test .
(日志中没有错误)
-
通过在包含上面粘贴的 docker-compose.yml 的目录中运行以下命令,使用该映像构建容器
docker-compose up
(日志中没有错误)
-
bash 到正在运行的容器中,以便能够查看文件是否存在
docker exec -i -t miqueladellv2_wordpress_1 bash
-
ls of /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 中看到,作曲家更新似乎根本没有运行。
我尝试同时使用两者
RUN composer update
和
ONBUILD RUN composer update
在 Dockerfile 上具有相同的结果。
如果我回到测试的上一步4,并在docker容器的bash提示符下手动运行作曲家更新,我会得到:
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中期望的输出
github 链接到完整文件