簡體   English   中英

應從哪個 Dockerfile 調用 composer install

[英]From which Dockerfile should composer install be called from

我需要調用composer install並不確定從哪個 Dockerfile 調用它 - Dockerfile-apacheDockerfile-php-fpm

我應該在Dockerfile-apache (和 PHP CLI 嗎?)中安裝 composer 並從那里運行它?

從 Dockerfile-php-fpm 運行 composer install 給我這個: Composer could not find a composer.json file in /var/www/html

Docker-php-fpm

# Do we target a specific version? ie. 7.4.25?
FROM php:7.4-fpm

# Need to add zip and other extensions
RUN buildDeps=" \
        libonig-dev \
        libzip-dev \
        libxml2-dev \ 
    " \ 
&& apt-get -y update \
&& apt-get install -y $buildDeps zip libicu-dev \ 
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl mbstring json mysqli opcache pdo pdo_mysql xml \ 
&& apt-get purge -y --auto-remove $buildDeps \
&& rm -r /var/lib/apt/lists/*

# Copying of base conf files
COPY docker/php-fpm/conf/php-fpm.conf /usr/local/etc
COPY docker/php-fpm/conf/php.ini-development /usr/local/etc/php/php.ini
COPY docker/php-fpm/conf/www.conf /usr/local/etc/php-fpm.d

# Install Composer.
RUN curl -sS https://getcomposer.org/installer | php \
        && mv composer.phar /usr/local/bin/ \
        && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

EXPOSE 9000

Docker-apache

FROM httpd:2.4

# Copy config files
COPY docker/apache/conf/httpd.conf /usr/local/apache2/conf
COPY docker/apache/conf/httpd-vhosts.conf /usr/local/apache2/conf/extra

# Do something about log rotate?

# Create vhost directory
WORKDIR /var/www/html

#Set our application folder as an environment variable
ENV APP_HOME /var/www/html

#copy files
COPY bin ${APP_HOME}/bin
COPY config ${APP_HOME}/config
COPY plugins ${APP_HOME}/plugins
COPY src ${APP_HOME}/src
COPY webroot ${APP_HOME}/webroot
COPY .htaccess ${APP_HOME}
COPY index.php ${APP_HOME}
COPY composer.json ${APP_HOME}
COPY composer.lock ${APP_HOME}

編輯#1

docker-compose.yml

version: "3.2"
services:
  php-fpm:
    container_name: php-fpm
    build:
      context: .
      dockerfile: Dockerfile-php-fpm
    networks:
      - backend
    ports:
      - "9000:9000"
  apache:
    container_name: httpd
    build:
      context: .
      dockerfile: Dockerfile-apache
    depends_on:
      - php
    networks:
      - frontend
      - backend
    ports:
      - "80:80"
      - "443:443"
networks:
  frontend:
  backend:

編輯#2

這個 docker-compose 文件允許通過公共卷進行通信。 我此時只需要編譯構建並復制Apache中的文件即可。

version: "3.9"
services:
  php-fpm:
    container_name: php-fpm
    build:
      context: .
      dockerfile: Dockerfile-php-fpm
    volumes:
      - mydata:/var/www/html:rw
    networks:
      - backend
    ports:
      - "9000:9000"
  apache:
    container_name: httpd
    build:
      context: .
      dockerfile: Dockerfile-apache
    depends_on:
      - php
    volumes:
      - mydata:/var/www/html:rw
    networks:
      - frontend
      - backend
    ports:
      - "80:80"
      - "443:443"
networks:
  frontend:
  backend:
volumes:
  mydata:

我會 go 以上都沒有; 相反,在本地運行composer install並將生成的vendor目錄復制為您的應用程序的一部分

獲取依賴項基本上是構建應用程序的一部分,而不是運行應用程序的一部分,因此 Composer 甚至不應該安裝在生產主機或容器上。 如果您正在編寫一個需要使用 gcc 編譯的gcc應用程序,您可以將其作為較早的步驟運行,然后將二進制文件復制到容器中; composer install可以用同樣的方式處理。

因此,例如,您可能有一個構建腳本(手動運行,或在 Jenkins、Github Actions、Azure DevOps 等 CI 服務器中運行),它經歷了以下步驟:

  1. 從 git 存儲庫克隆 repo
  2. 查看最新標簽
  3. 運行composer install
  4. 運行腳本來縮小客戶端 JS
  5. 運行docker-composer ,復制源代碼、縮小的 JS 和vendor目錄

因此,Docker容器中的軟件只需要能夠運行該應用程序,而不需要構建它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM