既存の CakePHP プロジェクトを Docker で動かす事例 2

既存の CakePHP プロジェクトを Docker で動かす事例 2

Docker

以前に Ubuntu 20.04 上で CakePHP を動作させる Docker を紹介しましたが、今回は 少し古い Ubuntu 18.04 に CakePHP を載せ SQLServer に接続する Docker を構築しましたので、その手順について紹介します。

今回のポイントは SQLServer への接続です。Microsoft SQL Server 用 PHP ドライバーをインストールする際、少なくとも PHP 7.4 以上でなければいけないという点に注意しましょう。

開発環境

今回、 次のようなサーバを Docker で用意したので、紹介させて頂きます。
  • Ubuntu18.04
  • Apache2
  • PHP7.4
  • CakePHP 3.8
  • SQL Server 2012 (RDSを直接利用のため Docker には含まない)

基本的には前回と同じ構成ですので、異なる箇所のみピックアップして紹介します。

docker-composer.yml

version: '3'
services:
  web:
    image: ubuntu:18.04
    container_name: web_xxx
    build: ./web
    ports: 
      - 8080:80
    volumes:
      - ../:/var/www/html/xxxxxxx
    command: >
      sh -c "
      cd /var/www/html/xxxxxxx &&
      composer install --no-interaction &&
      service apache2 restart &&
      tail -f /dev/null
      "
    tty: true

今回は Ubuntu 18.04 ですので、 image のみ「 image: ubuntu:18.04 」としました。

Dockerfile

FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo

#リポジトリ追加
RUN apt update \
  && apt -y install software-properties-common \
  && add-apt-repository ppa:ondrej/php

#各種インストール
RUN apt update \
  && apt -y install tzdata apache2 php7.4 php7.4-dev php7.4-xml php7.4-mysql php7.4-intl php7.4-mbstring php7.4-zip php7.4-gd \
  && mkdir -p /var/www/html/xxxxxxx

#設定ファイルコピー
COPY 000-default.conf /etc/apache2/sites-enabled
COPY apache2.conf /etc/apache2

#MSSQLインストール準備
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
  && curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list | tee /etc/apt/sources.list.d/mssql-server-2017.list \
  && curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#MSSQLインストール
RUN apt update \
  && apt -y install mssql-server \
  && ACCEPT_EULA=Y apt -y install msodbcsql17 mssql-server

RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile \
  && echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc \
  && . ~/.bashrc

RUN apt -y install unixodbc-dev

#phpプラグインインストール
RUN pecl install sqlsrv pdo_sqlsrv \
  && printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini \
  && printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini \
  && phpenmod -v 7.4 sqlsrv pdo_sqlsrv

#composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
  && php composer-setup.php \
  && php -r "unlink('composer-setup.php');" \
  && mv composer.phar /usr/local/bin/composer \
  && a2enmod rewrite

#Apache起動
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]

今回大きく異なるのは Dockerfile です。まずは中身を確認してみましょう。SQL Server 関連で追加・変更があります。

1. 今回は SQL Server を利用しますが、Microsoft SQL Server 用 PHP ドライバーが PHP 7.4 以上である必要があるため、PHP 7.4 をベースにプラグインもそれに合わせています。

2. 今回、SQL Server は AWS RDS を利用しますが、それに付随するツールを利用したいため、まとめて SQL Server をインストールします。先に伝えたように AWS RDS では SQL Server 2012 を利用しますが、ツールは最新のものを利用するため、特にバージョン指定せず SQL Server をインストールしました。また規約に同意するため、「 ACCEPT_EULA=Y 」としています。

3. また PHP より SQL Server を扱いたいため、 プラグインもインストールします。そして PHP の設定も SQL Server のプラグインを有効にします。

実行

実行は前回と同様です。ターミナルで次のコマンドを入力します。
docker-compose build --no-cache
docker-compose up -d
これで Docker が立ち上がります。

まとめ

これでまた過去のサーバを Docker 化することができました。 Docker はサーバを立ち上げるための最小構成であるため、サーバ構築の勉強にもなります。今後もこの流れは続きそうです。
» エンジニア登録はこちら