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





