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 をインストールした後、初めてログインするときにパスワードを変更する問題を解決する
この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...
一般的に言えば、コンテナが起動した後、ポート マッピングを通じてコンテナが提供するサービスを使用...
結果: 実装コードhtml <div id="価格表" class=&qu...
目次ネイティブJS GETリクエストの送信方法投稿リクエストの送信方法パラメータ付きのGETリクエス...
今日は、Jenkins + powershell スクリプトを使用して、.NET CORE スクリプ...
1. フローティングレイアウト1. 最初に固定幅の div をフロートさせます。ドキュメントフローか...
目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...
Ubuntu 18.04、その他のバージョンのUbuntu質問: sudo apt-get ins...
1. バージョン情報 # cat /etc/system-release CentOS Linux ...
tar バックアップ システム sudo tar cvpzf backup.tgz --exclud...
1. はじめに数日前、プロジェクトでトラバーサルに使用したときに落とし穴に遭遇し、解決するのに 1 ...
この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...
MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...
目次はじめるデータストレージサーバーを構成するRedis セキュリティの管理Redisインストールの...
LinuxホストにSSHサーバーをインストールするには、次のターミナルコマンドを使用します: sud...