Dockerでの基本的なローカルPHP開発環境の設定


このポストでは、Dockerの基本的なローカルPHP開発環境の設定方法を学びます.これを達成するためにDockerの作成とDockerfileを使用します.PHP、Apache、およびMySQLを使用します.タスクランナー、作曲家などのようなもので包括的な環境を設定する..後のチュートリアルに来る.
Learn to code with our beginner friendly tutorials
あなたがちょうど速くて汚いソースコードを望むならば、下にスキップしてください.我々は、この素晴らしいゆっくりとステップバイステップ行く取るつもりです.
事前要件:Docker&Dockerは、インストールを構成します.
最初のステップ:dockerfileで実行する単純なPHPスクリプトを取得します.
あなたが見ているならばPHP Docker docs あなたはDockerの構成ファイルについて何も見ることはありませんが、私たちは彼らが私たちに与えることでそれを行う方法を理解することができます.最初に、彼らは私たちに簡単なDockerfileセットアップを与えます.プロジェクトディレクトリのルートにあるDockerFileのために使ってみましょう.それから、内部にDockerfile このコードで
FROM php:7.4-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]
このコードは、使用するイメージを作成する設定です.このセットアップはPHP 7.4でいくつかのコマンドラインで引きます.
The COPY . /usr/src/myapp カレントディレクトリの内容をDockerコンテナ内の/usr/src/myappにコピーします.次の行WORKDIR /usr/src/myapp /usr/src/myappを「ワーキングディレクトリ」として設定します.
そして/usr/src/myappフォルダの中からコマンドを実行します$ php ./index.php インデックス.PHPはスクリプトです.つまりPHPスクリプトが必要です.をつくりましょうindex.php このようなプロジェクトディレクトリの中のファイル
<?php

echo "Hello from the docker container";
ここでは、Dockerイメージをビルドして実行する手順を続けることができます.
$ docker build -t my-php-app .
$ docker run -it --rm --name my-running-app my-php-app
最初のコマンドは、現在のディレクトリの内容を使用して、コンピュータに“my php app”という名前でイメージを構築することです.第2のコマンドは、私の作成したイメージから"my php app "を実行しています.

最初のステップを達成!しかし、単純なPHPスクリプトはあまり役に立たない.Apache Webサーバーでこれを設定しましょう.ドキュメントをさらにスクロールすると、PHP Apacheである「イメージ変種」セクションが表示されます.このイメージはApacheがPHPにバンドルされています.これにより、簡単にWebサーバー上でスクリプトを実行し、スクリプトの結果をブラウザで表示できます.再び、方向に従いましょう.DockerFileなしでApache/PHPイメージを実行するには、このコマンドを実行してください
docker run -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html php:7.2-apache # This line for *nix users
docker run -d -p 80:80 --name my-apache-php-app -v C:\Users\fastp\Desktop\Code\tutorials\php-docker:/var/www/html php:7.2-apache   # For Windows users
この行は基本的にコンテナを実行し、名前を私のApache PHPアプリ- Pはローカルマシンからポートへのポートマッピングをコンテナのポートに設定します.左側はローカルポート、右側はコンテナのポートです.URコードはその中で動くことができます.最後に、ビルドするイメージを定義します
Windowsが$ pwdコマンドを持っていないので、私は手動で私のパスを働かせなければなりません.
そうですね、我々のスクリプトがポート80で実行されるように設定してくださいhttp://localhost:80 ブラウザで実行しているスクリプトを見るべきです.

PHPとDockerの作成


さあ、Dockerの作成ファイルに移動を開始しましょう.あなたはdocker ps コンテナIDを取得して実行するには$ docker stop container_id しかし、このようにすべてのコンテナを停止します.
docker stop $(docker ps -a -q)
今すぐ作成docker-compose.yml プロジェクトのルートでファイルし、次のようにします.
version: '3.1'

services:
  php:
    image: php:7.4-apache
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/
一番上の行は、我々が使用しているDocker構成のバージョン番号を設定します.次に、設定するコンテナのリストである「サービス」を持っています.他のコンテナがこの名前で接続できるように、このコンテナに「PHP」という名前を付けます.「イメージ」はPHP : 7.4 Apacheとなります(以前のコマンドラインの実験は7.2を使用します).
それから私たちのコマンドライントライアルのように、私たちはローカルマシン上の80からコンテナの80にポートマッピングを設定しています.最後に、私たちのコンテンツを提供します.コンテナへのsrcフォルダ/var/www/html フォルダ.では、スクリプトをローカルマシン上のsrcフォルダ.私のプロジェクト構造は次のようになります.

