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

ltd*_*dev 5 php composer-php docker docker-compose

这是我的 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
Run Code Online (Sandbox Code Playgroud)

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

Mih*_*hai 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
Run Code Online (Sandbox Code Playgroud)

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

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

version: "3"

services:
  app:
    build: .
    image: php-app:1.0
    container_name: "php-app"
    ports: 
      - "8080:80"
Run Code Online (Sandbox Code Playgroud)

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

构建镜像并运行服务:

docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)