Using Docker to Create & Run a Laravel Project
このチュートリアルで使用したコンピューター:
The computer used for this tutorial:
Ubuntu 19.04 clean install
Docker version 19.03.3, build a872fc2f86
docker-compose version 1.25.0, build 0a186604
一時的な php composer コンテナを使用してプロジェクトを作成します
Use temporary php composer container to create project
sudo docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel <mylaravelproject>
終了したら、プロジェクトフォルダーの所有権を変更します
Once finished, change the ownership of the project folder
sudo chown -R myuser:user <mylaravelproject>
プロジェクトフォルダー内に、 .cloud /
という新しいフォルダーを作成します。このフォルダーには、2つのフォルダー docker /
と nginx
が含まれます。
Inside the project folder, create a new folder called .cloud/
, which in turn, will have 2 folders docker/
& nginx
mylaravelproject/
.cloud/
docker/
nginx/
docker /
フォルダー内で、php container Dockerfile
を作成します
inside the docker/
folder, create the php container Dockerfile
この記事の時点では、PHP 7.4がリリースされていますが、私はそれを試していないため、すべてのプラグインが互換性を持っているかどうかわかりません。したがって、このチュートリアルはPHP 7.3で行います。
As of the time of this article, PHP 7.4 has been released, but I haven´t experimented with it, and don´t know if all plugins have been made compatible, hence, we will be doing this tutorial with PHP 7.3
Dockerfile
FROM php:7.3-fpm
# Installing dependencies
RUN apt-get update && apt-get install -y \
build-essential \
default-mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
libzip-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Installing extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath opcache
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Changing Workdir
WORKDIR /application
nginx
フォルダー内に、設定ファイルを作成します
inside the nginx
folder, we will create a config file
ngingx.conf
server {
listen 80;
index index.php index.html index.htm;
root /application/public; # default Laravel's entry point for all requests
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass api-server:9000; # address of a fastCGI server, must be the same name used for the container in the docker-compose.yml
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
プロジェクトのルートフォルダに戻って、 docker-compose.yml
ファイルを作成できます
Going back to the project root folder, we can now create the docker-compose.yml
file
docker-compose.yml
version: '3'
services:
app-server: #name of the container, must be the same used on the nginx.conf
build: .cloud/docker
image: larave-app #name of the image
depends_on:
- mysql
- mysql-test
- redis
volumes:
- ./:/application:cached
horizon:
build: .cloud/docker
image: laravel-app #name of the image
command: php artisan horizon
depends_on:
- mysql
volumes:
- ./:/application:cached
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=laraveldb
volumes:
- db-data:/var/lib/mysql:cached
mysql-test:
image: mysql:5.7
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=testing
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .cloud/nginx/nginx.conf:/etc/nginx/conf.d/default.conf:cached
- ./:/application:cached
depends_on:
- app-server #must be the same name of the laravel container used above
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
db-data:
コンテナーを実行する前に、mysqlのプロジェクトの .env
ファイルを変更します
Before running the container, modify the projects .env
file, for mysql
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=secret
私はdevにいるので、 storage /
パーミッションを変更することを忘れないでください、私は通常777パーミッションで行きます
Remember to change the storage/
permissions, since I´m on dev, I usually go with 777 permissions
sudo chmod -R 777 storage/
最後に、docker-composeを実行します
Finally, run the docker-compose
sudo docker-compose up --build
http:// localhost
で laravel ウェルカムページを見ることができます。
You can see the laravel welcome page, on http://localhost
移行または職人のコマンドを実行する場合は、**app-server ** コンテナを参照することで実行できます
If you want to run migrations, or any artisan command, you can do so, by referencing the app-server container
sudo docker-compose exec app-server php artisan migrate