1705924997
2024-01-21 21:36:15
コンテンツ
コンテンツ
先ほどDockerについて話しました。。 今日は、私にとって Docker の主な関心事についてもう少し詳しく説明します。
確かに、CMS やスクリプトなどをテストする前に、私がやりたいのは、PHP で独自のものを開発することです。
一歩ずつ、粘り強く、すべてがうまくいく方法を一緒に見ていきます。
シンプルな最初のバージョン
必要性を明確にします。Github 上にテストしたいプロジェクトがあります。 プロジェクト ? 299コ、Apache サーバー上で少なくとも PHP 7.4 を必要とする CMS、それだけです。
データベースも何もなく、非常にシンプルになります。
この記事の続きでは、マシンに Docker をインストールするだけで十分です。それ以上は必要ありません。
リイメージ
最初に行うことは、必要なイメージを構築することです。
Docker は、すべて相互に分離されたコンテナーと連携して動作します。 コンテナーを起動するには、必要なすべてのファイルとサービスを含むイメージが必要です。
イメージを取得したら、必要なだけコンテナを作成できます。 しかしその前に、イメージを作成する必要があります。
このために、私たちは自由に使える素晴らしいツールを用意しています。 ドッカーハブ。
Docker Hub は、すぐに使用できる Docker イメージを取得してスクリプトやサーバーなどをテストできるプラットフォームですが、誰もがそれらをアップロードする権利も持っています。
最良の点は、イメージを回復し、ニーズに合わせて変更し、全員と共有できることです。
私たちのイメージに戻ります。 私は、小さな CMS をテストするために Apache と PHP サーバーが必要なだけだと言いました。 それはいいよ、チーム webdevops はすでにイメージを作成しています 必要なものがすべて揃っています。
画像を回復する
Docker ハブで見つかったイメージを取得するには、コンソールを開いて次を実行するだけです。
docker pull webdevops/php-apache:8.0
このコマンドは、作成者 webdevops から 8.0 タグでイメージ (ここでは php-apache) をダウンロードします。これは、ここでは必要なバージョンよりも高い PHP バージョンに対応します。

画像一覧
最初の画像をアップロードしました。
すでにダウンロードしたすべてのイメージを一覧表示するには、次のコマンドを実行します。
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
webdevops/php-apache 8.0 aaa9c0647b41 5 weeks ago 1.06GB
そして私たちのイメージは際立っています。
最初のコンテナを作成する
新しく取得したイメージを使用して最初のコンテナを起動します。
docker run --name 299ko -p 8080:80 webdevops/php-apache:8.0
docker runイメージからコンテナを作成できます- オプション
--name作成したコンテナに 299kb という名前を付ける -p 8080:80作成したマシンのポート 80 をホスト マシン (物理マシン) のポート 8080 に「マップ」します。 基本的にこれ- 最後に、タグが付けられた画像の名前です。 画像がダウンロードされていない場合は、自動的にダウンロードされます。 タグの指定がない場合は最新バージョンとなります(
:lastest) が検索されます。
この瞬間から、Apache + PHP コンテナが実行されます。 ブラウザを使用してアドレスにアクセスすると、 http://ローカルホスト:8080を実行すると、Apache サーバーから応答が返され、必ず 403 (禁止) エラーが表示されます。
コンテナのリスト表示
コンテナーが作成されたら、その詳細を確認できます。
アクティブなコンテナをリストします。
docker ps
すべてのコンテナをリストします。
docker ps -a

