3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerでlaravelの環境構築

Posted at

エンジニア歴約半年ほどの駆け出しエンジニアです。
今回も中々苦労した環境構築についての備忘録を自分用に残したいと思います。
他サイトやlaravelのチュートリアルを参考に環境構築をしたかったのですが、どれを見てもエラーが出て最後まで構築できなかったので自分なりにDockerを使ったlaravelの環境構築についてまとめてみました。
まだdocker、laravelとともに知識が浅いので間違っていましたらご指摘いただけますと幸いです。

①作成したディレクトリの中にフォルダを作成

ディレクトリ構造↓
(見えにくかったらすみません)

📁practice
└ 📁docker
  ├ 📁app
  │ ├ Dockerfile
  │ ├ php.ini
  │ └ 000-default.conf
  ├ 📁db
  │ ├ 📁data
  │ └ my.conf
  ├ 📁src
  └ docker-compose.yml

②Dockerfileに以下を記述

# どんな docker イメージを利用して構築をするか
# FROM : ここではPHPの公式イメージである「php:7.4-apache」というあらかじめPHPとApacheがインストールされているイメージを、Docker Hubというサイトからダウンロードしてくるようになっている。
FROM php:7.4-apache

# 設定ファイルをdockerコンテナ内のPHP、Apacheに読み込ませる
# ADD:ローカルのファイルをDockerコンテナ内にコピーする
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

# Composerのインストール
# RUN:コンテナ内でコマンド実行する
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

# Laravelで必要になるmodRewriteを有効化する
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

# composerコマンドを使えるようにする
COPY --from=composer /usr/bin/composer /usr/bin/composer

③000-default.confのに以下を記述

<VirtualHost *:80>
       ServerAdmin webmaster@localhost
        //my-projectの部分は書き換え
       DocumentRoot /var/www/html/practice/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
        //my-projectの部分は書き換え
       <Directory /var/www/html/practice/public>
           AllowOverride All
       </Directory>
</VirtualHost>

④php.iniに以下を記述

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

⑤my.cnfに以下を記述

[mysqld]
character-set-server=utf8

⑥docker-compose.ymlに以下を記述(docker-composeの設定を行う)

# Compose fileのバージョン指定
version: '3'

# どんなコンテナを立ち上げるか
services:

 # ---------------------------------
 # laravelを動かすコンテナ
 # ---------------------------------
 app:
   # どのポートを開いて繋ぐか。下記はコンテナの80番ポートを開いて、ホストの80番につなぐ
   ports:
     - "80:80"
   # 先ほど作ったDockerfileを使って、コンテナをビルドするという指定
   build: ./docker/app
   # コンテナの名前を指定
   container_name: my-project
   # ローカルのディレクトリとコンテナ上のディレクトリのリンクを設定
   # ./src は docker-composer.yml のディレクトリ直下にある src を設定している
   # コンテナが作成されると src ディレクトリからコンテナの /var/www/html にアクセスすることができる
   volumes:
     - ./src:/var/www/html

# ----------------------------------
# MySQLを動かすコンテナ
# ----------------------------------
 db:
   # Docker HubからMySQL5.7の公式イメージをダウンロードしてくる指定
   image: mysql:5.7
   container_name: my-project-db

   # コンテナ内の環境変数を指定。環境変数を渡すとビルド時に設定してくれるDockerイメージがあるので、利用の際はDocker Hubのサイトで確認する
   environment:
     MYSQL_ROOT_PASSWORD: root
     MYSQL_DATABASE: laravel_db
     MYSQL_USER: laravel_user
     MYSQL_PASSWORD: laravel_pass
     TZ: 'Asia/Tokyo'

   # 起動時のコマンド
   command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
   # ディレクトリ同期。設定ファイルとMySQLのデータが保存される場所を同期している。コンテナは基本的に起動時に変更されてもコンテナ自体が止まるとデータが消えてしまうため、保存しておきたいものはホストマシンと同期しておく必要がある。
   volumes:
     - ./docker/db/data:/var/lib/mysql
     - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
   ports:
     - 3306:3306

⑦Docker Composeでコンテナを立ち上げる

ディレクトリ直下にあるフォルダに移動(ここでDockerを起動しておく)

practiceディレクトリに移動

cd practice

Dockerイメージを作成

docker-compose build

-dでバックグラウンドを起動

docker-compose up -d

起動しているコンテナの確認

docker ps

//コンテナの中に入る

docker-compose exec app bash

⑧laravelプロジェクトの作成

ここではsrcディレクトリの中にlaravelプロジェクトが作られます

laravelプロジェクトの作成

composer create-project laravel/laravel プロジェクト名 "バージョンを指定する場合は記述"

laravelプロジェクトに移動

cd プロジェクト名

ストレージの権限変更

chmod 777 -R storage/

暗号化キーの生成

php artisan key:generate

ここまで来たらローカルホストへ接続をします。
ローカルホストに接続
http://localhost/

作業が終わったらコンテナの停止をします

docker-compose stop

補足
開発環境を一旦クリーンにして、一から作り直したい場合

docker-compose stop
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?