参考にさせていただいた記事
用意するもの
- 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
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
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
・ dockerfile
最後にapache2を再起動させてるから初回起動時はphpコンテナだけ別途起動する必要有。
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への設定項目増やした。
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のローカル内
で制作していく。