How to connect Php docker container with Mongo DB docker container

March 06, 2018

Introduction

In this post, I will show:
  • How to run a mongo dbdocker container?
  • How to run Php with apache docker container?
  • How to connect Php docker container to mongo?
  • How to run some basic mongo dbqueries from phpcontainer?

Run a Mongo DB Docker Container?

Goto Docker for MongoDb. And, select mongo db image you want to run.

Goto your command terminal.

Type:

docker run -d --name my-mongo mongo:latest

This will expose port: 27017 by default. You can connect to this mongo db instance by installing Robo 3T, a software for managing mongo db.

Run a Php docker container

I will run php5/apache container.

Run:

docker run -d -p 8020:80 --name php-apache php:5-apache

Note: This will run a php container, but in order to be able to connect to mongo db container, you need to link this container to mongo db container.

docker run -d -p 8020:80 --link my-mongo --name php-mongo-test php:5-apache

Now, you should be able to see two container running by typing: “docker ps” command.

Install Mongo Php connector

You will need mongo php library in order to write php code that connect to mongo db.

There are two ways:

  1. Run php/apache image, and install php-mongo manually
  2. Write a custom Dockerfile, and prepare your image to have php-mongo dependencies installed.

1. Run php/apache image, and install php-mongo manually

Check container id of php container, by typing command:
docker ps

Open a shell/bash in that container: (assumming 9da60559db80 is my container id)

docker exec -it 9da60559db80 bash

Now, you are into the shell terminal of php container. You will need to install php-mongo dependencies.

Run following commands:

   apt-get update
   apt-get install openssl libssl-dev libcurl4-openssl-dev
   pecl install mongo
   echo "extension=mongo.so" > /usr/local/etc/php/conf.d/mongo.ini

In above steps, we basically installed few dependencies required for mongo db connector, and installed mongo db php extension, and included that in php.ini list.

Note: Php container loads all ini file present in /usr/local/etc/php/conf.d/ directory

Now, you need to restart your container in order to load mongo db extension.

Restart your container:

docker stop 9da60559db80
docker start 9da60559db80

2. Prepare docker image, with above steps baked in

Goto:https://github.com/GyanBlog/php-mongo-docker, and build your image. You will have above steps pre-done. Enjoy.

To test whether you have loaded mongo db extension correctly or not. Prepare a phpfile in /var/www/html directory say info.php, and put following content:

<?php
print phpinfo();

On your browser, try: localhost:8082/info.php

You should see a big html page showing php information, and installed extensions. Search for mongo, and it should show some results.

Run Php code that connects to Mongo DB

<?php
$connection = new MongoClient( "mongodb://my-mongo:27017" );

$collection = $connection->selectCollection('db-name', 'collection-name');
if (!$collection) {
        echo 'not connected to collection';
        exit;
}
$cursor = $collection->find();
foreach ($cursor as $doc) {
    var_dump($doc);
}

Bonus

We have pushed this image to hub.docker.com athttps://hub.docker.com/r/gyanblog/php-apache-mongo/

Php Class Reference for MongoCollection

http://php.net/manual/en/class.mongocollection.php


Similar Posts

Latest Posts