はじめに
書くネタがなかったのでニッチかもしれませんが、タイトルの通りRails+Laravel+MySQLのDocker環境を構築してみました。突貫で構築したので所々至らぬ点や改善点があるかと思いますのでお手柔らかにアドバイス頂けると助かります
ちなみにチャンプルーとは沖縄の方言で『ごちゃまぜ』という意味です
環境
macOS Catalina 10.15.7
Docker 19.03.13
Compose 1.27.4
Rails 6.0.3(Ruby 2.7.0)
Laravel 7.30.0(PHP 7.2.34)
フォルダ構成
.
├── laravel_app
│ ├── laravel
│ │ ├── app
│ │ ...
│ └── Dockerfile
├── rails_app
│ ├── app
│ ├── bin
│ ...
│ └── Dockerfile
└── docker-compose.yml
Rails+MySQL環境
以前書いた記事を参考に構築しました
RubyをインストールせずにDockerでRails環境を構築する
※変更点としてはフォルダパス(rails_app)が変わっているのとサービス名をRailsとLaravelでわかりやすいように変えています。あとはほとんど記事と同じ手順でRails+MySQL環境は構築出来ました
version: '3'
services:
rails6:
build: ./rails_app/
environment:
RAILS_ENV: development
TZ: Asia/Tokyo
ports:
- '3000:3000'
volumes:
- ./rails_app/:/usr/src/app
depends_on:
- database
Laravel環境
まず、Laravel用のDockerfileを用意します。
FROM php:7.2-fpm
# install composer
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
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html
次に、docker-compose.ymlにphpの部分を追記します。
version: '3'
services:
php:
build: ./laravel_app/
volumes:
- ./laravel_app/:/var/www/html
ports:
- '8000:8000'
depends_on:
- database
rails6:
...
ここで一度buildを行い、ComposerでLaravelプロジェクトを作成します。
$ docker-compose up -d --build
$ docker-compose exec php composer create-project --prefer-dist laravel/laravel ./laravel
これでlaravel_appフォルダ内にlaravelプロジェクトが作成されますのでMySQL接続情報を設定します。
DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=app_development
DB_USERNAME=root
DB_PASSWORD=password
最後にLaravelのビルトインサーバを起動するコマンド(php artisan serve)をDockerfileに定義して完成です。
FROM php:7.2-fpm
# install composer
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
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html/laravel
EXPOSE 8000
CMD ["php","artisan","serve","--host","0.0.0.0"]