LoginSignup
1
3

More than 5 years have passed since last update.

LARADOCK で LARAVEL を開発しよう(Part 2)

Posted at

1. はじめに

前回、
https://qiita.com/nguyenngocpfievk56/items/8974e21daab795efc60e
パーツ1で、皆さんにDOCKERとLARADOCKを少し紹介しました。が、LARADOCKの設定手順についてはまだ書いてないので、今回、この記事で具体的にLARADOCKを設定しかた、使いかたを紹介したいと思います。

2. LARADOCK設定方法

例えば、NgCMusicというプロジェクトに参加しますが、NgCMusicの仕様が決められて、これから最初から開発します。
とりあえず、ngcmusicというフォルダーを作成します。ngcmusicの保存される場所はどこでも構いません。次、ngcmusicに遷移して、githubから、LARADOCKのソースコードをCLONEしましょう。

git clone https://github.com/Laradock/laradock.git

そうすると、ngcmusic/laradockの中にLARADOCKのソースコードが入るはずです。次のステップにいく前に、LARADOCKの構築について少し説明いただきます。

2.1: LARADOCKの構築

とりあえず、下の方のdocker-compose.ymlというファイルを見ましょう。

docker-compose.yml
version: '3'

networks:
  frontend:
    driver: ${NETWORKS_DRIVER}
  backend:
    driver: ${NETWORKS_DRIVER}

volumes:
  mysql:
    driver: ${VOLUMES_DRIVER}
  percona:
    driver: ${VOLUMES_DRIVER}
  mssql:
    driver: ${VOLUMES_DRIVER}
  postgres:
    driver: ${VOLUMES_DRIVER}
  memcached:
    driver: ${VOLUMES_DRIVER}
  redis:
    driver: ${VOLUMES_DRIVER}
  neo4j:
    driver: ${VOLUMES_DRIVER}
  mariadb:
    driver: ${VOLUMES_DRIVER}
  mongo:
    driver: ${VOLUMES_DRIVER}
  minio:
    driver: ${VOLUMES_DRIVER}
  rethinkdb:
    driver: ${VOLUMES_DRIVER}
  phpmyadmin:
    driver: ${VOLUMES_DRIVER}
  adminer:
    driver: ${VOLUMES_DRIVER}
  aerospike:
    driver: ${VOLUMES_DRIVER}
  caddy:
    driver: ${VOLUMES_DRIVER}
  elasticsearch:
    driver: ${VOLUMES_DRIVER}

services:

### Workspace Utilities ##################################
    workspace:
      build:
        context: ./workspace
        args:
        ------省略-----
      extra_hosts:
        - "dockerhost:${DOCKER_HOST_IP}"
      ports:
        - "${WORKSPACE_SSH_PORT}:22"
      tty: true
      environment:
        - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
      networks:
        - frontend
        - backend
   php-fpm:
      build:
        context: ./php-fpm
        args:
          - PHP_VERSION=${PHP_VERSION}
          - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG}
          - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
          - ------省略--------
   nginx:
      build:
        context: ./nginx
        args:
          - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
          - ------省略--------

docker-compose.ymlの内容は長いんですが、だいたい上記と同じです。
この記事を書いてる時点に、LARADOCKの最新バージョンは3なんですが、一番上に

version: '3'

と書いてあります。
次は、ネットワークの定義部分です:

ネットワーク部分
networks:
  frontend:
    driver: ${NETWORKS_DRIVER}
  backend:
    driver: ${NETWORKS_DRIVER}

DOCKERの基本知識なんですが、DOCKERのネットワークはNONE, HOST, BRIGDEと分けられますが、一番よく使ってるのは BRIDGEです。
詳細は、
https://docs.docker.com/network/
ここで参考してください。
ですげ、上記のソースコードに {NETWORKS_DRIVER} と書いてあります。これは、変数です。
docker-compose.ymlの中に、${〇〇}という書き方が結構でるが、全ては変数です。それらの値は、.envというファイルで代入されます。が、デフォルトで、CLONEされたLARADOCKに.envの代わりに、.env-exampleが入ります。その「.env-example」の内容をちょっと見ましょう。21,22行目に

