php + mongodb のdocker環境の作成 #mongodb #php #docker

■ 概要:

mongodb + php環境の構築メモ等です
dockerを使う例です
・フォルダ構成は、Laravelを使用し。Laravel 7を追加しました
・Laravel 7は、mongodb対応してないようでしたので。
 composer でmongoドライバ等を追加する例を探して、mongo操作する形です

■ 環境

mongoDb:
php-fpm : 7.3
Laravel : 7.29
nginx

■ 参考
・先人様の記事を参考しました。

https://access-jp.co.jp/blogs/development/51
https://www.php.net/manual/ja/mongodb.tutorial.library.php

■ 参考の設定

■ 設定など
・docker-compose.yml

/docker-compose.yml

version: '3'

services:
web:
   build: ./docker-nginx
   ports:
       - 80:80
   depends_on:
       - app
   volumes:
       - ./:/var/www/html
       - ./docker-nginx/default.conf:/etc/nginx/conf.d/default.conf
   links:
       - app
app:
   build: ./docker-php
   depends_on:
       - mongo
   links:
       - mongo
   volumes:
       - ./:/var/www/html

mongo:
   image: mongo
#    container_name: "mongo"
   command: 
     - mongod
   ports:
     - 27017:27017
   volumes:
     - mongo-data:/data/db

mongo-data:
   image: busybox

volumes: 
 mongo-data:

・pecl , やや時間かかりました。

pecl install mongodb

・ php.ini 修正
dockerの場合ですが、パスは探しました (  /usr/local/etc/php )

# php -r "phpinfo();" | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

・extension 追加

extension=mongodb.so

・docker-compose を再起動し、
 nginx経由で、phpinfo(); を実行すると。mongodb が反映されました

画像1

・composer 追加
 上記の、php.ini修正が完了してないと、composerがエラーになりました。

composer.phar require "mongodb/mongodb"

・上記で、ドライバ追加まで 完了です。


■ テスト

・フォルダ構成は、Laravel 環境にした例です

php composer.phar create-project --prefer-dist laravel/laravel myblog "7.*"

・ データの追加、 collection にデータ追加しておきます。

db.books.insertMany([
 { "title": "t1", "content" : "c1"  },
 { "title": "t2", "content" : "c2"  },
 { "title": "t3", "content" : "c3"  },
 { "title": "t4", "content" : "c4"  },
]);

・検索する例 , vendor/autoload.php を読込み、find で、検索する例
 接続先は dockerの場合は、ホスト名で接続できなかった為、コンテナ名 mongoにしました
( new MongoDB\Client("mongodb://mongo:27017"); )

public/test2.php

require '../vendor/autoload.php'; // include Composer's autoloader

//
function test1(){
   $client = new MongoDB\Client("mongodb://mongo:27017");
   $collection = $client->db1->books;
       $result = $collection->find();

   foreach ($result as $entry) {
       var_dump($entry);
   }
}

/// main
test1();
var_dump ("#end-test");


..

この記事が気に入ったらサポートをしてみませんか?