[Docker] Docker-composeでさくっとSSL付きCodeigniter環境を構築する
軽量なPHPフレームワーク・CodeIgniterを、Docker-composeでさくっと構築する方法をまとめてみました。SSL付き&DBとの接続設定もしてあります。
更新日: 2018.7.17公開日: 2017.10.5
軽量なPHPフレームワーク・CodeIgniterを、Docker-composeでさくっと構築する方法をまとめてみました。SSL付き&&DBとの接続設定もしてあります。
構築方法
公式のコンテナイメージ「php:7.0-apache」をそのまま使うとmysqlとの接続するための拡張がインストールされていないため、CodeIgniterでDBに接続しようとした時に「Call to undefined function mysql_init」エラーが出てしまいます。
ネットでは、「mysqli => mysql」すればOKという掲示板なんかもありますが、mysql_関数はPHP7では廃止されているので利用できません。
そこで今回は、mysqliをインストールするために、PHP公式イメージを少し改変してオリジナルイメージを構築します。と言っても、3行ほどのファイルなので何も難しいことはありません。
流れ
構築には、docker-composeを使いたいので、
- Dockerfileを用意
- docker-compose build
- docker-compose up -d
という流れで進めます。
DBなどは別途用意
なお、今回の事例では、共有ネットワーク「common_link」を使っているのと、nginxプロキシ&SSL用にnginx-proxyコンテナを、DB用にmariadbコンテナをすでに立ち上げている状況からスタートしています。
共有ネットワークの構築はこちらに、nginx-proxyコンテナの構築はこちらに、mariadbコンテナの構築はこちらに、それぞれまとめてあります。
実際に構築してみる
Dockerfileの準備
さて、まずは、Dockerfileを作っていきます。
やりたいことは、
- PHPからMYSQL接続ができるように拡張機能をインストール
- .htaccessを使えるようにする
この2点だけです。
vi Dockerfile
FROM php:7.0-apache
RUN apt-get update && \\
docker-php-ext-install mysqli mbstring
RUN a2enmod rewrite
これでおしまい。
簡単に解説すると、
ベースとなるPHPの公式イメージを宣言して、
FROM php:7.0-apache
最新情報にアップデート& mysqliや必要拡張をインストール。
RUN apt-get update && \\
docker-php-ext-install mysqli mbstring
インストールが終わったら、mod_rewriteを有効にします。
RUN a2enmod rewrite
こんな感じです。
docker-composeファイルの準備
続いて、docker-compose用のファイルを作成します。
通常は、「image:php:7.0-apache」とするところを、「build: .」としているところが違います。
buildには、読み込みたいDockerfileがあるディレクトリを選びます、「.」はカレントディレクトリという意味です。
その他には、DocumentRoot(/var/www/html)をdocker-compose.ymlがあるディレクトリの「data」ディレクトリに展開する前提にしています。また、「php-apache:」ブロックの環境変数(environment:)は、nginx-proxyコンテナが自動でLet’s EncryptのSSL証明書を取得&更新してくれるための宣言です。不要な場合は決してください。
version: '2'
services:
data:
container_name: data
image: busybox
restart: always
stdin_open: true
tty: true
volumes:
- ./data:/var/www/html
command: /bin/sh
php-apache:
build: .
#image: php:7.0-apache
hostname: hogehoge.com
environment:
VIRTUAL_HOST: hogehoge.com
VIRTUAL_PORT: 80
LETSENCRYPT_HOST: hogehoge.com
LETSENCRYPT_EMAIL: [email protected]
LETSENCRYPT_TEST: "false"
volumes:
- /etc/localtime:/etc/localtime:ro
volumes_from:
- data
external_links:
- mariadb:mysql
ports:
- "80"
restart: always
networks:
- common_link
networks:
common_link:
external: true
いざ、起動!!
ここまで出来たら、あとは簡単です。
オリジナルイメージを構築
docker-compose build
サーバーを構築
docker-compose up -d
で完了です。
あとは、dataディレクトリの中にCodeIgniterプロジェクトを保存すれば動きます。
さくっとですが、DockerでSSL付きCodeIgniter環境を構築してみました。
個人的にはdocker buildを食わず嫌いしていたんですが、詳細なカスタマイズをしようと思うと便利な機能だなと思いました。出元のよくわからないコンテナイメージを使うよりも安心できるメリットもありますね。
CodeIgniterは軽量フレームワークなので、今回くらい必要最低限のものだけが入った環境だと、かなり低スペックのサーバーでもサクサク動いてくれるので好きです。