【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"
  • 컨테이너 기동자는 매번 이미지를 신규 작성한다. (파일 변경 내용을 반영하기 위해)
  • git의 해시 값도 매번 취득

  • 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)

    좋은 웹페이지 즐겨찾기