Docker を利用したローカル環境構築
このドキュメントでは、a-blog cms を動かすためのローカル環境を Docker を利用して立ち上げます。
Docker とは
Docker はアプリケーションをコンテナと呼ばれる独立した環境でまとめて動かすためのプラットフォームです。OS やミドルウェアの設定をコードで管理できるため、「自分の環境では動くのに本番では動かない」といった問題を防ぎ、チームで同じ開発環境を簡単に共有できます。
詳しくは Docker 公式ドキュメント を参照してください。
a-blog cms 向けに PHP・MySQL 等の環境をコンテナで用意することで、ローカルマシンに直接ソフトウェアをインストールすることなく開発を始められます。
利用する Docker イメージ
| mysql | 公式イメージをそのまま使用します |
|---|---|
| nginxproxy/nginx-proxy | 複数環境を立ち上げる為のリバースプロキシです |
| atsu666/ioncube | ioncubeLoaderがインストール済みのphp-apatch環境です(Ver. 2.x 用) |
| atsu666/acms | PHP8.0 以上の php-apatch環境です( ioncubeLoaderはインストールされていません。Ver.3.0以上での使用を推奨) |
推奨: a-blog cms Ver.3.0 以上では atsu666/acms を使用してください。ioncubeLoader は不要になりました。
atsu666/acmsで利用可能な PHP バージョン
| PHPバージョン | イメージ |
|---|---|
| 8.4 | atsu666/acms:8.4 |
| 8.3 | atsu666/acms:8.3 |
| 8.2 | atsu666/acms:8.2 |
| 8.1 | atsu666/acms:8.1 |
| 8.0 | atsu666/acms:8.0 |
atsu666/ioncube(2.x用)で利用可能な PHP バージョン
| PHPバージョン | イメージ |
|---|---|
| 7.3 | atsu666/ioncube:7.3 |
| 7.2 | atsu666/ioncube:7.2 |
| 7.1 | atsu666/ioncube:7.1 |
| 7.0 | atsu666/ioncube:7.0 |
| 5.6 | atsu666/ioncube:5.6 |
| 5.5 | atsu666/ioncube:5.5 |
| 5.4 | atsu666/ioncube:5.4 |
| 5.3 | atsu666/ioncube:5.3 |
※ a-blog cms Ver. 3.0 以上では ionCubeLoader が不要になりましたが、PHP 7.x の環境で Ver.3.0 以上をお使いの場合は、引き続き atsu666/ioncube:7.x をお使いください
セットアップ手順
1. ディレクトリ構成を準備する
任意の作業ディレクトリを作成し、以下の構成になるよう準備します。
my-acms-project/
├── docker-compose.yml
└── html/ ← a-blog cms のファイルをここに展開するダウンロードページから a-blog cms のパッケージをダウンロードし、展開してください。展開後、ablogcms ディレクトリの中身をプロジェクトフォルダ直下の html/ ディレクトリに配置してください。
2. docker-compose.yml を作成する
以下の内容をそのままコピーして docker-compose.yml を作成してください(PHP バージョンは必要に応じて変更してください)。
services:
# db
db:
image: mysql:8.4
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql:delegated
environment:
MYSQL_ROOT_PASSWORD: root
command: --innodb-use-native-aio=0
# proxy(複数サイトを同時に起動するためのリバースプロキシ)
proxy:
image: nginxproxy/nginx-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
ports:
- "80:80"
- "443:443"
# web
web:
image: atsu666/acms:8.4 # 使用したい PHP バージョンに合わせて変更
privileged: true
volumes:
- ./html:/var/www/html # ホストとコンテナ間のファイル同期
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST=acms.test,www.acms.test # アクセスに使うホスト名
- APACHE_DOCUMENT_ROOT=/var/www/html # ドキュメントルートホスト・コンテナ間のファイル同期について
volumes の設定により、ホスト側のファイルを変更すると即座にコンテナ内にも反映されます。書式は ホストのパス:コンテナのパス です。
volumes:
- ./html:/var/www/html # ホスト側の ./html をコンテナの /var/www/html にマウント詳しくは Docker 公式ドキュメント「Volumes」 を参照してください。
VIRTUAL_HOST の設定について
nginxproxy/nginx-proxy はリバースプロキシとして動作し、指定された port で受けたリクエストをホスト名に応じて各コンテナに振り分けます。これにより、複数の Web コンテナを起動していても port を変えることなく共存できます。
設定は environment に VIRTUAL_HOST を記述するだけです。カンマ区切りで複数のホスト名を指定できます。
environment:
- VIRTUAL_HOST=acms.test,www.acms.test3. hosts ファイルを編集する
VIRTUAL_HOST に指定したホスト名でブラウザからアクセスできるよう、OS の hosts ファイルに以下を追記してください。
macOS / Linux の場合
ファイルパス: /etc/hosts
127.0.0.1 acms.test www.acms.test編集コマンド:
sudo vi /etc/hostsWindows の場合
ファイルパス: C:\Windows\System32\drivers\etc\hosts
管理者権限でメモ帳などを開き、以下を追記してください。
127.0.0.1 acms.test www.acms.test4. Docker を起動する
$ cd /path/to/my-acms-project # docker-compose.yml があるディレクトリへ移動
$ docker compose up -d5. a-blog cms のインストールを行う
ブラウザで http://acms.test にアクセスしてインストール画面を開いてください。
データベースの接続設定は以下のように入力します。
項目 | 値 |
|---|---|
データベースホスト |
|
データベース名 | 任意(例: |
ユーザー名 |
|
パスワード |
|
db はサービス名です。コンテナ間は自動的にサービス名で名前解決できます。ホストのIPアドレスを指定する必要はありません。詳しくは Docker 公式ドキュメント「Networking in Compose」 を参照してください。
M1/M2/M3 Mac(Apple Silicon)での注意点
atsu666/ioncube:5.5、atsu666/ioncube:5.4、atsu666/ioncube:5.3 は arm64 アーキテクチャに対応していません。Apple Silicon Mac でこれらのイメージを使用する場合は、docker-compose.yml に platform: linux/amd64 を追加してください。
web:
image: atsu666/ioncube:5.5
platform: linux/amd64 # この行を追加
privileged: true
volumes:
- ./html:/var/www/html
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST=acms.test,www.acms.test
- APACHE_DOCUMENT_ROOT=/var/www/htmlよくある質問
Q. ブラウザでローカル環境にアクセスできない
hosts ファイルの編集が反映されているか確認してください
docker compose psでコンテナが起動しているか確認してくださいproxy コンテナの 80 番ポートが他のプロセスと競合していないか確認してください(MAMP などの他のローカルサーバーが起動している場合は停止してください)
Q. データベースに接続できない
config.server.php の DB_HOST には db(サービス名)を指定してください。localhost や 127.0.0.1 では接続できません。