docker php環境の構築

5152 ワード

前言
本文は参考文章に基づいて、自分でPHP環境を構築してみて、中のDockerfileの編纂に対して最新の修正をして、これによって記録して、完全なコードは転送ドアの説明を見ます:
  • ミラーのダウンロードが遅すぎて、国内のミラーを使って加速することができて、具体的には自分で
  • を検索することができます
  • この方法によって4つのミラーを用いて4つのコンテナを生成し、コンテナ間の起動はdocker-compose管理によって当然1つのベースミラーを用いてもよいが、このミラーに基づいてnginx phpなどのソフトウェアをインストールし、コンテナも1つしかなく、本機のインストールのように
  • ディレクトリ構造
    app #     
        index.php
        test
            -test.php
    data #     
        mysql
        redis
    
    logs #     
        nginx
        mysql
        php-fpm
    
    docker_self # docker  
        docker-compose.yml
        mysql
            -Dockerfile
            -conf.d
                -my.conf
        nginx
            -Dockerfile
            -nginx.conf
            -conf.d
                -www.conf
        php
            -Dokcerfile
            -php-fpm.conf
            -php-fom.d
                -www.conf
            -idc.ini
        redis
            -Dockerfile

    phpのdockerfile
    FROM php:7.2-fpm
    
    #     
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    #         PHP    
    RUN apt-get update && apt-get install -y \
            git \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libpng-dev \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install -j$(nproc) gd \
        && docker-php-ext-install zip \
        && docker-php-ext-install pdo_mysql \
        && docker-php-ext-install opcache \
        && docker-php-ext-install mysqli \
        && rm -r /var/lib/apt/lists/*
    
    
    #    PECL   ,        redis psr
    #    phalcon  ,   psr
    RUN pecl install redis-5.0.2 \
        && pecl install psr \
        && docker-php-ext-enable redis psr
    
    #        ,    Phalcon   
    RUN cd /home \
        && git clone --depth=1 git://github.com/phalcon/cphalcon.git \
        && cd cphalcon/build \
        && ./install \
        && echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini \
        && rm -rf /home/*
    
    #       ,    phalcon    
    COPY idc.ini /data/app/idc/idc.ini
    
    WORKDIR /data
  • php:7.2-fpmのミラー
  • を用いた
  • phpの拡張インストールは、コア拡張とpcel拡張に分けられ、ソースコードのインストールは、公式ドキュメント
  • を参照してください.
  • phalconの拡張はgitがソースファイルをダウンロードする方式gitを利用してapi-get時に
  • をインストールした.
    その他のdockerfile
    nginx:
    FROM nginx:alpine
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    

    mysql:
    FROM mysql:5.7
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    

    redis:
    FROM redis:alpine
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    注意:
  • nginxのプロファイルのphp-fpmは、ネイティブ127.0.0.1ではなくdocker-composeである.ymlの名前php-fpm
  • docker-composeの作成
    version: '3.2'
    services:
      php-fpm:
        build: ./php
        ports:
          - "9000:9000"
        links:
          - mysql-db:mysql-db
          - redis-db:redis-db
        volumes:
          - ../app:/data/www:rw
          - ./php/php.ini:/usr/local/etc/php/php.ini:ro
          - ./php/php-fpm.conf:/usr/local/etc/php/php-fpm.conf:ro
          - ./php/php-fpm.d:/usr/local/etc/php/php-fpm.d:ro
          - ../logs/php-fpm:/var/logs/php-fpm
          - ../logs/contento:/data/logs/contento:rw
        restart: always
        command: php-fpm
    
      nginx:
        build: ./nginx
        depends_on:
          - php-fpm
        links:
          - php-fpm:php-fpm
        volumes:
          - ../app:/data/www:rw
          - ./nginx/conf.d:/etc/nginx/conf.d:ro
          - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
          - ../logs/nginx:/var/logs/nginx
        ports:
          - "80:80"
          - "8080:8080"
          - "443:443"
        restart: always
        command: nginx -g 'daemon off;'
    
      mysql-db:
          build: ./mysql
          ports:
            - "3306:3306"
          volumes:
            - ../data/mysql:/var/lib/mysql:rw
            - ../logs/mysql:/var/lib/mysql-logs:rw
            - ./mysql/conf.d:/etc/mysql/conf.d:ro
          environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: test
            MYSQL_USER: test
            MYSQL_PASSWORD: test123
          restart: always
          command: "--character-set-server=utf8"
    
      redis-db:
          build: ./redis
          ports:
            - "6379:6379"
          volumes:
            - ../data/redis:/data
          restart: always
  • phpおよびnginxなどのプロファイルを外部ファイルにマッピングする構成
  • を容易に修正する.
  • プロジェクトのログファイルおよびnginxおよびphpのログファイルを外部ディレクトリにマッピングしてコンテナの再起動を防止した後、ログがない場合
  • .
    起動と停止
  • の作成が完了するとdocker-compose upでエラーが発生し、出力に基づいて
  • をデバッグできます.
  • 起動問題がなければ、docker-compose up-dバックグラウンドを使用してdocker container lsを起動し、起動コンテナdocker image lsを表示してミラーリスト
  • を表示できます.
  • サービスを停止し、docker-compose stop
  • を使用できます.
    欠点
  • 鏡像が大きすぎるFROM php:7.2-fpm非alpineの鏡像は、デフォルトではubanutuをベースとしており、apt-get、docker-php-ext-*などのコマンドを使用することができるが、生成された鏡像が非常に大きいalpine鏡像はapk方式でパッケージ
  • をインストールするしかない.
    やるべきこと
  • alpineミラーの作成
  • laradockの使用
  • リファレンス
    参考記事公式ドキュメント
    転載先:https://www.cnblogs.com/fanfan259/p/11526432.html