Edited at

[Docker]Dockerを触ってみたついでにLaradockも試してみた話

More than 1 year has passed since last update.


はじめに

ふと思い立って、おもしろそうだったので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の準備


local_console

mkdir docker-sample

cd docker-sample

vagrant box add centos/7
vagrant init centos/7
vim Vagrantfile



Vagrantfile

- # config.vm.network "private_network", ip: "192.168.33.10"

+ config.vm.network "private_network", ip: "192.168.33.10"


local_console

vagrant up



Dockerの準備


centos_console

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の準備


centos_console

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を再起動する必要がありました。


local_console

vagrant halt

vagrant up --provision


centos_console

# 念のためにバージョンチェック

docker-compose -v


laradockのクローン


centos_console

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 さん、ありがとうございました!


サンプルプロジェクトの作成・設定


workspace_console

# ワークスペース内にLaravelサンプルアプリを作成する

composer -V
composer create-project laravel/laravel sample

ドキュメントルートの設定を行う。

今回はLaravelのenvファイルではなく、laradockのenvファイルを編集する点に注意


centos_console

cd laradock

vim .env


laradock/.env

- APP_CODE_PATH_HOST=../

+ APP_CODE_PATH_HOST=../sample


centos_console

# 一度コンテナを再起動する

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)



centos_console

docker-compose exec mysql bash



mysql_console

/* 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



centos_console

vim sample/.env



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


一度コンテナを再起動


centos_console

docker-compose stop

docker-compose up -d nginx mysql workspace


マイグレーション実行


centos_console

docker-conpose exec workspace bash



workspace_console

php artisan make:auth

php artisan migrate

…できた!これでひとまず環境はできました。