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

时间:2015-12-10 21:55:34

标签: wordpress docker composer-php docker-compose

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

运行/app容器时,只需将当前目录挂载到composer即可。我已经汇总了一个简单的例子来说明这项工作在https://gist.github.com/andyshinn/e2c428f2cd234b718239

这里的关键部分是应用程序volumes部分的composer和主PHP应用程序上的restart: 'yes'(在Composer运行之前,应用程序可能无法运行,因此您会希望它重新开始。)