(Docker)如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?
Posted
技术标签:
【中文标题】(Docker)如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?【英文标题】:(Docker) How to install dependencies, using separate Composer container, in WordPress container? 【发布时间】:2016-03-16 17:07:21 【问题描述】:Dockerfile
FROM wordpress
ENV REFRESHED_AT 2015-08-12
ADD \
composer.json /var/www/html
ADD \
composer.lock /var/www/html
# install the php extensions
RUN \
apt-get -qq update && \
apt-get -y upgrade && \
apt-get install -y vim wget && \
rm -rf /var/lib/apt/lists/*
# Symlink User's "wp-content" folder into the newly installed Wordpress
RUN \
rm -rf /usr/src/wordpress/wp-content/plugins/* && \
rm -rf /usr/src/wordpress/wp-content/themes/* && \
cp -fr /usr/src/wordpress/* /var/www/html/ && \
chown -R www-data:www-data /var/www/html/
# volume for mysql database and wordpress install
VOLUME ["/var/www/html/wp-content/plugins", "/var/www/html/wp-content/themes"]
# Define working directory.
WORKDIR /var/www/html/
EXPOSE 80 3306
CMD ["apache2-foreground"]
Docker 编写文件
wordpress:
build: .
links:
- mysql
- composer
volumes:
- wp-content/plugins/:/var/www/html/wp-content/plugins
- wp-content/themes/:/var/www/html/wp-content/themes
environment:
- WORDPRESS_DB_PASSWORD=__WORDPRESS_DB_PASSWORD__
- WORDPRESS_DB_NAME=__WORDPRESS_DB_NAME__
# - WORDPRESS_DB_USER=__WORDPRESS_DB_USER__
ports:
- "9888:80"
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=__WORDPRESS_DB_PASSWORD__
- MYSQL_DATABASE=__WORDPRESS_DB_NAME__
composer:
image: composer/composer
问题详情
我可以将ADD
composer.json
和composer.lock
文件放到工作目录中。我可以确认这两个文件在工作目录中。
我需要的是 Dockerfile(或任何地方)也自动将依赖项安装到工作目录中。
根据 Docker Hub,https://hub.docker.com/r/composer/composer/,
我应该可以docker run -v $(pwd):/app composer/composer install
来安装依赖项,但是如何在 Dockerfile 中执行此操作?
我也很困惑,因为-v
标志https://docs.docker.com/engine/userguide/dockervolumes/ 与将指定的主机目录挂载到容器中有关,但我已经将必要的文件ADD
ed 到工作目录中。我要做的就是安装依赖项。
感谢您的帮助。
【问题讨论】:
【参考方案1】:您只需在运行composer
容器时将当前目录挂载到/app
。我在https://gist.github.com/andyshinn/e2c428f2cd234b718239 整理了一个简单的例子来说明这个工作。
这里的关键部分是应用程序的composer
部分的volumes
和主要PHP 应用程序上的restart: 'yes'
(应用程序可能在 Composer 运行之前不会运行,因此您需要重新启动它) .
【讨论】:
非常感谢安迪!效果非常好。卷安装如何工作?当我docker run -i -t platform_wordpress /bin/bash
查看容器中的工作目录文件时,我注意到插件文件在这里不存在,但存在于我的主机(vagrant)目录中。我很难在 Docker 文档中找到答案。您是否有任何有关 Docker Compose 和 Docker 基础知识的深入答案的链接。再次感谢。 :-D
另外,我在哪里可以了解更多关于 restart
的信息。我无法在 Docker Compose 文档中找到它。您是否发现需要通过实验重新启动主应用?
我不确定您所说的“插件文件不存在”是什么意思。您可能应该为此提出另一个问题。 restart
选项位于docs.docker.com/compose/compose-file/… 的文档中。它是 Docker 运行命令的一部分:docs.docker.com/engine/reference/run/#restart-policies-restart。我认为 Docker Compose 选项“是”和“否”分别转换为“总是”和“从不”。
这似乎不会将依赖项添加到实际容器中,因此在 CI 中执行此操作并推送应用程序容器不会包含依赖项。以上是关于(Docker)如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?
我的 Docker Wordpress 网站在哪里存储数据?