Docker を使用して、柔軟なオンライン PHP 環境を構築します。場合によっては、他の人がすでに統合しているパッケージやイメージが不要なこともあります。 以下の方法を使用して、必要な環境構造を1つずつ構築し、最終的にワンクリックの自動展開を実現します。 Docker スキルツリーを段階的に強化する ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""".__/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ ._____ o __/ . . __/ .___.______/ * まず、[server] プロジェクトをクローンして、サーバーのルートディレクトリに配置します (後で独自の環境構造を構築することもできます) (初級)Dockerを使って1つずつビルドする 1.画像をダウンロードする docker pull php:7.2-fpm コロンの後にバージョンを選択します docker プル nginx docker pull mysql:5.7はローカルデータベースを必要としないので無視できます。 docker pull redis:3.2 はローカル redis を必要としないので無視できます。 docker イメージ ダウンロードしたすべてのイメージを表示 2. イメージをダウンロードした後、コンテナを実行します。[以下は --link メソッドを使用してコンテナを作成します。作成順序に注意してください] 注記: <mysqlコンテナを実行> docker run --name mydb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 注: -MYSQL_ROOT_PASSWORD=123456 は、mysql の初期パスワードを設定します。 ローカルデータベースを構築する必要がない場合は、次の手順に進みます。 <Redisコンテナを実行> docker run --name myredis -p 6379:6379 -d redis:3.2 注: ローカルRedisを構築する必要がない場合は、次の手順に進みます。 <phpコンテナを実行> docker run -d -p 9000:9000 --name myphp -v /server/www:/var/www/html -v /server/php:/usr/local/etc/php --link mydb:mydb --link myredis:myredis --privileged=true php:7.2-fpm 注: ローカルデータベースまたはRedisを構築する必要がない場合は、--link mydb:mydb --link myredis:myredisを省略できます。 -v で空のフォルダをマウントするとコンテナの内容が上書きされるので、事前に設定ファイルを準備しておく必要があることに注意してください。 <nginxコンテナを実行> docker run --name mynginx -d -p 80:80 -v /server/www:/usr/share/nginx/html -v /server/nginx:/etc/nginx -v /server/logs/nginx.logs:/var/log/nginx --link myphp:myphp --privileged=true nginx 注記: -v 文の後のコロンはコンテナ内のパスです。 nginx の Web プロジェクト ディレクトリ、設定ディレクトリ、ログ ディレクトリを、事前に用意した /server ディレクトリにマウントしました。 ディレクトリをマウントした後、コンテナに入って設定を変更することなく、対応するマウントされたディレクトリでnginx構成を直接変更できます。 /server/nginx/conf.d/Default.conf へ サーバー{ 聴く80: サーバー名 ローカルホスト: 位置 / { root /usr/share/nginx/html/blog/public: ##/user/share/nginx/html は作業ディレクトリです。index index.html index.php index.htm } エラーページ 500 502 503 504 /50x.html ロケール = /50x.html { ルート /usr/share/nginx/html } 場所 ~\.php$ { fastcgi_pass myphp 9000: ## コンテナ間のリンクを確立するには、相手の IP アドレスを指定する必要があります。sudo docker inspect myphp コマンドを使用して、下部の IPAddress パラメータがコンテナの IP アドレスであることを確認します。 ##コンテナ作成時に --link でコンテナを作成しました。IP の代わりに Link コンテナの仮名を使用してアクセスできるため、IP への依存がなくなります fastcgi_index index.php fastcgi-param SCRIPI_FILENAME /var/www/html/blog/public$fastcgi_script_name: ## myphp と mynginx の作業ディレクトリは異なります。Mynginx は /usr/share/nginx/html です。 ## php は /var/www/html なので、コンテナを作成するときに、両方のディレクトリをホストの /server/www 上の同じディレクトリにマウントしましたが、ホストのパブリック マウント ディレクトリはここでは使用できず、fastcgi_params が含まれます。 } } 3. PHP拡張ライブラリのインストール docker exec -ti myphp /bin/bash まずコンテナに入ります docker-php-ext-install pdo pdo_mysql pdo_mysql拡張機能をインストールする docker-php-ext-redis をインストール 注意: 現時点では、PHPソースコードファイルにいくつかの拡張機能が含まれていないため、redis.soにエラーメッセージが表示されます。 方法1: tar zxvf /server/php_lib/redis-4.1.0.tgz ダウンロードしたredis拡張パッケージを解凍します。 docker cp /server/php_lib/redis-4.1.0 myphp:/usr/src/php/ext/redis 拡張機能をコンテナに入れてインストールします 注記: 拡張パッケージをコンテナの ext ディレクトリに直接配置すると、エラー メッセージ「エラー: そのようなコンテナはありません: パス: myphp:/usr/src/php/ext」が表示される場合があります。 方法2: 注記: 公式の推奨事項は、PECL (PEAR を通じてパッケージ化された PHP の拡張ライブラリ リポジトリ) を使用することです。 pecl installを使用して拡張機能をインストールし、公式のdocker-php-ext-enableを使用します。 pecl で redis をインストール && docker-php-ext-enable redis
* その他のコマンド docker stop $(docker ps -q) はすべてのコンテナを停止します docker rm $(docker ps -aq) すべてのコンテナを削除します docker rmi $(docker images -q) すべてのイメージを削除する docker examine myphp でコンテナの設定情報を表示する * 独自のディレクトリ構造を構築する 独自のサーバーディレクトリ構造を構築することもできます。まず、空のフォルダーをマウントすると、コンテナー内のフォルダーの内容がすべてクリアされることを知っておく必要があります。そのため、最初にコピーしてからマウントする必要があります。例: 一時コンテナーを作成する sudo docker run --name mynginx -p 80:80 -it -d nginx (2次) docker-compose 自動ビルド 上記の手順を完了すると、Docker の基本的なコンテナ操作について予備的な理解が得られます。 1. docker-composeをインストールする curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version 2. ワンクリック展開環境 /server/compose/docker-compose.ymlが設定されているので、コマンドを入力するだけです cd /server/compose docker-compose を起動 -d バージョン:"2" サービス: マイdb: コンテナ名:"mydb" ポート: - 「3306:3306」 ボリューム: #マウントされたディレクトリをここに記述します - /server/mysql:/var/lib/mysql - /etc/localtime:/etc/localtime:re #コンテナとホスト環境間の時間同期を設定します: # カスタム環境変数 MYSQL_ROOT_PASSWORD:123456 images:mysql: 8.0 # コンテナはイメージ myredis: を参照します。 コンテナ名:"myredis" 再起動:常に ポート: - 「6379:6379」 ボリューム: - /server/redis:/データ -/etc/localtime:etc/localtime:re イメージ: redis:3.2 マイphp: コンテナ名:"myphp" 再起動: 常に ポート: - 「9000:9000」 ボリューム: - /server/www:/var/www/html -/サーバー/php:/usr/local/etc/php -/etc/localtime:/etc/localtime:re リンク: - 「mydb」 - 「ミレディス」 イメージ:php:7.2-fpm ミンギンクス: コンテナ名: "mynginx" 再起動: 常に ポート: - 「80:80」 リンク: - 「myphp」 ボリューム: - /server/www:/usr/share/nginx/html - /server/nginx:/etc/nginx - /server/logs/nginx.logsL/var/log/nginx - /etc/localtime:/etc/localtime:re 画像: nginx:最新 コンテナを実行する上記のコマンドと比較すると、docker_yml の構成構造とセマンティクスが一目でわかります。 (レベル 3) docker-compose と dockerfile の完全なビルド ワンクリック操作を実現するために Docker-compose が使用されますが、問題は PHP 拡張ライブラリを別途インストールする必要があることです。そのため、カスタム コンテナ イメージを構築するには、ここで Dockerfile が必要になります。 真のワンクリック完了を実現 目次: サーバー -| -| compose.dockerfiles -| docker-compose.yml -| mysql -| Dockerfile ここで、mysql イメージをビルドするためのカスタム dockerfile を設定します| -| nginx -| Dockerfile ここで、nginx イメージをビルドするためのカスタム dockerfile を設定します| -| php -| Dockerfile ここで、php イメージをビルドするためのカスタム dockerfile を設定します| -| redis -| Dockerfile ここで、redisイメージを構築するための独自のDockerfileを設定します FROM php:7.2-fpm #カスタムイメージを構築し、公式イメージをインポートします MAINTAINER goozp "ユーザー名" #コンテナのタイムゾーンをホストと同じに設定する ENV TZ=Asia/Shanghai 実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtome && echo $TZ > /etc/timezone #依存パッケージとPHPコア拡張機能を更新してインストールする RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libhpeg62-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 を使用して拡張機能をインストールします。 RUN pecl install redis \ && pecl インストール xdebug \ && docker-php-ext-enable redis xdebug ワークディレクトリ /データ #権限設定 RUN usermod -u 1000 www-data PHPのDockerfileをカスタマイズして、カスタムイメージをビルドし、同時に拡張機能をインストールします。すべてのDockerfile構成を完了すると、Docker-compose.ymlファイルは公式イメージimage:php-fpm:7.2を使用する必要がなくなり、ディレクトリで構成されたDockerfileを直接参照するために直接build: ./phpを使用するようになります。 cd /server/compose.dockerfiles docker-compose を起動 -d 以上がDockerの環境設定方法の全てです * シェルを使用してホストマシン上でスクリプトを実行するようにPHPをスケジュールする必要がある場合 docker exec -it myphp /bin/bash -c '/usr/local/bin/php /var/www/html/blog/public/index.php' 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vuex はシンプルなショッピングカート機能を実装します
>>: MySQL 8.0 をインストールした後、初めてログインするときにパスワードを変更する問題を解決する
目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...
港Harborは、エンタープライズレベルのプライベートDockerイメージリポジトリを構築するための...
HTML 入力属性値属性value 属性は、入力フィールドの初期値を指定します。 <フォーム...
参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...
1. ハイパーリンクアイコンの仕様とは?<br />ハイパーリンクアイコンの仕様は、「C...
目次序文SVGを生成するSVGスプライトの紹介プロジェクトアイコンを取得するプロジェクトのセットアッ...
インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...
目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...
CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...
メモリストレージエンジンに関する知識ポイントメモリ ストレージ エンジンは日常業務ではほとんど使用さ...
まず問題の説明から始めましょう:同じページで、1 つのタブに float:left が必要で、もう ...
問題の説明プロジェクトのログインページでは、7日間パスワードを記憶する必要がある機能があります。この...
このステータス コードは、リクエストのステータスに関する情報を提供し、サイトとリクエストされたページ...
序文ドラッグ アンド ドロップ機能を追加すると、プログラムがより自然でユーザーフレンドリーになります...
Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...