Laradockの取得
基本は 公式ドキュメント を参照
// 作業用ディレクトリにlaradockをクローンする
git clone https://github.com/Laradock/laradock.git
// envファイルをコピーする
cd laradock
cp env-example .env
本記事は公式ドキュメントの新規作成用のプロジェクト手順に従い、次のディレクトリ構成となる想定です。
作業用フォルダ
├ laradock
└ lara-test(新規プロジェクトフォルダ)
dockerをビルドする前に行う設定
.envの修正
基本設定
APP_CODE_PATH_HOST
に作成予定のプロジェクト名を入力する
APP_CODE_PATH_HOST=../lara-test/
SQL Server用設定
DB名、SA用パスワード、ポート番号を設定する。
パスワードは8文字以上で大文字小文字記号数字の4種類から3種以上含んでいる必要があります。パスワード ポリシー
### MSSQL #################################################
MSSQL_DATABASE=master
MSSQL_PASSWORD="yourStrong(!)Password"
MSSQL_PORT=1433
WORKSPACE用のインストールオプション、PHP_FPM用のインストールオプションをtrueに変更する。
### WORKSPACE #############################################
WORKSPACE_INSTALL_MSSQL=true
### PHP_FPM ###############################################
PHP_FPM_INSTALL_MSSQL=true
それぞれtrueにしないとDB接続時に次のようなエラーが発生します。
Illuminate\Database\QueryException
could not find driver
docker-compose.ymlの修正
ボリュームコンテナーを使用するための修正(Macでのみ必須)
デフォルトでは ${DATA_PATH_HOST}
のディレクトリにマウントするように設定されていますが、Macの場合はそのままだとエラーが出ます。
2020-05-08 06:49:33.62 Server Error: 17113, Severity: 16, State: 1.
2020-05-08 06:49:33.62 Server Error 87(パラメーターが間違っています。) occurred while opening file '/var/opt/mssql/data/master.mdf' to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary.
2020年6月時点ではMac上ではホストのディレクトリマウントがサポートされていないためです。
https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-docker?view=sql-server-ver15#mount-a-host-directory-as-data-volume
現時点では、SQL Server on Linux イメージを使用した Mac 上の Docker のホスト ボリューム マッピングはサポートされていません。 代わりにデータ ボリューム コンテナーを使用してください。
回避するためにはデータボリュームコンテナを用意してそちらを使用する必要があります。
volumes:
mssqlvolume:
driver: local
volumes:
# - ${DATA_PATH_HOST}/mssql:/var/opt/mssql
- mssqlvolume:/var/opt/mssql
インストール時に使用される環境変数の変更
設定可能な環境変数はこちら
### MSSQL ################################################
mssql:
build:
context: ./mssql
environment:
- MSSQL_PID=Express
- MSSQL_DATABASE=${MSSQL_DATABASE}
- SA_PASSWORD=${MSSQL_PASSWORD}
- ACCEPT_EULA=Y
Developerエディションにするなら MSSQL_PID=Developer
に変更、言語を日本語にしたいなら MSSQL_LCID=1041
に変更など。
以降は基本的にMySQLの場合などと同様。
失敗したら、画面に表示されるエラーログや dokcer logs
でログを確認する。
コンテナを立ち上げてプロジェクトを作成する
docker-compose up -d workspace nginx mssql php-fpm
でコンテナをビルド & 立ち上げて
docker-compose exec workspace bash
でコンテナに入って
composer create-project --prefer-dist laravel/laravel .
でプロジェクトを作成する。
コンテナ上では /var/www
下にファイルが配置され、ホストPC上ではAPP_CODE_PATH_HOST
で設定したプロジェクトフォルダに各ファイルが配置されている状態となります。
/var/www# ls -a
. artisan composer.lock .editorconfig .gitattributes phpunit.xml resources storage vendor
.. bootstrap config .env .gitignore public routes .styleci.yml webpack.mix.js
app composer.json database .env.example package.json README.md server.php tests
この状態で http://localhost を開くとlaravelのデフォルトページが表示されることが確認できます。
Laravel側のDB設定と疎通確認
Laravel用の.envでSQL Server用の設定をする
新規作成されたlaravelのプロジェクトの.envを編集
DB_CONNECTION=sqlsrv
DB_HOST=laradock_mssql_1
DB_PORT=1433
DB_DATABASE=master
DB_USERNAME=SA
DB_PASSWORD='""yourStrong(!)Password""'
docker-compose.yml
のデフォルトのパスワードではダブルクォートが入っていますが、そのまま.env
に記載すると除外されてしまうので、上記のような対応が必要です。
疎通確認
routes/web.php
に
Route::get('/test/', function () {
return json_encode(\Illuminate\Support\Facades\DB::select("select @@version"));
});
を追加して、 http://localhost/test/ でSQL Serverのバージョン情報が表示されたらSQL Serverに接続ができています。