Docker ビルド PHP 環境チュートリアル詳細説明

Docker ビルド PHP 環境チュートリアル詳細説明

Dockerのインストール

公式インストールスクリプトを使用して最新バージョンのDockerをインストールします

curl -sSL https://get.docker.com/ | sh

インストールが完了したら、次のコマンドでDockerデーモンを起動し、システムの起動時に自動的にロードされるようにします。

sudo サービス docker 開始
sudo chkconfig docker オン
## または
sudo systemctl dockerを起動します
sudo systemctl でdockerを有効にする

ユーザー(jerry)をDockerグループに追加する

sudo usermod -aG docker jerry

コマンドノート (centos)、docker イメージ 2233466866/lnmp に基づく

画像をダウンロード

docker pull 2233466866/lnmp

ベースディレクトリを作成する

mkdir -p /app/lnmp/default /docker/lnmp/data/mysql /docker/lnmp/conf/vhost /docker/lnmp/logs /docker/lnmp/temp /docker/lnmp/backup

コンテナ構成ファイルをローカルの対応するディレクトリにダウンロードします。

docker run -itd -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged=true --name=lnmp 2233466866/lnmp
docker exec -it lnmp /bin/bash
docker cp lnmp:/etc/my.cnf /docker/lnmp/conf/my.cnf
docker cp lnmp:/usr/local/nginx/conf/nginx.conf /docker/lnmp/conf/nginx.conf
cp /docker/lnmp/conf/my.cnf /docker/lnmp/backup/my.cnf
/docker/lnmp/conf/nginx.conf を /docker/lnmp/backup/nginx.conf にコピーします。

基本設定の表示または変更(コードディレクトリ、ログ保存ディレクトリ、vhostディレクトリ設定の追加)

マイ.cnf

[mysqld]
データディレクトリ=/data/mysql
ソケット=/var/lib/mysql/mysql.sock
シンボリックリンク=0
ログエラー=/var/log/mysqld.log
pidファイル=/var/run/mysqld/mysqld.pid

nginx.conf

ユーザー www;
ワーカープロセスは自動です。
ワーカーCPUアフィニティは自動です。


ワーカーCPUアフィニティは自動です。
pid ログ/nginx.pid;

イベント {
  ワーカー接続 102400;
}

http {
  文字セット utf-8;
  server_tokens オフ;

  log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" "$http_x_forwarded_for"';

  mime.types を含めます。
  デフォルトタイプ アプリケーション/オクテットストリーム;

  クライアントの最大ボディサイズは20Mです。

  ファイル送信オン;
  キープアライブタイムアウト 20;

  gzip オン;
  gzip_vary オン;
  gzip_comp_level 1;
  gzip_types text/css application/javascript application/json image/png image/webp image/apng image/jpeg image/x-icon;

  autoindex_localtime オン

  エラーログ /logs/z_error.log;
  access_log /logs/z_$host.log メイン;

  サーバー{
    listen 80 デフォルト;
    ルート /www/default;
    500を返します。
  }
  vhost/*.conf をインクルードします。
}

テストコンテナを停止して削除する

docker stop lnmp
docker rm lnmp

コンテナを再作成する

docker run -dit \
-p 80:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-e TC="アジア/上海" \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /app/lnmp:/www \
-v /docker/lnmp/data/mysql:/data/mysql \
-v /docker/lnmp/conf/my.cnf:/etc/my.cnf \
nginx.conf を /docker/lnmp/conf/nginx.conf にコピーします。
-v /docker/lnmp/conf/vhost:/usr/local/nginx/conf/vhost \
-v /docker/lnmp/logs:/logs \
--privileged=true \
--name=lnmp \
2233466866/lnmp

mysql データベース設定 (/etc/my.cnf)

/bin/mysql_secure_installation
cat /var/log/mysqld.log|grep '一時パスワード'
パスワードを設定 = PASSWORD('123456');

php.ini 設定 (/usr/local/php7/lib/php.ini)

mysqli.default_socket = /var/lib/mysql/mysql.sock

Linux関連の設定変更

ログインできないユーザーwwwを追加する

グループ追加www
ユーザー追加 -M -g www -s /usr/sbin/nologin www

タイムゾーンを変更する (/etc/profile)

TZ='アジア/上海'; エクスポートTZ
cp /usr/share/zoneinfo/アジア/上海 /etc/localtime

マルチサイト構成

参照:

サーバー{
  聞く 80;
  server_name test.test;

  ^(.*)$ $scheme://www.test.test$1 を永久に書き換えます。
}
サーバー{
  聞く 80;
  サーバー名 www.test.test;

  ($time_iso8601 ~ "^(\d{4}-\d{2}-\d{2})") の場合 {
    $ttt $1 を設定します。
  }
  access_log /logs/$host-$ttt-access.log メイン;

  ルート /www/test;

  位置 / {
    インデックス index.php index.html index.htm;
  }

  場所 ~* \.php {
    fastcgi_params を含めます。
    fastcgi_index インデックス.php;
    127.0.0.1:9000; をデフォルトとして設定します。
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mac で docker を使って PHP 開発環境を構成する方法
  • PHP の Docker インストールと Nginx を使用したデプロイメントの例
  • DockerにPHP拡張機能をインストールする手順の説明
  • Docker を使用して OpenLDAP+phpLDAPadmin 統合ユーザー認証を構築する方法
  • docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル
  • PHP環境構築におけるDockerの柔軟な実装
  • LNMP と phpMyAdmin を Docker にデプロイする方法
  • PHP は docker を使用してワーカーマンを実行するケースの説明

<<:  MySQLのインストール時に発生する可能性のある問題

>>:  JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

推薦する

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

CentOS 環境で NFS リモート ディレクトリ マウントを使用する手順の紹介

目次1. NFS の概要2. NFS構築1. NFSサーバーの構築2. NFSクライアントの構築3....

Elasticsearch を使用する際の一般的な問題の解決策

1. redis で使用すると Netty の起動競合が発生するため、***Application ...

JS が WeChat の「クソ爆弾」機能を実装

みなさんこんにちは、Qiufengです。最近、WeChatは新しい機能をリリースしました(WeCha...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

仮想マシンのディスクサイズを拡張する方法

Vmvare が仮想マシンのディスク サイズを設定した後、ディスク領域が不足していることがわかりまし...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

Ubuntu での MySQL および MySQL Workbench のインストール チュートリアル

Ubuntu に jdk をインストールする: [リンク] UbuntuにEclipseをインストー...

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...

JavaScript で Priority Queue を実装する

目次1. 優先キューの紹介2. 優先キューのカプセル化1. 優先キューの紹介通常のキューに要素が挿入...

vueはEle.me UIを使用してteambitionのフィルタリング機能を模倣します

目次問題の説明一般的な機能効果は次のとおりです。思考分析完全なコード要約する問題の説明Teambit...

SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数...

CSS シャドウアニメーションの最適化のヒント

このテクニックは、この記事から来ています - シルキーでスムーズなパフォーマンスでボックスシャドウを...

Vue Notepadの例の詳細な説明

この記事の例では、メモ帳機能を実装するためのVueの具体的なコードを参考までに共有しています。具体的...

MySQL トリガーの定義と使用方法の簡単な例

この記事では、MySQL トリガーの定義と使用方法について説明します。ご参考までに、詳細は以下の通り...