はじめに
ふと思い立って、おもしろそうだったのでDockerを入れてみました。
ついでにLaradockも試してみた。標準的なログイン画面を実装するところまでやってます。
今回はローカル環境を汚したくなかったのでVM上にDockerを入れてそこでコンテナを立ち上げています。
環境
項目 | 内容 |
---|---|
マシン | VirtualBox + vagrant上にCentOS7.4を準備 |
CentOS | CentOS Linux release 7.4.1708 (Core) |
Docker | Docker version 18.06.0-ce, build 0ffa825 |
docker-compose | docker-compose version 1.17.1, build 6d101fb |
手順
VMの準備
mkdir docker-sample
cd docker-sample
vagrant box add centos/7
vagrant init centos/7
vim Vagrantfile
- # config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"
vagrant up
Dockerの準備
sudo su
# 必須パッケージインストール
yum install -y yum-utils device-mapper-persistent-data lvm2
# リポジトリ追加
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yumパッケージインデックスの更新
yum makecache fast
# 最新版のインストール
yum install docker-ce
# サービス起動
systemctl start docker
# 念のためバージョンチェック
docker -v
# 自動起動
systemctl enable docker
# 毎回sudoしなくていいように権限を変更
groupadd docker
usermod -aG docker $USER
# 2018-08-13 追記:
gpasswd -a $USER docker
参考:CentOS7にDockerをインストールする
この段階ですでにDockerは利用可能になりました。
今回はLaravel用のコンテナ、 laradock
を入れたかったので更に作業を続けます。
docker-composeの準備
curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > docker-compose
mv docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
参考:CentOS7.3にDocker Composeまでインストール
私の場合、ここで一旦VMを再起動する必要がありました。
vagrant halt
vagrant up --provision
# 念のためにバージョンチェック
docker-compose -v
laradockのクローン
sudo yum install git
git clone https://github.com/LaraDock/laradock.git
cd laradock
# docker-conposeの環境ファイルを準備
cp env-example .env
# 立ち上げ
docker-compose up -d nginx mysql
# dockerイメージにvagrantとしてログインする
# NG :
# docker-compose exec workspace --user:vagrant bash
# OK :
docker-compose exec --user {uid} workspace bash
# 参考:uidの調べ方
whoami
# > vagrant
id vagrant
# > 1000
ご指摘いただいたwebazarashi さん、ありがとうございました!
サンプルプロジェクトの作成・設定
# ワークスペース内にLaravelサンプルアプリを作成する
composer -V
composer create-project laravel/laravel sample
ドキュメントルートの設定を行う。
今回はLaravelのenvファイルではなく、laradockのenvファイルを編集する点に注意
cd laradock
vim .env
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../sample
# 一度コンテナを再起動する
docker-compose stop
docker-compose up -d nginx workspace mysql
試しに接続してみる
ローカル側のブラウザから試しにつないでみましょう。
http://192.168.33.10
と叩けばつながるはず。
DBの設定を行う
普段だったらここで php artisan migrate
を叩きたいところなんですが、DBの設定を変えないとうまく通りません。
…話を統合すると、
- docker側のenvファイルとプロジェクト側のenvファイルをMySQLのコンテナに合わせる必要がある
- MySQL8.x系はユーザー認証方法が変わっており、設定を変更しないとmigrateできない
ということみたいです。
ちなみにMySQLのコンテナバージョンを落とそうとしたらエラーでうまくできませんでした。
ので、今回はMySQLは8.xのままで構築します。
それぞれ対応していきます。
ちなみに:その時のエラー
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknownto the client (SQL: select * from information_schema.tables where table_schema = blog and table_name = migrations)
docker-compose exec mysql bash
/* MySQLにログイン */
mysql -u root -p
/* ユーザーリスト取得 */
SELECT user, host, plugin FROM mysql.user;
/*
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| default | % | caching_sha2_password | → mysql_native_password へ
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
*/
/* 認証方式の変更 */
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'*' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
/* 標準で使用するDBを作成する */
CREATE DATABASE sample_db;
SHOW databases;
exit
vim sample/.env
DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
+ DB_HOST=mysql
DB_PORT=3306
- DB_DATABASE=homestead
+ DB_DATABASE=sample_db
- DB_USERNAME=homestead
+ DB_USERNAME=root
- DB_PASSWORD=secret
+ DB_PASSWORD=root
一度コンテナを再起動
docker-compose stop
docker-compose up -d nginx mysql workspace
マイグレーション実行
docker-conpose exec workspace bash
php artisan make:auth
php artisan migrate
…できた!これでひとまず環境はできました。