案件でCodeIgniter4を使うために、Dockerにインストールした時の備忘録です。
※私自身はCodeIgniterに慣れているわけでもバックエンドに詳しいわけではないので、手順等が間違っている恐れは十分考えられますのでご注意ください。

docker-compose.ymlの設定

ymlの内容は以下のサイトを参考にさせていただきました。
codeigniter4-dockerでCodeIgniter4の開発環境を作成してみる


version: "3"

services:
    codeigniter4:
        image: atsanna/codeigniter4:latest
        container_name: 'codeigniter4'
        ports:
          - 80:80
        links:
          - codeigniter4_mysql
        volumes:
          - ./localfolder/www:/var/www/html
          
    codeigniter4_mysql: # ホスト名
        image: mariadb:10.5.5
        container_name: 'codeigniter4_mysql'
        ports:
          - 3306:3306
        volumes:
          - ./localfolder/mysql:/var/lib/mysql
          - ./localfolder/logs/mysql:/var/log/mysql
        environment:
          MYSQL_ROOT_PASSWORD: rootpassword
          MYSQL_DATABASE: codeigniter4
          MYSQL_USER: codeigniter4
          MYSQL_PASSWORD: codeigniter4

    codeigniter4_phpmyadmin:
        image: phpmyadmin/phpmyadmin:5.0.2
        container_name: 'codeigniter4_phpmyadmin'
        links:
          - codeigniter4_mysql
        environment:
          PMA_HOST: codeigniter4_mysql
          PMA_PORT: 3306
        ports:
          - 81:80
        volumes:
          - ./localfolder/sessions:/sessions

初期設定

ymlを書いたら指定のディレクトリに置いてコンソールで docker-compose up -d をします。
その後 http://localhost/ にアクセスするとCodeIgniter4の初期画面が表示されました。簡単だね!

DBが繋がらない

Dockerの構造を理解していれば簡単な気がするのですが、私は基本的にフロントエンドのコーダーなのでDBに繋げるのに少し時間が掛かりました。
フロントエンドでもバックエンドの勉強はしておけって話ですね。

hostnameはDockerだと、どこに指定してあるんだっけなと。この場合は先程のdocker-compose.ymlだとcodeigniter4_mysqlがhostnameですね。

ということでDatabase.phpに以下の設定を記述。


    public $default = [
        'DSN'      => '',
        'hostname' => 'codeigniter4_mysql',
        'username' => 'root',
        'password' => 'rootpassword',
        'database' => 'codeigniter4',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

次にCodeIgniterのルートディレクトリに「env」のファイルがあるので、ファイル名・拡張子を「.env」に変更(.htaccessのようなもの)

その後に以下の項目を設定。


#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------

database.default.hostname = codeigniter4_mysql
database.default.database = codeigniter4
database.default.username = root
database.default.password = rootpassword
database.default.DBDriver = MySQLi

database.tests.hostname = codeigniter4_mysql
database.tests.database = codeigniter4
database.tests.username = root
database.tests.password = rootpassword
database.tests.DBDriver = MySQLi

これで無事DBを接続することができました。

他参考文献

CodeIgniter4 の 環境/環境変数/設定 (Config) の使い方
【Codeigniter4】初期のインストールエラー

まとめ

フレームワーク一つ導入するのもよわよわエンジニアには大変な苦労です。DockerやらnpmやらLinuxやらの知識が網羅的に必要って正直難易度高くないですか…?エンジニア方々は知識ありすぎっていつも思ってます。