(Docker) 如何在 WordPress 容器中使用独立的 Composer 容器安装依赖项?

3

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 Compose File

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

问题详情

我已经将 composer.jsoncomposer.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/,与将指定的主机目录挂载到容器有关,但我已经将必要的文件添加到了工作目录中。我只想安装依赖项。

感谢您的帮助。

1个回答

3
您只需要在运行composer容器时将当前目录挂载到/app即可。我已经提供了一个简单的示例,以说明此方法的工作原理,链接为https://gist.github.com/andyshinn/e2c428f2cd234b718239
关键部分是应用程序composervolumes和主PHP应用程序上的restart: 'yes'(应用程序可能无法运行,直到Composer运行,因此您需要它重新启动)。

非常感谢你,Andy!工作得非常好。卷挂载是如何工作的?当我运行 docker run -i -t platform_wordpress /bin/bash 命令来查看容器中的工作目录文件时,我注意到插件文件在这里不存在,但存在于我的主机(vagrant)目录中。我在 Docker 文档中找不到答案。你有关于 Docker Compose 和 Docker 基础知识的深入解释的链接吗?再次感谢。 :-D - Hunter Lester
另外,我在 Docker Compose 文档中找不到“restart”的相关内容,请问还有哪里可以了解更多?你是通过实验发现需要重新启动主应用程序的吗? - Hunter Lester
我不确定你所说的“插件文件不存在”的意思。你可能应该提出另一个问题来询问这个。restart选项在文档中有说明,网址为https://docs.docker.com/compose/compose-file/#cpu-shares-cpuset-domainname-entrypoint-hostname-ipc-mac-address-mem-limit-memswap-limit-privileged-read-only-restart-stdin-open-tty-user-working-dir。它是Docker运行命令的一部分:https://docs.docker.com/engine/reference/run/#restart-policies-restart。我认为Docker Compose选项“yes”和“no”分别对应于“always”和“never”。 - Andy Shinn
2
这似乎并没有将依赖项添加到实际容器中,因此在 CI 中执行此操作并推送应用程序容器时不会包含依赖项。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接