停止、再起動
コンテナを停止します。
docker stop 299ko
コンテナを起動します。
docker start 299ko
コンテナを停止すると、ページが表示されます。 http://ローカルホスト:8080 にはアクセスできなくなりました。
そしてファイルは?
あなたが正しいです。 サービスがアクティブな場合は、ファイルを変更して何かを表示できる必要があります。
しかし、サーバーがファイルを考慮するためには、ファイルをどこに配置すればよいでしょうか?
したがって、ここでは webdevops ドキュメントを参照する必要があります。 私はあなたに、 関連する章、そして答え: ディレクトリ内 /app 。 したがって、/app ディレクトリ内のすべてが次のアドレスで表示されます。 http://ローカルホスト:8080 。
しかし、どうすればこのディレクトリにアクセスできるのでしょうか?
以前に作成したコンテナをアクティブなままにして、別のコンソールを開きます。 そして、次のように入力します。
docker exec -ti 299ko bash
このコマンドは単にプログラムを実行するだけです bash 299koコンテナに入っています。 基本的に、SSH 経由でホスト マシンに接続しているかのように、ホスト マシンでターミナルを開きます。
次に、次のように入力します。 ls コンテナの / (ルート) のファイルとフォルダーを一覧表示するには、次のようにします。

「app」フォルダーが表示され、その中に自分自身を配置できるようになります。
cd app
再入力すると、 ls, /app フォルダーが空であることがわかります。 次に使用します ヴィ、画像にあるターミナルエディターを使用して、サーバー上で表示できるファイルを作成します。 ランダムにファイルを作成します。インデックス.php‘ これは単に phpinfo として機能し、現在の PHP 構成を表示します。
vi index.php
vi の使用をまだ始めていない人のために、一緒に作業を行います。
- 「i」キーを使用して、コマンドモードから編集モードに切り替えます。
- テキストを入力できるようになります。 ここでは、2 行だけを入力します。
などphpinfo(); - コマンドモードに戻るには、「Esc」キーを押します。
- 「:w」と入力してから「Enter」を押してファイルを保存し、「:q」と入力して「Enter」を押して Vi を終了します。
最後に、アドレスに移動します http://ローカルホスト:8080そうすると、美しい phpinfo が表示されるはずです。

