LoginSignup
3
1

More than 3 years have passed since last update.

Docker ComposeでMac上にLaravel+MySQL+phpMyAdmin環境構築

Last updated at Posted at 2019-11-22

参考にさせていただいた記事

用意するもの

  • Mac
  • Composer(Homebrewとかで入れる)
  • Git
  • Docker Desktop for Mac
  • VisualStudio Code(以下、VScode)

環境構築手順

まず、適当な場所にDocker環境用のディレクトリを作成してそれをVScodeで開く。(今回は仮の環境ディレクトリ名をdocker_lampとする)

Dockerのファイル構成

 ├─ docker-compose.yml
 ├─ apache2
 │   └── apache2.conf
 ├── html
 ├── mysql
 ├── php
 │   ├── dockerfile
 │   └── php.ini
 └── phpmyadmin

各ファイルの記述内容

・ docker-compose.yml

docker-compose.yml
version: '3'
services:
  php:
    build:
      context: ./php
      dockerfile: dockerfile
    volumes:
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
      # apache2.confを外に出していないと、コンテナにexecした状態で編集して記述ミスしてhttpdが起動しなくなるとコンテナに入れず詰んでしまう
      - ./apache2/apache2.conf:/etc/apache2/apache2.conf 
    ports:
      - 8000:80
    links:
      - mysql:mysql
    restart: always
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - 13306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root  # rootパスワード
      - MYSQL_DATABASE=hogeDB # 初期構成時の標準DB
      - MYSQL_USER=root # 〃の標準ユーザーのユーザー名
      - MYSQL_PASSWORD=root # 〃の標準ユーザーのパスワード
    restart: always
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root # mysqlの接続ユーザーのユーザー名
      - PMA_PASSWORD=root # mysqlの接続ユーザーのパスワード
    links:
      - mysql
    ports:
      - 4000:80
    volumes:
      - ./phpmyadmin/sessions:/sessions
    restart: always

・ php.ini

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

・ dockerfile

最後にapache2を再起動させてるから初回起動時はphpコンテナだけ別途起動する必要有。

php/dockerfile
FROM php:7.3-apache
RUN apt-get update && \
  docker-php-ext-install pdo_mysql mysqli mbstring && \
  apt-get install -y vim && \
  a2enmod write && \
  service apache2 restart

・ conf

元あったもののコメント消して短くしてvar/www/htmlへの設定項目増やした。

apache2/apache2.conf
DefaultRuntimeDir ${APACHE_RUN_DIR}

PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

AccessFileName .htaccess

<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

コンテナ構築+操作

$ cd docker_lamp
$ docker-compose up -d

VScodeにDockerの拡張機能をインストール。
https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker

インストールすると、VScodeサイドバーにDockerのアイコンが出てくるのでそれをクリック。
そうすると、Containersという欄に↑で起動したコンテナ3種が見える。
あとは各コンテナ名を右クリックしてAttach Shellなりお好きにどうぞ。

phpの実行環境へはlocalhost:8000、
phpMyAdminへはlocalhost:4000でアクセスする。

LinuxKitの初期状態のままだと、BashのTab補完が大文字小文字を区別してしまう…
対策→Bash の Tab 補完でファイル名の大文字・小文字を区別しないようにする

Laravelの環境構築

Macのローカル環境からdocker_lampにいる状態で、laravel_testという名前のLaravelアプリを作って以下のコマンドを打っていく。

$ composer create-project laravel/laravel laravel_test --prefer-dist
$ cd laravel_test
$ composer install
$ chmod -R 777 storage/
$ chmod 777 bootstrap/cache/
$ cp .env.example .env
$ php artisan key:generate
$ php artisan config:clear

cpコマンドで作成した.envファイルを開き、DB系の値を以下の様に設定する。

~
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=hogeDB
DB_USERNAME=root
DB_PASSWORD=root
~

これでDB接続完了。(docker-composeでコンテナ間通信する場合、ホスト名がコンテナ名になる)

あとは、

  • php artisanの操作はコンテナ内
  • gitの操作はvscode(Macのローカル内)
  • composerの操作はMacのローカル内

で制作していく。

3
1
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
1