LoginSignup
0
4

More than 3 years have passed since last update.

VirtualBox上のCentOS7にdockerでpostgresql+PHP+Apache環境を構築

Last updated at Posted at 2019-09-29

はじめに

かなり期間が空いてしましましたが、
ローカル環境にVirtualBoxを使用して開発環境を構築する作業の3回目です。
前々回はDBサーバ、
前回はWEBサーバを構築しました。
今回は、DBサーバ+WEBサーバ+PHPアプリの環境を構築します。
イメージとしては、DBの値を取得して、WEBサーバ上にPHPで表示します。

作業環境

  • MacOS X Yosemite 10.10.5

1.Docker Compose

今回は「Docker Compose」を使用して、複数のサーバを一度に操作する手順でまとめます。
インストール手順は、公式サイトの手順を参考に実施してください。

2.ディレクトリ構成

今回は以下の構成で各ファイルを用意しました。

docker-php-postgres
┣ docker-compose.yml   // Docker Composeの設定ファイル(3.参照)
┣ docker-file
┃ ┣ db
┃ ┃ ┣ Dockerfile   // DBサーバ用のDockerfile(4.参照)
┃ ┃ ┣ docker-entrypoint-initdb.d
┃ ┃   ┣ 01_createdb.sql   // DB作成用SQL
┃ ┣ web
┃   ┣ Dockerfile   // WEBサーバ用のDockerfile(6.参照)
┃   ┣ php.ini      // PHP設定ファイル(7.参照)
┣ volumes
  ┣ web
    ┣ html
      ┣ index.php   // PHPファイル(8.参照)

3. docker-compose.yml

version: '3'

services:

  web:
    build: ./docker-file/web/
    ports:
      - 8080:80
    volumes:
        - ./volumes/web/html/:/var/www/html:z   // :zを忘れないように。
    depends_on:
      - db

  db:
    build: ./docker-file/db/
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=testuser
      - POSTGRES_PASSWORD=password

4. DBサーバ用Dockerfile

FROM postgres:9.3

RUN apt-get update

RUN apt-get install -y vim less

COPY ./docker-entrypoint-initdb.d/01_createdb.sql /docker-entrypoint-initdb.d/

EXPOSE 5432

5. DB作成用SQL

DB作成用SQLとテーブル作成SQLファイルをdocker-entrypoint-initdb.d配下に作成します。
今回は「01_createdb.sql」という名称で
testdbというDB、test_tableというテーブルを作成します。
test_tableテーブルには、idカラムとkeywordカラムを用意して、
適当な値を設定しておきます。

6. WEBサーバ用Dockerfile

# Apache モジュールが同梱された PHP コンテナイメージ
FROM php:apache

RUN apt-get update

RUN apt-get install -y vim less

# Postgres関連のPHPエクステンションをインストール
RUN set -ex apk --no-cache add postgresql-dev libpq-dev

RUN apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql pgsql mbstring

# PHPの設定ファイルをコピー
COPY ./php.ini /usr/local/etc/php/

7. PHP設定ファイル

[Core]
display_errors = On
error_reporting = E_ALL
error_log = /var/log/apache2/error.log
log_errors = On

[Date]
date.timezone = 'Asia/Tokyo'

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = auto
mbstring.http_input = auto
mbstring.http_output = auto
mbsting.encoding_translation = Off
mbstring.detect_order = auto

8. PHPファイル

DBのテーブル内容を取得して、出力する単純なPHPファイルです。

$conn = "host=docker-php-postgres_db_1 port=5432 dbname=testdb user=testuser password=password";
$link = pg_connect($conn);
if (!$link) {
    exit('接続失敗です。'.pg_last_error());
}

pg_set_client_encoding("sjis");

$result = pg_query('SELECT id, keyword FROM test_table');
if (!$result) {
    exit('クエリーが失敗しました。'.pg_last_error());
}

for ($i = 0 ; $i < pg_num_rows($result) ; $i++){
    $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
    print('id='.$rows['id']);
    print(',keyword='.$rows['keyword'].'<br>');
}

$close_flag = pg_close($link);

if (!$close_flag){
    print('切断に失敗しました。<br>');
}

?>
</body>
</html>

9. コンテナ起動

3.〜8. のファイルが準備でき次第、以下のコマンドを実行します。
このコマンドはビルドまで行ってくれます。

$ docker-compose up -d

ビルドのみ行いたい場合は、以下のコマンドを実行します。

$ docker-compose build

コマンドを実行した後、コンテナが起動したかどうかを以下のコマンドで確認します。

$ docker-compose ps
root@localhost docker-php-postgres]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
f078f9167ad6        docker-php-postgres_web   "docker-php-entryp..."   41 seconds ago      Up 36 seconds       0.0.0.0:8080->80/tcp     docker-php-postgres_web_1
c51a280c6d44        docker-php-postgres_db    "docker-entrypoint..."   45 seconds ago      Up 41 seconds       0.0.0.0:5432->5432/tcp   docker-php-postgres_db_1

起動ができたら、ブラウザから起動したWEBサーバのindex.phpにアクセスしてみます。
アクセスして、テーブルの内容が表示されていたら、完了です。

http://【VirtualBox IPアドレス】:8080/index.php

スクリーンショット 2019-09-29 19.33.06.png

10. コンテナの停止

コンテナの停止は以下のコマンドを実行します。

$ docker-compose stop

これでDBサーバ+WEBサーバ+PHPアプリの環境を構築できました。
今回の学習したものをベースに、
dockerを使用した様々な環境構築を実施していきたいと思っています。

参考URL

https://www.key-p.com/blog/staff/archives/106755
https://docs.docker.com/compose/install/
https://qiita.com/uhooi/items/fb14d99d3323bd2eee9d
https://mizominton.hatenablog.jp/entry/docker-cakephp1.3
https://qiita.com/nagi244/items/e5de6fc062fdcc5004e9

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4