dockerはphp環境を導入してwebプロジェクトを実行する

3100 ワード

この文章を書く目的の一つは、自分でメモを取って、後で忘れないようにすることです.phpコンテナを実行してwebプロジェクトを配置する資料は本当に少なく、お互いにコピーして、実際の生産環境に運用できません.
なぜdockerを使うのか、dockerの基本的ないくつかの命令は本論文の議論の範囲を超えない.
dockerがwebプロジェクトを導入するには、php、nginx、redisなど、いくつかのサービスが必要です.この文章では、PHP、nginx、redisの使用について説明します.より多くのサービスプロセスは、この3つのサービスを開始することと同じです.phpは5.6バージョンを使用します.もちろん最新版も使えますが、流れは同じです
まず、使用したミラーをローカルに引き寄せます.
docker pull php:5.6-fpm
docker pull nginx
docker pull redis

起動する前にdockerネットワークを作成し、dockerを使用して複数のコンテナを接続します.
docker network create -d bridge php-net

コードはローカルで修正して、それぞれのdockerにマッピングすればいいからです.まずredisを起動します.redisはマッピングを必要としないので、起動が最も簡単です.
docker run --name redis-web -d --network php-net -p 6380:6379 redis

次にphpとnginxコンテナを起動します.ローカルで開発されているので、ホストのwebディレクトリをコンテナにマウントする必要があります.ローカルのwebディレクトリが/www/wwwroot/acであると仮定し、コンテナサービスでこのwebプロジェクトを実行します.
docker run --name php-web -d --network php-net -p 9001:9000 -v /www/wwwroot/ac:/data  php:5.6-fpm
docker run --name nginx-web -d --network php-net -p 80:80 -v /www/wwwroot/ac:/data  nginx

これで3つのコンテナが起動し,統一dockerネットワーク内でipで相互にアクセスできるようになった.
次に、nginxの構成とphp拡張のインストールに重点を置きます.公式のphpは純粋なphp環境なので、一つ一つ拡張してインストールする必要があります.
まずnginxコンテナに入ってnginxプロファイル構成を見つけます
docker exec -it nginx-web bash
cd  /etc/nginx/conf.d
vim default.conf

ここでconfプロファイルに次の内容を入力します.
server{
    listen 80;
    server localhost;
    location / {
        root /data;  #       nginx    /data    
        index index.php index.html index.htm;
    }
    location ~\.php(.*)$ {
        root /data;     #       php    /data    
        fastcgi_pass 172.19.0.3:9000;   #    php     ip
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data$fastcgi_script_name;  
        fastcgi_param PATH_INFO $1;   #    pathinfo,tp      pathinfo
        include fastcgi_params;
    }
}

コンフィギュレーションファイルの編集が完了したら、コンフィギュレーションを再ロードします.
service nginx reload

それからphp-webコンテナの中に入ってインストールして使う拡張を始めて、ここで私达はいくつかの比較的によく使う拡張をインストールして、流れは基本的にすべて同じです
docker exec -it php-web bash
cd /usr/local/bin  
./docker-php-ext-install pdo_mysql  
./docker-php-ext-install mysql
docker-php-ext-install bcmath
docker-php-ext-install mbstring
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
docker-php-ext-install -j$(nproc) iconv
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
docker-php-ext-install -j$(nproc) gd
pecl install redis-4.0.1 && pecl install xdebug-2.6.0 && docker-php-ext-enable redis xdebug

mysql,bcmath,gd,mbstring,redisなどの拡張子を一気に取り付けた
phpコンテナサービスの再起動
docker restart php-web

このような完全なwebプロジェクトはdocker配備で完了し、mysqlコンテナをインストールしていない.インストール方式が同じであるため、接続時に彼らのイントラネットipを使って接続することに注意し、ホストを接続したい場合はifconfgコマンドを使ってdocker 0の先頭の行を見つけ、そのipはホストのipであり、このipを通じてホストを要求することができる.たとえば、ホスト上でmysqlを追加すると、ip:portを使用してアクセスできます.コンテナ間でもイントラネットipを使用して相互にアクセスし、各コンテナに入ってcat/etc/hostsを使用してipを取得します.