【docker-comose】git clone한 Laravel 프로젝트(Nginx+php-fpm)가 Docker로 기동할 때까지의 흐름
14821 단어 docker-compose
docker의 Laravel 프로젝트를 로컬로 배포 할 때까지의 흐름.
1. git clone
github에서 프로젝트의 원본이되는 데이터를 가져옵니다.
$ git clone --recursive <URL>
하위 모듈이 있는 경우
--recursive
필수..env 파일
중요한 .env 파일은 하위 모듈에 저장됩니다.
서브 모듈의 리포지토리는 aws에 작성하고 있기 때문에 특정의 권한이 있는 사람 밖에 DL 할 수 없는 스펙.
2. 프로젝트의 초기 설계
.env 파일을 만듭니다.
또, webserver의 베이스 이미지가 되는 php-fpm의 이미지를 작성한다. (공식 이미지를 풀어 프로젝트 용으로 사용자 정의)
#init
alias aaa-init="cp ./aaa-deploy/.env.* ./ && \
cp ./.env.local ./.env && \
docker-compose build php-fpm
aaa-fpm-push-image"
처음에 init 하지 않으면 에러가 나와 움직이지 않는다.
2-1 .env 관련 파일 복사
cp ./aaa-deploy/.env.* ./
하위 모듈의 .env 파일을 루트 디렉토리 바로 아래에 저장합니다.
2-2 .env 파일 만들기
cp ./.env.local ./.env
2-1에서 복사한 .env.local 파일을 복제하고 파일 이름을 .env로 설정합니다.
.env.local은 기본 설정이 작성된 백업 파일입니다. 운용은 .env로 실시한다.
2-3 php-fpm 이미지 만들기
docker-compose build php-fpm
2-3-1 docker-compose.yml
docker-compose.yml에 기술 된 내용을 기반으로 php-fpm 이미지를 만듭니다.
docker-composer.yml
# Php+Nginx service
php-fpm:
build:
context: ./
dockerfile:
docker/php-fpm/Dockerfile
args:
- DOCKER_PHP_VERSION=7.3
image: aaa_php-fpm
2-3-2 Dockerfile (php-fpm 용)
php-fpm의 기본 이미지를 공식 페이지에서 가져와 필요한 패키지를 넣는다.
php:7.3-fpm은 데비안을 기반으로합니다. php.ini도 포함되어 있습니다.
Dockerfile
#docker-composeから変数を受け取る
ARG DOCKER_PHP_VERSION
#指定のバージョンのphpーfpmのイメージをdocker hubからDL(ここでは7.3指定)
FROM php:${DOCKER_PHP_VERSION}-fpm
#Debianのパッケージライブラリ更新
#パッケージインストール(4つ)
RUN apt-get update && apt-get install -y build-essential git nginx libxml2-dev
#php拡張パッケージのopcacheを有効化
RUN docker-php-ext-enable opcache
#Debian用の3つのパッケージをインストール
RUN apt-get install -y zlib1g-dev libzip-dev unzip \
#php拡張パッケージのzipをインストールし有効化
&& pecl install zip \
&& docker-php-ext-enable zip
#php拡張パッケージのredisをインストールし有効化
RUN pecl install redis \
&& docker-php-ext-enable redis
#php拡張パッケージのpdo_mysqlをインストールし有効化
RUN docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mysqli
# OPcache
RUN docker-php-ext-install opcache
# php拡張パッケージのapcuをインストールし有効化
RUN pecl install apcu && docker-php-ext-enable apcu
#コマンドラインでapcを使えるようにする
RUN echo "apc.enable_cli=1" >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini
#apcの有効化(1でON。デフォルト1)
RUN echo "apc.enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini
#apcの共有メモリに1G割り当(デフォルト30MB)
RUN echo "apc.shm_size=1G" >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini
#composerのインストール(v1.10.15)
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --version=1.10.15 \
#composerの本体(phar)をcompoesrディレクトリ配下に移動
&& mv /usr/bin/composer.phar /usr/bin/composer \
#高速化(並行処理)のためhirak/prestissimoをインストール v1系のみ(2系は不要)
&& composer global require hirak/prestissimo
#Debianの不要なパッケージを削除
RUN apt-get autoremove -y \
#Debianのパッケージのキャッシュを削除
&& rm -rf /var/cache/apt/*
#dockerコンテナの開始ディレクトリを/appにする
WORKDIR /app/
작성한 이미지는, aaa_php-fpm:latest 라는 이름: 태그명으로 docker상에 보존된다.
3. 개발 프로젝트의 이미지 작성
alias aaa-dev-build="aaa-envvars docker-compose build dev
"
3-1. git 해시 얻기
git rev-parse
명령을 사용하여 현재 (HEAD) 커밋 번호를 얻고 변수 "GIT_HASH"에 할당합니다.alias aaa-envvars="GIT_HASH=\$(git rev-parse --short HEAD)"
3-2. 개발 환경의 이미지 작성
2-3의 php-fpm 이미지의 작성으로 작성한 이미지를 베이스로, 개발 환경의 이미지를 작성한다.
docker-composer.yml
development:
build:
context: ./
dockerfile: Dockerfile
image: aaa_dev:latest
container_name: aaa_dev
tty: true
ports:
- 8000:80
env_file:
- .env.local
environment:
- APP_ENV=local
- APP_DEBUG=true
- GRPC_VERBOSITY=debug
- GRPC_TRACE=http_keepalive,round_robin
volumes:
- /app/vendor/
- /app/node_modules/
- /app/public/assets/js/
- /app/public/assets/css/
- /app/storage/
- .:/app/
3-2-1. 이미지 만들기
Dockerfile
#専用のphp-fpmのイメージをベースにする
FROM aaa_php-fpm:latest
#Debian用のnode v14とnpmをインストール
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs \
#pythonをインストール
&& apt-get install -y python \
#php.iniを作成
RUN mv /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini \
#不要なiniファイルを削除(ini-*)
&& rm /usr/local/etc/php/php.ini-*
#webserver用のシェルファイルをコンテナにコピー
COPY docker/local/webserver.sh /docker/local/webserver.sh
#実行権限を付与
RUN chmod +x /docker/local/webserver.sh
#dockerコンテナのwebserver.shを実行(docker runのとき)
ENTRYPOINT ["/docker/local/webserver.sh"]
작성한 이미지는, docker-compose로 지정한 대로,
aaa_dev:latest
라는 이름으로 보존된다.· 노드 설치
htps : // 기주 b. 이 m / 그래서 r / st 리부치 온 s
htps : // b. 그래서 이렇게 r해. 이 m/세트 p_14. x
node.js14를 지정.
apt-get install update
의 경우 안정 버전이 설치됩니다. 또한 npm도 별도 설치가 필요.curl로 DL하는 경우는 npm도 번들되어 있다. (이 취득 방법을 PPA라고 한다.personal package archive)
·
curl -sL URL
-s: 오류를 표시합니다.-L: 리디렉션이 걸린 경우 리디렉션 대상에 액세스합니다.
·
ENTRYPOINT[シェルファイル]
빌드시에는 실행하지 않는다. docker run이나 up으로 컨테이너를 기동할 때 실행된다. (CMD도 동일)4. 컨테이너 시작
alias aaa-dev-up="aaa-dev-build && aaa-envvars docker-compose up dev"
4-1. 컨테이너 시작 명령
시작 명령
docker-compose up dev
dev 서비스에서 지정된 이미지에서 컨테이너를 시작합니다.
4-2. 컨테이너 만들기
방금 만든 이미지에서 컨테이너를 만듭니다.
docker-composer.yml
development:
build:
context: ./
dockerfile: Dockerfile
image: aaa_dev:latest
container_name: aaa_dev
#省略
지정된 이미지를 찾아 컨테이너를 시작합니다.
4-3. 컨테이너의 기동 그 1(기동을 위한 사전 준비)
컨테이너를 시작합니다.
컨테이너 시작시 실행되는 것은 tty, ports, env_file, environment, volumes.
컨테이너를 호스트측과 Docker로 연결(ports, volumes), Docker에 기동을 위한 환경 변수를 건네준다.
docker-composer.yml
development:
#省略
tty: true
ports:
- 8000:80
env_file:
- .env.local
environment:
- APP_ENV=local
- APP_DEBUG=true
- GRPC_VERBOSITY=debug
- GRPC_TRACE=http_keepalive,round_robin
volumes:
- /app/vendor/
- /app/node_modules/
- /app/public/assets/js/
- /app/public/assets/css/
- /app/storage/
- .:/app/
4-4. 컨테이너 기동(ENTRYPOINT로 지정한 쉘 파일의 실행)
Docker 컨테이너 내에서 처리를 실행합니다.
Dockerfile
###省略
#dockerコンテナのwebserver.shを実行(docker runのとき)
ENTRYPOINT ["/docker/local/webserver.sh"]
webserver.sh
#!/bin/bash
#ディレクトリを作成する
mkdir -p database/factories
mkdir -p storage/app/public
mkdir -p storage/framework/sessions
mkdir -p storage/framework/views
mkdir -p storage/framework/cache
mkdir -p storage/app/json
mkdir -p storage/framework/cache/data
#composer.lockに記述してあるパッケージをインストール
composer install
#composerのクラスの再生成
composer dump-autoload
#ビューのキャッシュクリア
php artisan view:clear
#コンパイルしたクラスとサービスキャッシュのクリア
php artisan clear-compiled
#設定ファイルのキャッシュをクリア
php artisan config:clear
#ルートのキャッシュをクリア
php artisan route:clear
#アプリケーションのキャッシュをクリア
php artisan cache:clear
#npmのインストール(package.json)
npm install
#ファイル更新を自動監視(バックグラウンドで実行)
npm run watch 2>&1 &
#laravel起動(どこからでも80番ポートにアクセスできる)
php artisan serve --host 0.0.0.0 --port 80
이상으로 컨테이너 기동 완료.
보충
포트 연결 흐름
localhost:8000
↓
도커 컨테이너 80
↓
nginx(Laravel)
Reference
이 문제에 관하여(【docker-comose】git clone한 Laravel 프로젝트(Nginx+php-fpm)가 Docker로 기동할 때까지의 흐름), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shizen-shin/items/4828131e9e46fcb41f73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)