DockerでLaravel9作成メモ

なんだかLaravel8のサポート期限もあるので，Laravel9を立ち上げてみたら，Jetstreamが面倒でした．

### 環境
MacとVSCODEつかってます．

### 特記事項
Jetstream Team版を入れる前提です．npmのあたりが面倒でした．

### フォルダとファイル構成
```
myapp
├── Docker（←これはファイルですね）
│   ├── App
│   │   ├── 000-default.conf
│   │   ├── Dockerfile
│   │   └── php.ini
│   └── DB
├── docker-compose.yml
└── src
```



### Dockerfile　よーしどんなPCケースにしようかなぁ
Dockerfileってなんとなく「秋葉原でパーツを買ってPC組み立てるよ！おっとそのスペックはこれね！」みたいな設定かな．組み立てはビルドって言ってもうちょい後．

で，これはケースの設定と思えばいいかな．

```Dockerfile:Dockerfile
FROM php:8.1-apache-bullseye
EXPOSE 5173

ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql

RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

RUN curl -sL https://deb.nodesource.com/setup_19.x | bash -
RUN apt-get install -y nodejs
```
たしか，node19を入れる設定がJetstreamがらみだったと思います．

### 000-default.conf　パーツの設定かな1
パーツ買いに秋葉原に行くんだけど，設定（1）はこれね．たぶんApacheの設定だと思う．

```000-default.conf
<VirtualHost *:80>
       ServerAdmin laravel@localhost
       DocumentRoot /var/www/html/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       <Directory /var/www/html/public>
           AllowOverride All
       </Directory>
</VirtualHost>
```

### php.ini　パーツの設定かな2
秋葉原に買いに行くパーツはこの設定ねその（2）みたいなの．phpの設定やね．

```php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
default_charset = "UTF-8"
mbstring.language = "Japanese"
```

### docker-compose.yml　パーツの設定かな3
秋葉原に買いに行くパーツはこの設定ねその（3）みたいなの．パーツの組み立て手順書はみたいなのかな．

```docker-compose.yml
# docker-composeのバージョン
version: '3.9'

services:
 # アプリの設定
 app:
   #コンテナの名前をここで決めます。
   container_name: myapp
   #ポート番号の設定　5173はvite関係で必用
   ports:
     - "8000:80"
     - "5173:5173"
   # Dockerfileの場所
   build: ./Docker/App
   # この中にLaravelを構築する設定（Laravelインストはまだ）
   volumes:
     - ./src:/var/www/html
 # MySQLの設定
 db:
   #Docker HubからMySQLをとってきます。Lravael9はmysql8以上だったかな
   image: mysql:8.0
   # コンテナ名の指定（.envで使うよ）
   container_name: my_db
   # MySQLの設定
   environment:
     MYSQL_ROOT_PASSWORD: root
     MYSQL_DATABASE: my_database
     MYSQL_USER: mydbuser
     MYSQL_PASSWORD: mydbpass
     TZ: 'Asia/Tokyo'
   command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
   volumes:
     - ./Docker/DB/volume:/var/lib/mysql
     - ./Docker/DB/my.cnf:/etc/mysql/conf.d/my.cnf
   ports:
     - 13306:3306

```

### Dockerのビルド

Dockerのビルドって秋葉原行って買ってきたぞー．よしお家帰ってきたぞー．
じゃ，組み立てるぞーみたいなイメージかな．

docker-compose.ymlのあるディレクトリで，

`docker-compose up -d --build`

をします．これで，DockerにPC作られたよ！でもソフト入ってないよ〜

### Compose使ってLaravelをインストール

PC起動できた（Dockerにコンテナが立ち上がった）！
そしたら，なんかソフトインストールしよう．
じゃ，起動できたPC内で作業すっからここからDockerの中のコマンドラインで実行です．

pwd打って現在のディレクトリがhtmlの中なのを確認して，Dockerでコマンドラインに入ります．

そこで，

`composer create-project "laravel/laravel=" . --prefer-dist`

をします．これでは最新版が入ってしまうので，バージョン8の指定したい場合は，

`composer create-project "laravel/laravel=8.*" . -prefer-dist`

にします．

### 確認
http://localhost:8000/　
にアクセスしてLaravelの画面が現れていたらまずは完了です．右下のバージョンを確認してみてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221026/d8576567-36c3-967c-30eb-3989ca7417a6.png)