はじめに
この記事では、Docker環境を構築するための準備から、PHP+ApacheのWebサーバー上で"Hello World!"
を表示するまでの手順を紹介する。
環境情報 | |
---|---|
PC | Apple M1 Pro |
OS | Sonoma 14.4 |
Docker | 27.2 |
PHP | 8.2 |
Apache | 2.4 |
1. Docker Desktopをインストールする
(1) 公式サイトからDocker Desktop for Macをダウンロードし、Applicationsフォルダに追加する。
(2) ApplicationsフォルダからDocker Desktopを選択し、起動する。
(3) メニューバーにDockerのアイコンが表示されたらインストール完了。
2. イメージを選択する
イメージは、Docker Hubの イメージ一覧ページ から探すことが出来る。
各イメージのページにある「Tags」というタブから、使用するタグ(バージョンのようなもの)を選ぶ。
今回は、php:8.2-apache
を使用する。
「Layers」という項目に、そのイメージを構成するレイヤーが記載されており、特に重要なのは以下の2項目。
-
WORKDIR /var/www/html
:Webサーバーのドキュメントルートが/var/www/html
である -
EXPOSE 80
:コンテナがポート80を使用して外部と通信する
3. Dockerプロジェクトを作成する
(1) Docker環境を構築するためのプロジェクトディレクトリを作成する。
$ mkdir docker_project
(2) プロジェクトディレクトリ配下にsrc/index.php
とDockerfile
を作成する
$ cd docker_project
docker_project $ mkdir src && touch src/index.php Dockerfile
4. Dockerfileを編集する
# イメージを指定
FROM php:8.2-apache
# src配下をドキュメントルート配下にコピーする
COPY src/ /var/www/html/
このDockerfileを元にイメージをbuildすることで、php:8.2-apache
をベースイメージとして使用し、src/index.php
をドキュメントルート配下にコピーした新しいDockerイメージが作成される。
5. index.phpを編集する
<?php
echo ('Hello World!');
このファイルがドキュメントルート配下に置かれることで、Webサーバーへアクセスした際にHello World!
と表示されるようになる。
6. Dockerfileからイメージを構築する
4で作成したDockerfileを元に、イメージをbuildする。
docker_project $ docker build -t php-app:latest .
[+] Building 3.0s (7/7) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 81B 0.0s
=> [internal] load metadata for docker.io/library/php:8.2-apache 2.9s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 96B 0.0s
=> CACHED [1/2] FROM docker.io/library/php:8.2-apache@sha256:d821ef9306199fe2df0f5a62c43076bc56e3c3bfa469431284aa00a610e62a26 0.0s
=> [2/2] COPY src/ /var/www/html/ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:e0c9f0489f5f6150efe7f79c0bf22fc20ca2a5aa6465c114b25fa46dc56e0f92 0.0s
=> => naming to docker.io/library/php-app:latest
-
docker build
:Dockerfile とコンテキストからDockerイメージを構築するコマンド -
-t <image_name>:<tag>
:イメージに名前とタグを付けるためのオプション -
.
:Dockerfileが存在するディレクトリのパス(ビルドコンテキスト)
Docker Desktopで、イメージが構築されたことを確認。
7. コンテナを起動する
docker_project $ docker run -p 8080:80 -d -v "$(pwd)"/src:/var/www/html --name php-container php-app:latest
85ab8ec05f5c147ee67e9c3c3a93ca72af2339373f2df2000ff5833d822c9636
-
docker run
:Dockerコンテナを起動するコマンド -
-p <host_port>:<container_port>
:ホストとコンテナのポートをマッピングするためのオプション -
-d
:デタッチモード(Dockerコンテナをバックグラウンドで実行するモード)にするオプション -
-v <host_path>:<container_path>
:ホストのディレクトリやファイルをコンテナ内にマウントするためのオプション -
--name <container_name>
:コンテナに名前を付けるためのオプション -
php-app:latest
:使用するDockerイメージとタグの名前
Docker Desktopで、コンテナが立ち上がったことを確認。
8. Webサーバーにアクセスして表示を確認
ホストのポート8080
をコンテナのポート80
にマッピングしている状態なので、localhost:8080
にアクセスして、index.php
の内容が表示されればOK。