Docker を利用したローカル環境構築


このドキュメントでは、a-blog cms を動かすためのローカル環境を Docker を利用して立ち上げます。

Docker とは

Docker はアプリケーションをコンテナと呼ばれる独立した環境でまとめて動かすためのプラットフォームです。OS やミドルウェアの設定をコードで管理できるため、「自分の環境では動くのに本番では動かない」といった問題を防ぎ、チームで同じ開発環境を簡単に共有できます。

詳しくは Docker 公式ドキュメント を参照してください。

a-blog cms 向けに PHP・MySQL 等の環境をコンテナで用意することで、ローカルマシンに直接ソフトウェアをインストールすることなく開発を始められます。


移行のお知らせ

a-blog cms 開発用 Docker イメージは、これまで atsu666 個人アカウントで公開していましたが、appleple アカウントに移行しました。旧イメージ(atsu666/acmsatsu666/ioncube)を利用している場合は、それぞれ appleple/acms-devappleple/acms-dev-ioncube への切り替えをお願いします。


mysql 公式イメージをそのまま使用します
nginxproxy/nginx-proxy 複数環境を立ち上げる為のリバースプロキシです
appleple/acms-dev-ioncube  ioncubeLoaderがインストール済みのphp-apatch環境です(Ver. 2.x 用)
appleple/acms-dev PHP7.2 以上の php-apatch環境です( ioncubeLoaderはインストールされていません。Ver.3.0以上での使用を推奨)

推奨: a-blog cms Ver.3.0 以上では appleple/acms-dev を使用してください。ioncubeLoader は不要になりました。


appleple/acms-devで利用可能な PHP バージョン


PHPバージョン イメージ
8.5 appleple/acms-dev:8.5
8.4 appleple/acms-dev:8.4
8.3 appleple/acms-dev:8.3
8.2 appleple/acms-dev:8.2
8.1 appleple/acms-dev:8.1
8.0 appleple/acms-dev:8.0
7.4 appleple/acms-dev:7.4
7.3 appleple/acms-dev:7.3
7.2 appleple/acms-dev:7.2

appleple/acms-dev-ioncube(2.x用)で利用可能な PHP バージョン


PHPバージョン イメージ
7.4 appleple/acms-dev-ioncube:7.4
7.3 appleple/acms-dev-ioncube:7.3
7.2 appleple/acms-dev-ioncube:7.2
7.1 appleple/acms-dev-ioncube:7.1
7.0 appleple/acms-dev-ioncube:7.0
5.6 appleple/acms-dev-ioncube:5.6
5.5 appleple/acms-dev-ioncube:5.5
5.4 appleple/acms-dev-ioncube:5.4
5.3 appleple/acms-dev-ioncube:5.3

セットアップ手順

1. ディレクトリ構成を準備する

任意の作業ディレクトリを作成し、以下の構成になるよう準備します。

my-acms-project/
├── docker-compose.yml
└── html/          ← a-blog cms のファイルをここに展開する

ダウンロードページから a-blog cms のパッケージをダウンロードし、展開してください。展開後、ablogcms ディレクトリの中身をプロジェクトフォルダ直下の html/ ディレクトリに配置してください。

2. docker-compose.yml を作成する

サービス構成(db、web、必要に応じて proxy)を定義します。PHP バージョンは必要に応じて変更可能です。

ポイント: proxy(nginx-proxy)は必須ではありません。 nginxproxy/nginx-proxy は、acms.test のような任意のホスト名でアクセスしたい場合や、複数のプロジェクト(複数ドメイン)を同時に起動したい場合に使うリバースプロキシです。1 つの環境だけを立ち上げるだけであれば省略できます。

複数ドメイン環境を同時に使いたい場合は、次のように proxy サービスを追加し、web サービス側で VIRTUAL_HOST を指定してください。

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(複数ドメイン環境を同時に立ち上げる場合のみ追加。1つの環境だけならこのサービス自体が不要)
  proxy:
    image: nginxproxy/nginx-proxy
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    ports:
      - "80:80"
      - "443:443"
  # web
  web:
    image: appleple/acms-dev:8.4  # 使用したい PHP バージョンに合わせて変更
    restart: always
    volumes:
      - ./html:/var/www/html  # ホストとコンテナ間のファイル同期
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=acms.test,www.acms.test  # proxy 経由でアクセスするホスト名(proxy を使わない場合は不要)
      - APACHE_DOCUMENT_ROOT=/var/www/html   # ドキュメントルート
      # - XDEBUG=true  # Xdebug を有効にする場合(デフォルトは無効)
      # - PUID=1000    # ホスト側のuid/gidに合わせる場合(Linuxでのボリューム権限対策)
      # - PGID=1000

proxy を使わない場合は、次のようにシンプルな構成にできます。ポート指定を直接 web サービスに書き、http://localhost でアクセスします。

services:
  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

  web:
    image: appleple/acms-dev:8.4
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./html:/var/www/html
      - /etc/localtime:/etc/localtime:ro
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html

ホスト・コンテナ間のファイル同期について

volumes の設定により、ホスト側のファイルを変更すると即座にコンテナ内にも反映されます。書式は ホストのパス:コンテナのパス です。

volumes:
  - ./html:/var/www/html  # ホスト側の ./html をコンテナの /var/www/html にマウント

詳しくは Docker 公式ドキュメント「Volumes」 を参照してください。

VIRTUAL_HOST の設定について(proxy を利用する場合)

nginxproxy/nginx-proxy はリバースプロキシとして動作し、指定された port で受けたリクエストをホスト名に応じて各コンテナに振り分けます。これにより、複数の Web コンテナを起動していても port を変えることなく共存できます。

設定は environmentVIRTUAL_HOST を記述するだけです。カンマ区切りで複数のホスト名を指定できます。

environment:
  - VIRTUAL_HOST=acms.test,www.acms.test

3. hosts ファイルを編集する(proxy を利用する場合)

VIRTUAL_HOST に指定したホスト名でブラウザからアクセスできるよう、OS の hosts ファイルに以下を追記してください。

macOS / Linux の場合

ファイルパス: /etc/hosts

127.0.0.1  acms.test www.acms.test

編集コマンド:

sudo vi /etc/hosts

Windows の場合

ファイルパス: C:\Windows\System32\drivers\etc\hosts

管理者権限でメモ帳などを開き、以下を追記してください。

127.0.0.1  acms.test www.acms.test

4. Docker を起動する

$ cd /path/to/my-acms-project  # docker-compose.yml があるディレクトリへ移動
$ docker compose up -d

5. a-blog cms のインストールを行う

ブラウザで http://acms.test (proxy を使わない場合は http://localhostにアクセスしてインストール画面を開いてください。

データベースの接続設定は以下のように入力します。

項目

データベースサーバー名

db

データベース名

任意(例: db_acms

データベースユーザー名

root

データベースパスワード

root

db はサービス名です。コンテナ間は自動的にサービス名で名前解決できます。ホストのIPアドレスを指定する必要はありません。詳しくは Docker 公式ドキュメント「Networking in Compose」 を参照してください。


M1/M2/M3 Mac(Apple Silicon)での注意点

appleple/acms-dev-ioncube:5.5appleple/acms-dev-ioncube:5.4appleple/acms-dev-ioncube:5.3 は arm64 アーキテクチャに対応していません。Apple Silicon Mac でこれらのイメージを使用する場合は、docker-compose.ymlplatform: linux/amd64 を追加してください。

web:
  image: appleple/acms-dev-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(サービス名)を指定してください。localhost127.0.0.1 では接続できません。