新卒ができるだけ噛み砕きながら書くdocker+apache+laradock+laravel環境構築

## はじめの一言
今回始めて投稿させていただきます。
会社に入社してから初めて仮想環境の構築、docker等を使うようになりました。
様々なサイトを見て回って知った知識、
せっかくなので家で復習的な感じで作った方法をまとめたいと思います。
後半、力不足の箇所があります…。Apacheィ……。
初心者の方でもわかる、できるだけ噛み砕いたつもりです。
わからないこともまだまだ多いので、おかしな所とか間違っている事があったら優しく突っ込んでください…。

Gitをコマンドプロンプトで使ったりする方法とか、
これを使ってサンプルプログラムを作るのは機会や気が向いたら書きますね。

## 前提となる仕様ツール/環境
・ Windows10 Pro
・ Git Version 2.19.0.windows.1　(Gitをコマンドプロンプト上で使うために使用)
・ docker Version 18.09.0　(仮想環境 / 使用OSによってインストールするソフト等が異なる)
　 (参考サイト：https://terakoya.site/web/docker-windows-php-laravel5-setup/)
・ Laravel5.7

## 初めに
### コマンドプロンプト(またはWindowsPowerShell)を使い、環境構築を行います。
コマンド系の箇所で（）内は機能説明なので、環境構築時にコピーしなくていいです。
また、以下のようになっている箇所は > , # 以降を記載すれば大丈夫です。
(下記の例だと〇〇の部分)

```
～ > 〇〇
～ # 〇〇
```

### 使用する基本的なコマンドについてご紹介

```
cd 〇〇
（〇〇へ移動する
　参考サイト：https://www.garunimo.com/program/linux/cd.php ）

cp 〇〇 △△
（〇〇を△△という名前でコピーする
　　〇〇＝コピー元ファイル名
　　△△＝コピーしたファイルの新規名前
　参考サイト：https://eng-entrance.com/linux_command_cp ）

md 〇〇
（〇〇という名前のフォルダを作成する
　参考サイト：https://jj-blues.com/cms/command-mkdirmd/ ）
```  
ここで紹介したコマンドはコマンドプロンプトで元々使えることができるコマンドです。
覚えると色々なサイトを調べたりするときに、コマンドについて調べずに済み、楽になれます！！！

また、既に存在するファイル・フォルダを指定するときにはTabキーを使うのがオススメです。
入力補完をしてくれます！とても楽になります！！覚えると幸せになれます！！！
詳しくは参考サイトを見てください。
（参考サイト：https://linuxfan.info/bash-completion）

-----

## 環境構築  

### ファイル構成
```
/Project
　├── laravel
　└── laradock
```  
今回は上記のようなファイル構成で作ります。
まずはコマンドプロンプトで空のProjectファイルを作り、移動します。

```
E:\docker> md Project (Projectファイルを作成)
E:\docker> cd Project
E:\docker\Project>
```  
＞ から左側が自身のいる場所です。
上記のようになっていれば無事に移動が行えています。
任意の場所に移動してからフォルダの作成をしてください。

### Laradock設定
１．プロジェクトフォルダ内でGitコマンドを実行し、laradockをクローン(コピー)します。

```
E:\docker\Project> git clone https://github.com/Laradock/laradock.git
（git clone https://github.com/Laradock/laradock.git 〇〇
　とすると〇〇という名前のlaradockが作成されます）
```  
２．laradockフォルダ内に移動し、env-exampleファイルをコピーし、コピーしたファイルを.envへ名前を変更します。

```
E:\docker\Project> cd laradock
E:\docker\Project\laradock> cp env-example .env
```
Ｑ：なんで.envなの？
Ａ：そういうふうになってるから…お約束的な…

上記のコマンドでlaradockフォルダ内に.envファイルが作られます。
この後もコマンドプロンプトを使うので、ここで閉じずにいてください。

３．.envファイル内を下記のように編集します。
適当なメモ帳やエディタ等で開き、書き換えを行ってください。
(上段の内容を下段の内容に変更)

```
APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../laravel/

DATA_PATH_HOST=~/.laradock/data
DATA_PATH_HOST=.laradock/data

COMPOSE_PROJECT_NAME=laradock
COMPOSE_PROJECT_NAME=test-laradock
(プレフィックスを変更)

MYSQL_VERSION=latest
MYSQL_VERSION=5.7
```
それぞれの書き換えた意味の説明
>APP_CODE_PATH_HOST
　webサーバーを立ち上げたときに見に行くフォルダの設定
　現在地(laradockフォルダ内)からのフォルダパスを書くこと
　今回の場合、１つ上の階層のlaravel内を見に行くので上記のようになる

>DATA_PATH_HOST
　仮想環境で作られるデータの保存場所の指定(dockerのstorage等の保存先の変更)
　変更しないと、複数の仮想環境を作ったときに同じデータを参照してしまう
　上記のように書き換えると現在地に.laradock/dataフォルダが作成され、中にデータが保存されるようになる

>COMPOSE_PROJECT_NAME
　dockerのコンテナ名を指定する
　変更しないと、複数の仮想環境を作ったときに設定が引き継がれてしまう
　他のコンテナ名と被らない命名にしてください

>MYSQL_VERSION
　laravelで使うMySQLのバージョンを指定してください
　今回は5.7で作ります

４．コマンドプロンプトに戻り、laradockフォルダ内でコマンドを実行しコンテナを起動します。

```
docker-compose up -d apache2 mysql phpmyadmin workspace
```
Ｑ：コンテナってな～に？
Ａ：dockerの機能名です。
　　詳しくは参考サイト見てください。
　　（参考サイト：https://student-engineer.net/docker-container/）

初回起動時には時間がかかりますが、２回目以降はあまり時間がかかりません。
下記のように表示されればコンテナの立ち上げは終了です。
test-laradockの箇所にはCOMPOSE_PROJECT_NAMEで指定した名前が入ります。

```
Starting test-laradock_docker-in-docker_1 ... done
Starting test-laradock_mysql_1            ... done
Starting test-laradock_workspace_1        ... done
Starting test-laradock_phpmyadmin_1       ... done
Starting test-laradock_php-fpm_1          ... done
Starting test-laradock_apache2_1          ... done
```
５．無事に起動できたか確認
docker-compose ps　コマンドを入力し、下記のように表示されるか確認してください。
Stateの欄がUpになっていれば無事にコンテナを立ち上げる事ができています。

```
E:\docker\Project\laradock> docker-compose ps
指定されたパスが見つかりません。
              Name                            Command               State                     Ports
---------------------------------------------------------------------------------------------------------------------
test-laradock_apache2_1            /opt/docker/bin/entrypoint ...   Up       0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
test-laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up       2375/tcp
test-laradock_mysql_1              docker-entrypoint.sh mysqld      Up       0.0.0.0:3306->3306/tcp, 33060/tcp
test-laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up       9000/tcp
test-laradock_phpmyadmin_1         /run.sh supervisord -n           Up       0.0.0.0:8080->80/tcp, 9000/tcp
test-laradock_workspace_1          /sbin/my_init                    Up       0.0.0.0:2222->22/tcp
```
次にWebサーバーを確認します。
下記のURLにアクセスし、画像ようなページが表示されるのを確認してください。
http://localhost/
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/320059/9795ce52-4b05-f89e-4eaa-5e08378a9f66.png)
表示されれば問題ないです。
次に進みます。

