LaravelをDockerで立ち上げるって、正直めんどくさくないか?
Dockerよくわかっていないやつ(俺も含めて)のために、チーム開発の際にLaravelをDockerで立ち上げるためのサンプルコードや実際の立ち上げ方を記録してみた。
環境
OS | Ubuntu 18.04 |
Docker version | 19.03.12 |
前提
Docker及びdocker-composeのコマンドはインストール済みという想定で進める。
まだっていう人は公式とかQiitaとかみればいいんじゃないっすかね?
とりあえず公式
https://docs.docker.com/get-docker/
https://docs.docker.jp/compose/install.html
準備:GitHubリポジトリのインストール
とりあえずは俺が作ったこのリポジトリ(https://github.com/smithshiro/my-laravel-docker-env)をインストールしてくれ、話はそれからである。
構築
generate_local_idsを実行
生成したコンテナにホスト側のユーザID、ユーザグループを生成するために以下コマンドを実行
1 |
$ sh generate_local_ids.sh |
すると.envが生成される。
docker-composeでコンテナを立ち上げる
Nginx, PHP-fpm, MySQL, node(あとでnpmとか使いそうだし・・)のサービスコンテナを立ち上げる。
1 |
$ docker-compose up -d |
docker-compose.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
version: '3' services: nginx: image: nginx:latest ports: - 8000:80 volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf - ./project:/var/www/html/project depends_on: - php php: build: context: ./docker/php dockerfile: Dockerfile args: UID: $UID GID: $GID UNAME: $UNAME volumes: - ./project:/var/www/html/project env_file: - ./.env tty: true depends_on: - mysql node: image: node:lts tty: true volumes: - ./project:/var/www/html/project mysql: image: mysql:8 environment: MYSQL_DATABASE: homestead MYSQL_USER: homestead MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root ports: - 13306:3306 volumes: - mysql-data:/var/lib/mysql volumes: mysql-data: |
docker-compose ps で立ち上がっているか確認
1 2 3 4 5 6 7 |
$ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------- my-laravel-docker-env_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:13306->3306/tcp, 33060/tcp my-laravel-docker-env_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp my-laravel-docker-env_node_1 docker-entrypoint.sh node Up my-laravel-docker-env_php_1 docker-php-entrypoint php-fpm Up 9000/tcp |
こんな感じなら大丈夫でしょう。
Laravelをインストール
projectディレクトリにLaravelのソースをインストール。
それ用のスクリプトとしてinstall-laravel.shがあるのでそれを実行。
1 2 3 4 5 6 7 8 9 |
$ sh install-laravel.sh . . . Package manifest generated successfully. 42 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully. |
ただこの状態でlocalhost:8000で開いてもエラー画面になってしまう。
なので、
- ファイルの所有権限、実行権限を修正
- DB接続情報を修正
を行っていく必要がある
ファイルの所有権限、実行権限を修正
インストールしたLaravelプロジェクトはコンテナ内部で生成されるためソースの所有権限はrootになってしまっているので、それをホストユーザの所有権限にする。(コンテナ生成時にそこまでやれやって意見はごもっとも、ただそこまでモチベが上がらんかったw
所有権限
1 |
$ sudo chwon -R $UNAME:$UNAME project |
実行権限(storage配下をコンテナ内のユーザでも使用できるようにする)
1 |
$ sudo chmod -R 777 project/storage |
DB接続情報を修正
project/.envにMySQLへの接続設定があるので、ホスト名、ユーザ名、パスワードを変更する
1 2 3 4 5 6 7 8 9 10 11 |
. . . DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret . . |
DB_HOSTはdocker-compose.ymlのservicesの内のmysqlを参照している。
主にここらへんをいい感じに割り当てればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
version: '3' services: . . . mysql: image: mysql:8 environment: MYSQL_DATABASE: homestead MYSQL_USER: homestead MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root |
ここまでで設定はおしまい、いつもの画面が出れば完了。
開発している途中で都度バグも出るかもしれんがそこはご愛嬌w