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 が立ち上がります。