0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでPHP+Apacheの環境を構築する

Last updated at Posted at 2024-09-23

はじめに

この記事では、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」というタブから、使用するタグ(バージョンのようなもの)を選ぶ。

スクリーンショット 2024-09-19 18.08.13.png

今回は、php:8.2-apacheを使用する。

スクリーンショット 2024-09-19 18.13.21.png

「Layers」という項目に、そのイメージを構成するレイヤーが記載されており、特に重要なのは以下の2項目。

スクリーンショット 2024-09-22 18.50.17.png

  • WORKDIR /var/www/html:Webサーバーのドキュメントルートが/var/www/htmlである
  • EXPOSE 80:コンテナがポート80を使用して外部と通信する

3. Dockerプロジェクトを作成する

(1) Docker環境を構築するためのプロジェクトディレクトリを作成する。

$ mkdir docker_project

(2) プロジェクトディレクトリ配下にsrc/index.phpDockerfileを作成する

$ cd docker_project
docker_project $ mkdir src && touch src/index.php Dockerfile

4. Dockerfileを編集する

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を編集する

src/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で、イメージが構築されたことを確認。

スクリーンショット 2024-09-23 10.44.39.png

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で、コンテナが立ち上がったことを確認。

スクリーンショット 2024-09-23 11.07.04.png

8. Webサーバーにアクセスして表示を確認

ホストのポート8080をコンテナのポート80にマッピングしている状態なので、localhost:8080にアクセスして、index.phpの内容が表示されればOK。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?