itsource

도커 컨테이너 내에 PHP Composer를 설치하는 방법

mycopycode 2022. 11. 26. 14:00
반응형

도커 컨테이너 내에 PHP Composer를 설치하는 방법

나는 도커와 라라벨을 이용하여 개발 환경을 만드는 방법을 생각해 보려고 한다.

도커 파일은 다음과 같습니다.

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql
&& chmod -R o+rw laravel-master/bootstrap laravel-master/storage

Larabel에서는 데이터베이스 이행 작업 시 작곡가가 작곡가 덤프 자동 로드를 호출해야 합니다.그래서 도커 컨테이너 안에 작곡가가 필요합니다.

나는 시도했다.

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer

하지만 내가 전화했을 때

docker-compose up
docker-compose exec app composer dump-autoload

다음의 에러가 발생합니다.

rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"composer\\\": executable file not found in $PATH\"\n"

도커 파일 내의 PATH에 작곡가를 추가하는 방법이나 이 오류를 극복하기 위해 할 수 있는 다른 방법을 알려주시면 감사하겠습니다.

당신의 후원에 대해 감사해요.또한 docker-compose.yml 파일 또는 기타 필요한 경우 gitub 저장소입니다.

도커 파일:

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

테스트 도커 파일에 다음 행을 추가하여 작곡가를 설치할 수 있습니다.

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

도커 파일은 다음과 같습니다.

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

컴포저가 인스톨 되어 있는지를 테스트하려면 , 컨테이너 bash 에 액세스 해 다음의 조작을 실행합니다.

composer --version
Composer version 1.6.5 2018-05-04 11:44:59

2021년에 Larabel 8.4를 사용하여 Google Cloud의 CloudRun에 배포하는 방법은 다음과 같습니다.

도커 파일

#Get Composer
FROM composer:2.0 as vendor

WORKDIR /app

COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --no-dev \
    --prefer-dist

COPY . .
RUN composer dump-autoload

// 다음과 같은 커스텀 스텝이 몇 개 더 있습니다.

FROM node:14.9 as frontend
...
FROM php:7.4-fpm
...

// Composer 의존관계 복사

# Copy Composer dependencies
COPY --from=vendor app/vendor/ ./vendor/
COPY . .

// 기타 커스텀 스텝

...

최적화된 캐시를 클리어하여 앱을 시작하는 Dockerfile 종료

# Run Laravel commands
RUN php artisan optimize:clear

CMD php artisan serve --host=0.0.0.0 --port=8080

EXPOSE 8080

다음을 사용하여 컴포저 파일의 실행 파일을 만듭니다.

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer && chmod +x /usr/bin/composer 

기본적으로 동일한 명령어가 실행되고 있으며, 그 차이는 없습니다.

--install-dir=/usr/local/bin

또는 $PATH 변수에 Composer bin 파일 경로를 추가해야 합니다.

export PATH=$PATH":/usr/bin"

다른 방법을 제안하고 싶습니다.

도커 파일:

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN alias composer='php /usr/bin/composer'

사용하다composer도커 파일에서 사용curl

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

도커 파일

FROM 8.1.4-fpm

RUN apt-get update && apt-get install -y \
    git \
    curl \
    zip \
    unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www

내 문제는 해결되었다.그냥 멈췄어요firewalld시스템상의 서비스

언급URL : https://stackoverflow.com/questions/51443557/how-to-install-php-composer-inside-a-docker-container

반응형