# docker-compose && laravel 環境構築 ## 手順書 mkdir docker-compose-laravel cd docker-compose-laravel 以下のようにディレクトリーを作る ``` . ├── docker │ └── web │ └── default.conf ├── docker-compose.yml └── index.html ``` ##### docker-compose ``` version: '3' services: web: image: nginx:1.19.8 ports: - "8000:80" volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - .:/var/www/html ``` image -> dockerHubで公開されている物を指定する ports -> ホスト側のポート:コンテナ側のポート volumes -> Dockerにマウントしたいファイル群を指定 ホスト側のパス:コンテナ側のパス ##### default.conf ``` server { listen 80; root /var/www/html; index index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } ``` ##### index.html ``` <h1>Hello Docker Compose!</h1> <p>laravel!!</p> ``` docker-compose up -d docker ps ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d8acdbbf546 nginx:1.19.8 "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:8000->80/tcp docker-compose-laravel_web_1 ``` docker-compose exec web bash ### PHPを使えるようにする [FPMとは??](https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc) ##### docker-compose.yml ``` version: '3' services: + app: + image: php:7.2-fpm + volumes: + - .:/var/www/html web: image: nginx:1.19.8 + depends_on: + - app ports: - '8000:80' volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - .:/var/www/html ``` depends_on -> 依存関係を定義する ##### default.conf ``` server { listen 80; root /var/www/html; - index index.html + index index.php index.html index.htm; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; + location / { + try_files $uri $uri/ /index.php$is_args$args; + } + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass app:9000; + fastcgi_index index.php; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } } ``` index.html -> index.phpに変更 ##### index.php ``` <h1>Hello Docker Compose!</h1> <p>laravel!!</p> +<?php phpinfo();?> ``` docker-compose up -d ※新しく追加した内容があるのでrestartではなく、up -dに再度立ち上げる。 ### MySQLを立ち上げる ##### docker-compose.yml ``` version: '3' services: app: image: php:7.2-fpm + depends_on: + - mysql volumes: - .:/var/www/html web: image: nginx:1.19.8 depends_on: - app ports: - '8000:80' volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - .:/var/www/html + mysql: + image: mysql:5.7 + environment: + MYSQL_DATABASE: laravel + MYSQL_USER: root + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: password + ports: + - "3306:3306" + volumes: + - mysql-data:/var/lib/mysql +volumes: + mysql-data: ``` docker-compose up -d docker-compose exec mysql bash mysql -uroot -p ### laravelをインストールする ディレクトリ ``` . ├── docker │ ├── php │ │ └── Dockerfile │ └── web │ └── default.conf ├── docker-compose.yml └── index.php ``` ##### 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 ``` version: '3' services: app: - image: php:7.2-fpm + build: ./docker/php depends_on: - mysql volumes: - .:/var/www/html web: image: nginx:1.19.8 depends_on: - app ports: - '8000:80' volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - .:/var/www/html mysql: image: mysql:5.7 environment: MYSQL_DATABASE: laravel MYSQL_USER: root MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' volumes: - mysql-data:/var/lib/mysql volumes: mysql-data: ``` docker-compose down --rmi all --volumes --remove-orphans docker-compose up -d docker-compose exec app bash dockerのappの中にbashで入る [docker-compose command集](https://qiita.com/nikadon/items/995c5705ff1171f7484d) composer create-project --prefer-dist laravel/laravel docker-laravel ##### default.conf ``` server { listen 80; - root /var/www/html; + root /var/www/html/docker-laravel/public; index index.php index.html index.htm; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } ``` docker-compose restart ※もしかしたらいるかも `chmod -R 755 docker-laravel/storage docker-laravel/bootstrap/cache` ##### Error permission denided ``` $ touch /var/www/html/docker-laravel/storage/logs/laravel.log $ chmod 777 /var/www/html/docker-laravel/storage/logs/laravel.log $ chmod 775 /var/www/html/docker-laravel/storage/logs/ ``` session ``` chmod -R gu+w /var/www/html/docker-laravel/storage chmod -R guo+w /var/www/html/docker-laravel/storage php artisan clear ``` ### laravelとMySQLを連携する ##### .env ``` DB_CONNECTION=mysql - DB_HOST=127.0.0.1 + DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root - DB_PASSWORD= + DB_PASSWORD=password ``` DB_HOST -> docker-componentsで設定した名前を使用する php artisan migrate ``` root@7e74a9759a53:/var/www/html/docker-laravel# php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.05 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.03 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds) ``` これで連携されているのが確認できる。 ### 番外編 ##### Makefile ``` up: docker-compose up -d down: docker-compose down restart: docker-compose restart ps: docker ps app: docker-compose exec app bash mysql: docker-compose exec mysql bash -c "mysql -u $$MYSQL_USER -p$$MYSQL_PASSWORD $$MYSQL_DATABASE" clean: docker-compose down --rmi all --volumes --remove-orphans ``` 構文ルール ``` ターゲット名:依存関係 <TAB>コマンド ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up