【问题标题】:How can I use the official composer image within docker-compose?如何在 docker-compose 中使用官方作曲家图像?
【发布时间】:2019-08-28 09:41:55
【问题描述】:

这是我的 docker-compose 文件

version: '3'

services:
    app:
        image: php7.1-apache-stretch
        container_name: php-app
        volumes:
            - .:/var/www/html
        ports:
            - 8080:80
    composer:
        image: composer:1.8
        container_name: composer-app
        volumes:
            - .:/var/www/html

但是,当我运行 docker-compose up 时,唯一运行的容器是 php-app。如何在 docker-compose 文件中运行 composer 并与我的应用容器通信?

【问题讨论】:

  • “作曲家”图像不应该以这种方式使用。使用方法请看官网“hub.docker.com/_/composer”。这个想法是用你的代码在容器内映射一个卷,然后运行“安装”命令。
  • 啊,我明白了.. 如果您没有在本地安装作曲家,例如创建一个新的 laravel 项目等,您可以在运行命令等情况下使用它。但是如何将它与容器映射应用程序?你能给我一个例子,所以我可以批准你的答案吗?

标签: php docker docker-compose composer-php


【解决方案1】:

理想情况下,您在多阶段构建中使用 Composer 映像,以避免在主机上安装它及其所有依赖项。

为此,请创建一个像这样的 Dockerfile:

FROM composer:1.8 AS composer

FROM php:7.1-apache-stretch

COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /app

COPY . .

# Place here your command that uses Composer
RUN composer install

注意:您需要查看 RUN 命令,因为我不是 PHP 开发人员.... ;)

现在 docker-compose.yml 看起来像这样:

version: "3"

services:
  app:
    build: .
    image: php-app:1.0
    container_name: "php-app"
    ports: 
      - "8080:80"

您不再需要该卷,因为文件是在构建时复制到映像中的。

构建镜像并运行服务:

docker-compose up --build -d

【讨论】:

  • 所以,如果我这样设置我的 dockerfile 那么我应该也可以运行docker run --rm --interactive --tty composer create-project laravel/laravel ?
  • 我会说是的。同样,我不熟悉 php,但如果这些是您通常传递给“composer”的命令,那么它将起作用。
猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多