docker×laravel×mysqlを使った環境構築を行ったのでその手順をご紹介します。
初めてdockerで環境構築を行ったので、少しでも参考になればと思います。
環境
環境 | バージョン |
---|---|
PHP | 7.0.27 |
FW | CakePHP3.2.13 |
Apache | 2.2.15 |
OS | CentOS6.9 |
DB | MySQL5.6.39 |
手順
1. DockerフォルダDL 2. Git Clone 3. Docker コンテナに入る 4. Apache起動 5. ドキュメントルート設定 6. Composer install 7. mysql起動 8. データベース作製 9. app.phpの設定 10. データベース接続環境構築してみよう
DockerフォルダDL
今回は元々用意していたDockerFile,ymlファイルなどをまとめてダウンロードしてます。 下記、フォルダ構造になります。
-/
|- docker-compose.yml
|- docker
|- db
| |- Dockerfile
| |- files
| |- entry.sh
| |- my.cnf
|
|
|- web
|- Dockerfile
|- files
|- composer.phar
|- dev.conf
|- php.ini
|- ssl.conf
Git Clone
githubにてプロジェクトの取得。 フォルダ構造は下記のようになりました。
-/
|- project
|- docker-compose.yml
|- docker
Dockerコンテナに入る
コンテナに入る前にイメージの作製、コンテナを起動します。
コマンドラインで下記を実行する。
- ビルド
docker build
// ビルドすることでdocker fileからイメージが得られます。
- コンテナの起動
$ docker-compose up -d
// コンテナを起動します。
下記のコマンドで、ビルドとコンテナの起動を一度に行えます。
- ビルドとコンテナの起動
$ docker-compose up -d --build
// イメージのビルドから始めてコンテナを起動します。
$ docker ps
//起動中のコンテナの確認
オプション-dについて
$ docker-compose up
// ターミナルでコンテナを起動しているため、同じターミナルでは作業できない。
$ docker-compose up -d
// コンテナをバックグラウンドで起動するため、同じターミナルで作業ができる。
下記のコマンドでコンテナに入ります。
$ docker exec -it CONTAINER ID /bin/bash
//CONTAINER IDは docker psをした際に確認できます。
Apache起動
webコンテナ内で、下記コマンドでApache起動する。
service httpd start
Apache起動
service httpd stop
Apache停止
service httpd restart
Apache再起動
/etc/init.d/httpd status
Apache状態確認
ドキュメントルート設定
web内のhttpd.confのドキュメントルートの設定を確認します。 今回のディレクトリ構造だとvar/www/htmlで問題なさそうです。composer install
composer installができませんでした。 アクセス権限の問題だと思い、アクセス権限777に変更しました。 アクセス権限に関しては下記の記事を参考にしました。 https://qiita.com/t-a-run/items/239ed690ece7a011804a下記、実行できました。
因みに、composer installはprojectフォルダで行いました。
compser install
この状態でアクセスするとデータベースエラーとブラウザに表示されます。
エラーの内容は、そのような(接続した)ファイルは見つからない。
database error(SQLSTATE[HY000] [2002] No such file or directory
mysql起動
mysqlを動作させます。 webコンテナに入った時、同様にdbコンテナに入ります。
service mysqld status
//mysqlの起動状態の確認
service mysqld start
//mysqlの起動
ログイン前に初期のユーザー名とパスワードを確認します。
DBコンテナ内でmysqld.logを確認します。
cat mysqld.log
A temporary password is〜に書いてあるユーザー名パスワードを取得。
ユーザー名:root
データベースにログインします。
docker exec -it コンテナID mysql -u root -p
パスワード再設定->データベース作製->テーブル作成をおこないます。
app.phpの設定
git clone時には、app.phpは含まれていません。作成しましょう。
-/
|- project
|- config
|-app.php
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
/**
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => 'root',
'password' => 'データベース作成時に設定したパスワード',
'database' => 'データベース作成時に設定したパスワード',
'port' => ポート番号,
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,
cat mysqld.log
A temporary password isに書いてあるパスワードを取得
->dbコンテナでmysqlをrestartし、ログイン->パスワード再設定->データベース作製->テーブル作成->
データベース接続
sequel proを使い、クイック接続にて接続テストを実行しました。 無事に接続完了しました。ブラウザでlocalhostと検索すると無事開けました。
参考資料
docker-compose.yml の内容を理解しよう
https://futureys.tokyo/lets-understand-contents-of-docker-compose-yml/
Docker compose ことはじめハンズオン
https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a
Dockerfileの書き方と使い方
https://blog.codecamp.jp/docker-file-how-to
起動中の docker コンテナのシェルに入る
https://qiita.com/sekizo/items/27cc9b406332afc674f6
データベース作製
https://noumenon-th.net/programming/2019/04/01/docker-entrypoint-initdb01/
chmodで設定する権限の書き方
https://qiita.com/irasally/items/6ebc3c68e22905fb7330