### Laravel設定

１．先程立ち上げたworkspaceコンテナに入る
workspaceはLaravelに必要なツールを一式用意してくれます。
本来ならcomposerなど他にも準備しないといけないものがあるのですが、一括で準備してくれています。
とっても良い子、優しい子。今日もよろしくおねがいします。
なので、コマンドを叩く時はworkspaceを通して使うことになります。

```
E:\docker\Project\laradock> docker-compose exec workspace bash
root@数字と英語が混ざっている文字列:/var/www#
```
/var/www#　が表示されればworkspaceに入っています。
今までと表示形式が変わりますが、合っている挙動なので安心してください。
【数字と英語が混ざっている文字列】は人によって変わるのでぼかす表現にしています。


２．workspace内でcomposerを利用してLaravelの新規プロジェクトを作成します。

```
root@数字と英語が混ざっている文字列:/var/www# composer create-project --prefer-dist laravel/laravel
```
少し時間がかかりますが、これでlaravelが導入できました。
バージョン指定等は公式のcomposerを使う方法のインストール項目を参考にしてください！

３．http://localhost/
に再度アクセスしてください。
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/320059/1392e9bb-b22e-66ad-0621-9dee46edd154.png)

laravel/をクリックしてください。
次の画像が表示されます。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/320059/bc9283a7-ca18-2641-d23f-fb3f0a6306bd.png)
public/をクリックしてください。
![キャプチャ4.PNG](https://qiita-image-store.s3.amazonaws.com/0/320059/7e5c1eaf-18df-3d6b-8f10-8854019dae12.png)
laravelのTOP画面が表示されれば完了です！

-----

## おわりの一言
ホントはIndex of /のページを表示せずLaravelのTOP画面を表示したかったのですが、力足りず…。
普段はnginx使ってるので、家でApacheチャレンジをしたのですが…(´・ω・`)
またちょこちょこいじってうまく行ったら修正します…！！
おすすめページあったら教えてください！！！！
長くなりましたが、お付き合いくださりありがとうございました。