dockerはphp環境を導入してwebプロジェクトを実行する
3100 ワード
この文章を書く目的の一つは、自分でメモを取って、後で忘れないようにすることです.phpコンテナを実行してwebプロジェクトを配置する資料は本当に少なく、お互いにコピーして、実際の生産環境に運用できません.
なぜdockerを使うのか、dockerの基本的ないくつかの命令は本論文の議論の範囲を超えない.
dockerがwebプロジェクトを導入するには、php、nginx、redisなど、いくつかのサービスが必要です.この文章では、PHP、nginx、redisの使用について説明します.より多くのサービスプロセスは、この3つのサービスを開始することと同じです.phpは5.6バージョンを使用します.もちろん最新版も使えますが、流れは同じです
まず、使用したミラーをローカルに引き寄せます.
起動する前にdockerネットワークを作成し、dockerを使用して複数のコンテナを接続します.
コードはローカルで修正して、それぞれのdockerにマッピングすればいいからです.まずredisを起動します.redisはマッピングを必要としないので、起動が最も簡単です.
次にphpとnginxコンテナを起動します.ローカルで開発されているので、ホストのwebディレクトリをコンテナにマウントする必要があります.ローカルのwebディレクトリが/www/wwwroot/acであると仮定し、コンテナサービスでこのwebプロジェクトを実行します.
これで3つのコンテナが起動し,統一dockerネットワーク内でipで相互にアクセスできるようになった.
次に、nginxの構成とphp拡張のインストールに重点を置きます.公式のphpは純粋なphp環境なので、一つ一つ拡張してインストールする必要があります.
まずnginxコンテナに入ってnginxプロファイル構成を見つけます
ここでconfプロファイルに次の内容を入力します.
コンフィギュレーションファイルの編集が完了したら、コンフィギュレーションを再ロードします.
それからphp-webコンテナの中に入ってインストールして使う拡張を始めて、ここで私达はいくつかの比較的によく使う拡張をインストールして、流れは基本的にすべて同じです
mysql,bcmath,gd,mbstring,redisなどの拡張子を一気に取り付けた
phpコンテナサービスの再起動
このような完全なwebプロジェクトはdocker配備で完了し、mysqlコンテナをインストールしていない.インストール方式が同じであるため、接続時に彼らのイントラネットipを使って接続することに注意し、ホストを接続したい場合はifconfgコマンドを使ってdocker 0の先頭の行を見つけ、そのipはホストのipであり、このipを通じてホストを要求することができる.たとえば、ホスト上でmysqlを追加すると、ip:portを使用してアクセスできます.コンテナ間でもイントラネットipを使用して相互にアクセスし、各コンテナに入ってcat/etc/hostsを使用してipを取得します.
なぜ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を取得します.