これで、最初の Apache コンテナが作成され、最初の PHP ファイルが挿入され、動作しました。 でも、それは本当です、それは素晴らしいことではありません...
Dockerfile
Docker のイメージは依存関係ごとに整理されています。 たとえば、最初の webdevops イメージは PHP イメージに依存し、PHP イメージは Debian Buster イメージに依存します。
ここでは、以前と同様に、イメージを使用して Apache + PHP コンボを構築しますが、ファイルを手動で変更する代わりに、Git リポジトリからファイルを取得します。 このために、これらすべてのタスクを自動化する単純なテキスト ファイルである Dockerfile を使用します。
物理コンピューター上でフォルダーを選択し、「Dockerfile」というファイルを作成します。 それだけです、延長も何もありません。 その中に、単純にこれを入れます:
# syntax=docker/dockerfile:1
FROM webdevops/php-apache:8.0
RUN apt-get update && apt-get install -y git
RUN git clone --depth 1 -b v1.3.2 https://github.com/299Ko/299ko.git /app
RUN chown -R application:application /app/
- 最初の行は、使用する構文のバージョンを指定するための Docker のディレクティブです。
- から : 画像を復元します webdevops/php-apache:8.0 存在します(上記と同じ)。
- このイメージから、コマンド (走る)インストールできるようになります ギット
- Git リポジトリのクローンを作成します (ここ https://github.com/299Ko/299ko.git、その 1.3.2 ブランチ)、ファイルを /app フォルダーに置きます
- そして、このフォルダーへの書き込み権限に問題が発生しないように、このフォルダーの所有者を変更します。
dockerfile が配置されているフォルダーにターミナルを保存して開きます。 このイメージをビルドして、そのコンテナーを作成できるようにします。 これを行うには、次を実行するだけです。
docker build .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM webdevops/php-apache:8.0
---> aaa9c0647b41
Step 2/4 : RUN apt-get update && apt-get install -y git
---> Running in b70c4885ba15
..............
Removing intermediate container 7cf8e8b4db0a
---> 1731c4fa143b
Step 4/4 : RUN chown -R application:application /app/
---> Running in c0be2d884c19
Removing intermediate container c0be2d884c19
---> 54b25dd63d40
Successfully built 54b25dd63d40
エンドポイントは重要で、ビルドする Dockerfile が現在のディレクトリにあることを指定できます。
ここで作成した画像の名前は 54b25dd63d40。 作成する画像に名前を追加する場合 (たとえば、 テストDF、次のように指定するだけです。
docker build --tag=testdf .
次に、アクセス用のポートを変更することを忘れずに、この testdf イメージのコンテナー (「contdf」と呼びます) を作成できるようになります。
docker run --name contdf -p 8081:80 testdf
その後、住所に行きます http://ローカルホスト:8081/、299ko CMS が動作しているのを確認できます。

この段階では、アプリケーションは完全に機能します。 インストールなどをテストしたり、スクリプトでマシン上のファイルを変更したりできます。
Dockerfile を使用して、小さな CMS を共有する本当の方法を見つけました。 それは私たちの主な目標ではありませんでしたが、私たちは前進しています。
本当の問題はあなたです。どうやってファイルを変更できるのでしょうか?
プレミアボリューム
違うやり方でやります。 リモート ファイルを回復して自動的にコンテナに投入するのではなく、アプリケーション データなしで、つまり CMS ファイルなしでコンテナを作成します。
特徴的なのは、 音量 、コンテナ向けのファイル システムの一種ですが、削除後も使用できるという特徴があります。
実際、Docker は当初、ステートレス システムを起動することを目的としていたため、コンテナーを削除すると、すべての変更が失われます。 すべてを壊さずにすべてを触りたい人にとっては良いことですが、PHP でスクリプトを開発するのはかなり退屈です。
したがって、Docker ボリュームは永続性を実現し、すべてがうまくいかなかった場合でもデータを保持する方法です。
それが存在します Dockerの2種類のボリューム : 名前付きボリューム。たとえば、2 つのコンテナ間でデータを共有する場合に便利です。 ボリュームバインド、リンクされたボリュームを理解します。
これらは、コンテナ内の任意の場所にマウントされるフォルダーまたはファイルを使用します。
小さな例
バインド ボリュームをテストするために、最初のイメージである Apache + PHP からコンテナーを再作成します。 特殊なのは、最初に、コンテナーの有名な「/app」フォルダーにマウントするために使用する物理マシン上のフォルダーを特定することです。
私をフォローしましたか? さあ行こう。
最初に作成するフォルダーを選択します。 ここを選びました /home/maxk/dockerただし、そこにファイルを配置および変更する権限がある限り、どちらを選択しても構いません。 このディレクトリにアプリケーションのファイルを保存し、コンテナからアクセスできるようにします。
次のコマンドを実行して、最初のイメージから新しいコンテナを作成するだけです。
docker run --mount type=bind,source=/home/maxk/docker/,target=/app --name dockervolume -p 8083:80 webdevops/php-apache:8.0
docker runいつものように、コンテナを作成します--mount type=bind: バインド ボリュームをマウントすることを示しますsource=/home/maxk/docker/,target=/app:上で説明しました--name dockervolume: 結果としてのコンテナーの名前- 次に、使用されるポートとイメージの名前が続きます。
これを起動すると、実際の開発コンテナが完成しました。
ファイルをソース ディレクトリ (ここでは私の /home/maxk/docker フォルダー) に置くだけで開発できます 🙂
コンテナを削除しても、ファイルは保持されます。 さらに良いことに、他の拡張機能や別のバージョンの PHP などを使用してスクリプトをテストしたい場合は、それが可能です。 同じソースでコンテナを再作成し、元のイメージのみを変更するだけです。
docker run --mount type=bind,source=/home/maxk/docker/,target=/app --name dockervolumephp83 -p 8084:80 webdevops/php-apache:8.3
もちろん、使用するコンテナーとポートの名前を変更することを忘れないでください。競合しないように、それぞれは一意である必要があります。
構成
これについては話していませんが、コンテナ上で PHP および Apache 環境を構成することは明らかに可能です。 に送ります ドキュメント画像 私たちが話したとおり、私たちが見たことで、心配することなくこれを行うためのすべてのカードが手元にあります 😉
独自のイメージを作成して Docker Hub で提供する方法については、今後の記事で説明します。 楽しむ!
#Docker #PHP #開発環境を作成する