如何在docker-compose中使用官方的composer镜像?

6
这是我的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并与我的app容器通信?


1
“composer”镜像不应该以那种方式使用。请查看官方页面“https://hub.docker.com/_/composer/”了解如何使用它。想法是将容器内的代码映射到卷中,然后运行“install”命令。 - Mihai
啊,我明白了。所以你可以在没有本地安装composer的情况下使用它来运行命令,例如创建一个新的laravel项目等。但是你如何将其与容器应用程序映射?你能给我一个例子吗,这样我就可以批准你的答案了吗? - ltdev
1个回答

3

理想情况下,您可以在多阶段构建中使用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

注意: 由于我不是PHP开发人员,您需要审核RUN命令....;) 现在,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

1
那么,如果我设置我的Dockerfile如此,那么我也应该能够运行“docker run --rm --interactive --tty composer create-project laravel/laravel”吗? - ltdev
我会说是的。再次声明,我不熟悉PHP语言,但如果这些命令是您通常传递给“composer”的话,那么它应该能够工作。 - Mihai

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