【docker実操】dockerを使用してlaravelアプリケーションを配備する


最近、オンラインのプロジェクトを導入し、新しいサーバを生産環境にインストールしてnginx、php、mysql、git、composerなど、いろいろなものを配置するのは面倒です.dockerはしばらく火をつけていて、バックエンドやメンテナンスの必須スキルになっていて、前のボスもやってみると言っていたので、dockerの魅力を体験してみました.この文書はdockerを使用してプロジェクトを導入することを学び、使用した記録です.
dockerの利点
dockerの主な利点は、一度に構築し、あちこちに配置することです.dockerを使用してプロジェクトを構築すると、開発環境、テスト環境、本番環境で統一されたミラーを使用して導入でき、環境の一貫性が保証されます.さらにdockerはlinux、mac os、windowsの3つのプラットフォームをサポートし、コードはコンテナで実行され、外部オペレーティングシステムの影響を受けず、あなたのミラーと依存関係があるだけです.
さらに、mysql 5.5、mysql 5.7などの異なるバージョンのアプリケーションを導入し、互いに干渉しないことができます.
操作の考え方
dockerのインストールと関連概念についてはここでは言うまでもなく、ネット上には具体的な実施の構想を述べる資料がたくさんあります.
正しい使い方は、プロジェクトが完了してからdockerミラーの構築を開始するのではなく、プロジェクトアーキテクチャ、依存、環境が確定したらdockerミラーを構築し、構成し、コードの開発と実行はコンテナの中にあります.その後の導入では、ミラー生成コンテナを移植するだけで、環境の一貫性が保証されます.
私のこのプロジェクトは簡単で、nginx、php、mysqlの3つのセットだけで、nginxはphp-fpmをcgi解析器として使用しています.nginx、php-fpm、mysqlの3つのミラーが必要です.なぜ、この3つを大きな鏡像に統合するのではなく、3つのミラーを使用するのですか?これはdockerが推奨する方法で、ミラー間はできるだけデカップリングし、多重化しやすく、肥大化したミラーを避け、コンテナ間はネットワークを通じて接続されています.
公式には多くの良質なミラーが提供されていますが、公式ミラーに基づいて構成すればいいだけです.
ミラーの構築
完全なファイルの詳細は私のgithubを参照してください
nginxミラー
DockerFile:
FROM nginx:1.10

ADD nginx.conf /etc/nginx/nginx.conf
ADD site.conf /etc/nginx/conf.d/
ADD mkdir.sh /opt/

RUN chmod +x /opt/mkdir.sh && /opt/mkdir.sh

基本構成とサイト構成をコピーし、shellステップでlogフォルダを作成します.
php-fpmミラー
DockerFile:
FROM php:7.0-fpm

ADD apt-list /opt/

RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \ 
    && cat /opt/apt-list > /etc/apt/sources.list \ 
    && apt-get update \ 
    && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev

RUN docker-php-ext-install -j$(nproc) iconv mcrypt \
        && 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 pdo_mysql \
       && docker-php-ext-install zip
        
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
        && composer config -g repo.packagist composer https://packagist.phpcomposer.com \

phpミラーリングは最も面倒で、システム依存、php拡張、composerをインストールし、環境変数を設定します.php拡張その参照公式ミラーdockr-hub-php
aptを使用しているので、aptソースを変更します.公式phpミラーはdebianベースで、ubuntuのソースではありません.
dockerfileはrunを1階建てで、ここではapt installを1階として、php拡張を1階としてインストールすることをお勧めします.すべて1階に置くのではなく、1階に置くことをお勧めします.このような利点は、2層目のphp拡張装置が失敗した場合、apt installをもう一度走らなくてもよいことです.最後の階にcomposerを取り付けます.
phpバージョンを一致させるために、cli:docker run-it-v$PWD:/opt/code-w/opt/code my-php php-vとしてphpコンテナ内のphpを呼び出すべきです.
命令が長すぎてaliasを作ることができます.~/.bash_aliasesに行を追加(最後のスペースに注意):alias myphp='docker run-it-v$PWD:/opt/code-w/opt/code--rm my-php'
yourpath/opt/codeの下でlaravelアプリケーションを作成し、権限を変更し、ホストでwww-dataグループに追加することに注意します.
cd ~/docker-php/opt/code
myphp composer create-project --prefer-dist laravel/laravel .
sudo chown -R www-data:www-data . && sudo chmod -R 775 .

mysqlミラー
DockerFile:
FROM mysql:5.7

mysqlが一番簡単で、公式のものをそのまま使えばいいです.
docker-compose起動容器
私たちは今3つのミラーを持っています.1つずつ起動、接続、マウントするのが面倒であれば、公式にdocker-composeツールを提供し、構成を一緒に書いて、1つのキーで起動します.
docker-compose.yml:
nginx:
    build: ./nginx
    ports:
      - "80:80"
    links:
      - "php"
    volumes:
      - ~/docker-php/opt:/opt

php:
    build: ./php
    ports:
      - "9000:9000"
    links:
      - "mysql"
    volumes:
      - ~/docker-php/opt:/opt

mysql:
    build: ./mysql
    ports:
      - "3306:3306"
    volumes:
      - ~/docker-php/opt/data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456

docker-compose upコマンドを使用してコンテナグループを起動します.
yourhost:80へのアクセスを開始すると、よく知られているlaravelウェルカムページが表示されます.
mysqlコンテナに入ってデータベースを建ててテーブルを作ってデータベース接続をテストします:docker exec-it dockerphp_mysql_1 bash
yourpath/opt/code/routesの変更:
エラーメッセージをテストしました:SQLSTATE[HY 000][2002]Connection refused
Googleちょっと修正して.env、db_hostをあなたのip:DB_に変更HOST=127.0.0.1 -> DB_HOST=yourhost
アクセス/mysql、ページ出力、大功告成:
Reference:
  • docker入門から実践
  • DockerのPHPプロジェクト開発環境における応用