今すぐ実行docker-compose up -d プロジェクトのルートと訪問の中からlocalhost:80 ブラウザを走らせているスクリプトを見てください.私たちはコンテナにコードを貼り付けるためにボリュームを使用しているので、スクリプトを変更することができ、自動的に更新する必要があります.試してみなさい.
さあ、コンテナを閉めましょうdocker-compose down .
次のステップはセットアップですMySQL and Adminer (a DB access tool) 幸運にも、彼らの医者は私たちにDocker構成例を与えます.PHPをMySQLに接続するには、PHP環境にいくつか欠けている部分をインストールする必要がありますが、設定を少し変更する必要があります.ここで我々のdocker-compose.yml ファイルは次のようになります.
# Use root/example user/password credentials
version: '3.1'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
MySQLを使用してPHPをデータベースに接続するには、いくつかのmysqliファイルをインストールする必要があります.つまり、PHP 7をカスタマイズするためにdockerfileを使う必要があります.4 - apacheイメージ現在、カレントディレクトリ(ドット)の内容を使用してDockerFileを使用してイメージを作成する“build”を使用しています.<堀田>
それで今、私たちはMySQLイメージである「DB」サービスを加えました.彼らはパスワード:-)と何らかのリスタートポリシーを持っている奇妙なコマンドを使います.また、ルート変数を“example”に設定する環境変数を設定します.
AdminerはAdminerイメージを取得し、8080 : 8080にポートマッピングを設定します.xamppのように、localhost/phpmyadminに行って、データベース管理ツールを取得します.これでlocalhostに行きます:8080 Adminier DBツールを取得します.
PHPコンテナ内で動作するようにmysqliを設定しましょう.DockerFile :
FROM php:7.4-apache
RUN docker-php-ext-install mysqli
私は、それが処理する多くのコードであるということを知っています...それで、それを線で行しましょう.最初の行はPHPをビルドします.番目の行は、コンテナ内のmysqli拡張モジュールをインストールするコマンドを実行します.ここから私たちは超基本的なPHP開発環境を持つ必要があるすべてを持っています.では、走りましょうdocker-compose up -d 再び.
今、我々はadminerにアクセスし、ログインすることができるはずです.私は、ちょうどものを速めるために、2、3のイメージを使います.Dockerfileに基づいて、「サーバ」の名前が「DB」であることに注意してください.私たちは“パイ”という名前を付けることができました.

データベースの作成

名前とヒットを保存します.私は私の名前

次に、“新しい項目”を選択してテーブルにいくつかの項目を追加します.

今、私たちはちょうど私たちのデータベースに接続するPHPが必要です.これはPHPのチュートリアルではないので、私はすべてを説明しませんが、それはちょうど私たちのデータベースに接続し、いくつかのクエリを実行し、画面上に印刷します.重要なのは、MySQLをPHPに接続する3行目です.
<?php

echo "Hello from the docker yooooo container";

$mysqli = new mysqli("db", "root", "example", "company1");

$sql = "INSERT INTO users (name, fav_color) VALUES('Lil Sneazy', 'Yellow')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Nick Jonas', 'Brown')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Maroon 5', 'Maroon')";
$result = $mysqli->query($sql);
$sql = "INSERT INTO users (name, fav_color) VALUES('Tommy Baker', '043A2B')";
$result = $mysqli->query($sql);


$sql = 'SELECT * FROM users';

if ($result = $mysqli->query($sql)) {
    while ($data = $result->fetch_object()) {
        $users[] = $data;
    }
}

foreach ($users as $user) {
    echo "<br>";
    echo $user->name . " " . $user->fav_color;
    echo "<br>";
}
ここではブラウザで実行したときのコードの結果です.

MySQLのボリュームを使用する


あなたはおそらく私たちはあなたのデータベース内のもののような永続的なデータのボリュームを使用する必要がありますので、1つの座って全体のアプリケーションを構築するつもりはない.ボリュームなしであなたのデータは、コンテナを停止するたびに消去されます.そのためには、コードにいくつかの行を追加する必要があります.DB :& Downからのコードは以下のようになります.(重要な行はボリュームを記述する"DB "セクションの最後にあり、"ボリューム"というところです
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql-data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

volumes:
  mysql-data:
字下げに注意してください.ボリュームは「サービス」と同じインデントレベルになります.
私はたった今ボリュームに深く行きません.(正直なところ、私はまだ専門家ではありません)しかし、このコードでは、MySQLデータと呼ばれるシステム( Dockerで管理されている)のボリュームを設定しています.すべてのデータベーステーブルとジャンクは、“MySQLデータ”内に格納されます.そして、そのデータをコンテナの/var/lib/mysqlにマップします.
それで、それはかなりたくさんです.いくつかの練習をしたいなら、Postgres用のMySQLを交換しようとするべきです.またはNGinX用のApache、またはDockerFileを使用して作曲家のような他のツールをインストールしようとします.その記事が役に立ったかどうか知らせてください.私はこれらのより良いことができるので、いくつかのフィードバックが大好きです.

ソースコードはこちら


Learn to code with our beginner friendly tutorials