あああああああああああああああ

うわあああああああああああ

Docker ComposeでLaravel+MySQLの開発環境を構築しよう!

この記事はValtech (バルテック) Advent Calendar 2016 - Adventar18日目の記事です。
業務でdockerを触る機会があったので、勉強がてら昔作ったLaravel+MySQLのアプリをDocker化してみました。

Docker Compose は、複数のコンテナを構築できるツールです。
コンテナの設定ファイルdocker-compose.ymlをプロジェクト直下に置き
docker-compose upでコンテナを作成して起動します。

Docker for Mac のインストール

私の環境はmacOS Sierraです。Windowsの人はfor Windows入れたら良いです。
Docker for Macをインストールすると、docker-composeコマンドも使えるようになります。

Dockerfileの作成

FROM php:7.1
RUN apt-get update \
    && apt-get install -y libmcrypt-dev \
    && docker-php-ext-install pdo_mysql mysqli mbstring mcrypt
EXPOSE 8000
FROM
元になるイメージを指定します。今回は公式のPHP7.1のイメージを使用します。
RUN
コマンドを実行します。mysqlに接続するためのドライバーを入れています。
EXPOSE
ポートを解放します。

他にも色々な命令があるのでDockerfileのリファレンスを参考にしてください。

docker-compose.ymlの作成

version: '2'                    #バージョン2のフォーマットで記述
services:
  web:
    build: .                    #Dockerfileをみてコンテナを作る
    ports:
     - "8000:8000"              #ホスト:コンテナ
    volumes:
     - .:/code                  #ホストのカレントディレクトリをコンテナの/codeにマウントする(ホスト:コンテナ)
    command: bash -c 'cd /code && php artisan migrate && php artisan serve --host=0.0.0.0'
                                #laravelのサーバーを起動する
    environment:                #環境変数を追加
      - DB_HOST=mysql           #servicesのmysql
    container_name: sample-web

  mysql:
    image: mysql:5.7            #mysql5.7のコンテナイメージ
    environment:
      - MYSQL_DATABASE=dbname
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql
    container_name: sample-db

volumes:
  db-data:
    driver: local

コンテナで起動したアプリサーバー(web)にホストからアクセスするためにホスト名を0.0.0.0する必要があります。
参考サイト


まとめ

  • Dockerfile
  • docker-compose.yml

の2ファイルを用意してdocker-composeコマンドさえ使えるようにすれば
docker-compose upで自動でPHPMySQLのイメージをDLしてアプリが使えるようになります。

簡単だね!

おわり