让作曲家(php 依赖管理器)在 docker 镜像构建上运行
TL;DR您能否指出一个使用 composer 处理 PHP 依赖项的 docker 映像示例?
TL;DR Can you point me to an example of a docker image that uses composer to handle PHP dependencies?
我在这篇文章中的所有问题都是关于 composer php 依赖工具 不是 docker-composer fig 的继任者em>.
All my questions in this post are regarding composer the php dependency tool not docker-composer the successor of fig.
我正在尝试构建自己的 docker 映像以运行 WordPress 作为作曲家依赖项安装.
I'm trying to build my own docker image to run WordPress installed as a composer dependency.
我正在使用 docker PHP 映像作为基础构建 docker 映像,我需要做的是安装 composer 并在映像创建时间或映像构建时间运行 composer update 命令(不知道是否两者都可以).
I'm working on building a docker image using docker PHP image as a base and what I need to do is install composer and run a composer update command either on image creation time or on image build time (don't know if both would be ok).
我可以通过手动执行所有步骤(运行 docker 映像,对其进行攻击,然后复制和粘贴每个步骤)来正常运行所有内容.
I can run everything just fine by manually executing all the steps (running a docker image, bashing into it, and copying and pasting every step).
但是当我将所有这些步骤放在 Dockerfile 上时,我没有让 composer 来编写文件.
But when I put all that steps on a Dockerfile I don't get composer to write the files.
一段时间以来,我一直在尝试获得一个最低限度的失败示例,但我得到的并不是最低限度.
I've been trying to get a minimum failing example for some time but the one I've got is quite not minimum.
我的测试由以下部分组成(下面是相关 github repos 的链接)
My test is composed of the following (links to the relevant github repos below)
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 的目录中构建执行此命令的映像
Build an image executing this command in a directory containing the Dockerfile pasted above
docker build -t miqueladell/composed_wordpress_test .
(日志中没有错误)
通过在包含上面粘贴的 docker-compose.yml 的目录中运行以下命令,使用该映像构建容器
Use that image to build a container by running the following command in a directory containing the docker-compose.yml pasted above
docker-compose up
(日志中没有错误)
bash 进入正在运行的容器以查看文件是否存在
bash into the running container to be able to see if the files are there
docker exec -i -t miqueladellv2_wordpress_1 bash
/var/www/html 的 ls
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 步中看到 composer update 似乎根本没有运行.
You can see in step 4 that composer update seems to not have run at all.
我都试过了
RUN composer update
和
ONBUILD RUN composer update
在 Dockerfile 上结果相同.
on Dockerfile with the same results.
如果我回到测试的上一步 4 并在 docker 容器的 bash 提示符下手动运行 composer update,我会得到:
If I go back to the previous step 4 of the test and I manually run composer update on the bash prompt of the docker container I get:
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 步所期望的输出
which is exactly the output I was expecting on step 4
github 链接到完整文件
- Dockerfile 及其依赖项
- docker-composer
推荐答案
这样安装composer可以避免这个问题:
Installing composer like this will avoid this problem:
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.*
相关文章