Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[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

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

tosite0345
Laraveler。 たまにLTやってます。
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away