#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というファイルを見ましょう。
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行目に
# All Networks driver
NETWORKS_DRIVER=bridge
と書いてあります。それを見ると、networksはBRIDGEタイプを使うのがわかります。
次に行きましょう。
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で簡単に管理して、使うことができます。