.env-example
# All Networks driver
NETWORKS_DRIVER=bridge

と書いてあります。それを見ると、networksはBRIDGEタイプを使うのがわかります。

次に行きましょう。

docker-compose.yml
volumes:
  mysql:
    driver: ${VOLUMES_DRIVER}
  percona:
    driver: ${VOLUMES_DRIVER}
  mssql:
    driver: ${VOLUMES_DRIVER}
  postgres:
    driver: ${VOLUMES_DRIVER}
  memcached:
    driver: ${VOLUMES_DRIVER}
  redis:
    driver: ${VOLUMES_DRIVER}
  neo4j:
    driver: ${VOLUMES_DRIVER}
  mariadb:
    driver: ${VOLUMES_DRIVER}
  mongo:
    driver: ${VOLUMES_DRIVER}
  minio:
    driver: ${VOLUMES_DRIVER}
  rethinkdb:
    driver: ${VOLUMES_DRIVER}
  phpmyadmin:
    driver: ${VOLUMES_DRIVER}
  adminer:
    driver: ${VOLUMES_DRIVER}
  aerospike:
    driver: ${VOLUMES_DRIVER}
  caddy:
    driver: ${VOLUMES_DRIVER}
  elasticsearch:
    driver: ${VOLUMES_DRIVER}

ここで、VOLUMESを定義されます。VOLUMESは何かというと、基本にDOCKERのCONTAINERにはデータが保存できないので、HOST(サーバー、ローカル)のどこかと連携して、そこにデータを保存しないといけません。そんな連携はVOLUMESと呼びます。
上記のソースコードを見ると、実行されるCONTAINERは全て同じなVOLUMESを使うのがわかります。なぜかというと、一つのシステムなので各CONTAINERは他のCONTAINERとデータを共有したいからです。 {NETWORKS_DRIVER} と同じく、.env-exampleを見たら、${VOLUMES_DRIVER}の値がわかります。

docker-compose.ymlの残る部分は、全ての使えるCONTAINERの定義です。それらの中に、workspaceというCONTAINERも入ってます。このCONTAINERで、他のCONTAINERを管理できます。

ここまで、docker-compose.ymlのことがなんとなくわかるでしょうか。
LARADOCKの中に、たくさんのフォルダーも入ってますね、nginx, php-fpm, mysql, phpmyadmin などです。それぞれの中に、DockerfileとDockerのimgのconfigファイルが入ります。

2.2: LARADOCKの設定を続きます

laradockフォルダの中に、

cp env-example .env

を実行して、.envを作成します。
LARAVELの開発するため、workspace, nginx, mysqlが必要で、

docker-compose up -d nginx mysql workspace

で起動できます。
phpmyadminを使いたい場合、

docker-compose up -d nginx mysql workspace phpmyadmin

を実行します。
そうしたあとで、
http://localhost:8080/
でphpmyadminにアクセスできるようになります。

次は、LARAVELのソースコードを作成しましょう。
workspaceに入るため、

docker-compose exec workspace bash

を実行します。
workspaceに、もうPHPとCOMPOSERが入ってるので、

composer create-project laravel/laravel --prefer-dist ngcmusic_project

で、プロジェクトを作成できます。
そうしたあとで、ngcmusicのしたに、laradockだけでわなく、ngcmusic_projectというフォルダも入ります。ngcmusic_projectにLARAVELのソースコードがちゃんと入るはずです。

次、プロジェクトを実行できるように、.envを開いて、8行目を

APP_CODE_PATH_HOST=../ngcmusic_project/

に修正します。
一回、RUNしてるCONTAINERを

docker-compose down

で全てSTOPして、

docker-compose up -d workspace nginx mysql phpmyadmin

で再起動しましょう。
そうすると、今
http://localhost/
でLARAVELのソースコードを確認できます。

今回は、ここにおしまいいただきたいと思います、次のパーツで、LARADOCKのカスタマイズについて説明します。

3. 結論

LARADOCKでたくさん便利なDOCKERのIMAGEを集めて、DOCKER-COMPOSEで簡単に管理して、使うことができます。

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