こんにちは🦎
あかはら。と申します。
この分野は本業であり、いわゆる趣味副業に効果的なものではありませんが、一般的なエンジニアが一日30分から1時間がんばろうという心意気とその記録のためのページです
◆今回の目的:Dockerの理解
▼参考
・https://qiita.com/kouta222/items/6bcfcd261cfea62238bc
・https://salumarine.com/how-to-prepare-nginx-laravel-development-environment-using-docker-compose/
▼作業内容
➀docker desktop をインストール
普通にexeファイルを開くだけですね🦎
➁Nginxを動作させる
参考のサイトの手順が不十分っぽいので、ここからは試行錯誤
- まずは開発環境を置くディレクトリを作成
mkdir docker-Laravel
cd docker-Laravel
- 下記のようなディレクトリを構築
docker/conf/default.conf
docker-compose.yml
index.html
docker-compose.yml の内容を下記のように作成
version: '3'
services:
web:
image: nginx:1.27.0
ports:
- '8000:80'
volumes:
- ./docker/conf/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
- default.conf の設定をする
default.conf はNginxの設定ファイル
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も作成
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>index</title>
</head>
<body>
<h1>トップページ</h1>
<p>docker-composeで作成したlaravel環境トップです。</p>
</body>
</html>
- サーバーを起動する
docker-compose up -d
- 表示確認
http://127.0.0.1:8000/
➂NginxでPHPを動作させる
docker-compose.yml を編集してservicesにphpを追加して動作させるPHPを指定
version: '3'
services:
# services欄のweb:コンテナ名(nginxをおく場所)
web:
# dockerhubにあるNginxのイメージのバージョン
image: nginx:1.27.0
# ホスト側のポート8000にアクセスすると、作成されるnginxのポート80にアクセスできる設定
ports:
- '8000:80'
# ./docker/conf/default.conf : 「ホストマシン」のファイルパス。現在のディレクトリからみて、docker/conf/というフォルダの中にあるdefault.confファイルを指す。
# /etc/nginx/conf.d/default.conf : コンテナ内のファイルパス。Nginxコンテナ内の/etc/nginx/conf.d/ディレクトリにあるdefault.confファイルを指す
# このマッピングによって、ホストマシン上のdefault.confファイルがコンテナ内のNginxの設定ファイルとして使用される
volumes:
- ./docker/conf/default.conf:/etc/nginx/conf.d/default.conf
# . : 「ホストマシン」のカレントディレクトリ(docker-compose.ymlが置かれているディレクトリ)
# /var/www/html : 「ホストマシン」の現在のディレクトリにあるファイルやフォルダがコンテナ内の'var/www/html'に対応。ホストマシン上で作業しているファイルがそのままコンテナ内のウェブサーバーで利用されている
- .:/var/www/html
php:
# PHPのバージョン記載
image: php:8.3-fpm
volumes:
- .:/var/www/html
- Nginxの設定もPHPを動作させることができるように編集
server {
listen 80;
# サーバールートディレクトリの設定 サーバーがリクエストを処理する際に使用するドキュメントルートを指定
root /var/www/html;
# インデックスファイルの指定
index index.html;
access_log /var/log/nginx/access_log;
error_log /var/log/nginx/error_log;
# URLパスに基づいて特定のリクエストを処理する方法を指定->`/`に一致するリクエストに対して処理する
location / {
# try_files: 指定された順序でファイルまたはディレクトリが存在するかを確認->存在するなら使用
# $uri: リクエストされたURIに対応するファイルを探す
# $uri/ リクエストされたURIに対応するディレクトリを探す
# /index.php$is_args$args: 上記のいずれも存在しない場合、リクエストを`/index.php`に渡し、クエリ文字列(`$is_args$args`)も渡す。
try_files $uri $uri/ /index.php$is_args$args;
# PHPファイルのリクエストをFastCGIサーバー(PHP-FPM)に渡す設定
location ~ \.php$ { # リクエストURIが`.php`で終わる場合にこのブロック内の設定を使用する
fastcgi_split_path_info ^(.+\.php)(/.+)$; # リクエストされたパスを分割するための正規表現(`SCRIPT_FILENAME`/`PATH_INFO`に分割)
fastcgi_pass php:9000; # phpという名称のコンテナで実行されているFastCGIサーバーにポート9000で接続->Docker Composeで定義されているPHP-FPMサービスに対応する
fastcgi_index index.php; # デフォルトのインデックスファイルを指定。ディレクトリがリクエストされた場合、`index.php`がデフォルトで使用される
include fastcgi_params; # Nginx の標準FastCGIパラメータ設定ファイルをインクルード
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # `SCRIPT_FILENAME`パラメータを設定。$document_root はドキュメントルート/ $fastcgi_script_name はリクエストされたスクリプトのパスを指す
fastcgi_param PATH_INFO $fastcgi_path_info; # `PATH_INFO` パラメータを設定。スクリプトに渡す追加のパス情報を含む
}
}
}
補足-作成時に補填した知識
▼プロトコル
- プロトコルは、コンピューターネットワークで通信を行うための一連の規則や手順のことを指す
- 異なるコンピュータ間で情報を交換するための「ルール」といった感じ
- 例)HTTP,FTP,SMTP,FascCGI
- index.phpを作成
default.confの中で/
にアクセスされたときにindex.phpを優先的に表示するようにしたので、PHPで作成する
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>index</title>
</head>
<body>
<h1>トップページ(PHP記述)</h1>
<p><?php echo "docker-composeで作成したLaravel環境トップです。";?></p>
</body>
</html>
- 動作確認
一度docker-compose downで停止してから再度docker-compose up -dで立ち上げ
➃ Laravelをインストールする
laravelをcomposerというパッケージ管理システムを利用する。
その際、環境作成時に動作設定をDockerfileに記述する
docker/phpディレクトリを作成し、そこにDockerfileを作成する.
├── docker
│ ├── conf
│ │ └── default.conf
│ └── php
│ └── Dockerfile
├── docker-compose.yml
├── index.html
└── index.php
- docker-compose.yml を改修する
version: '3'
services:
# services欄のweb:コンテナ名(nginxをおく場所)
web:
# dockerhubにあるNginxのイメージのバージョン
image: nginx:1.27.0
# ホスト側のポート8000にアクセスすると、作成されるnginxのポート80にアクセスできる設定
ports:
- '8000:80'
# ./docker/conf/default.conf : 「ホストマシン」のファイルパス。現在のディレクトリからみて、docker/conf/というフォルダの中にあるdefault.confファイルを指す。
# /etc/nginx/conf.d/default.conf : コンテナ内のファイルパス。Nginxコンテナ内の/etc/nginx/conf.d/ディレクトリにあるdefault.confファイルを指す
# このマッピングによって、ホストマシン上のdefault.confファイルがコンテナ内のNginxの設定ファイルとして使用される
volumes:
- ./docker/conf/default.conf:/etc/nginx/conf.d/default.conf
# . : 「ホストマシン」のカレントディレクトリ(docker-compose.ymlが置かれているディレクトリ)
# /var/www/html : 「ホストマシン」の現在のディレクトリにあるファイルやフォルダがコンテナ内の'var/www/html'に対応。ホストマシン上で作業しているファイルがそのままコンテナ内のウェブサーバーで利用されている
- .:/var/www/html
php:
# PHPのバージョン記載
# image: php:8.3-fpm
build: ./docker/php #Dockerfileがあるディレクトリを指定して、そのDockerfileにどんな環境を作成するかを定義する
volumes:
- .:/var/www/html
- Dockerfile を作成する
ここまでやりました。
次回はDockerfileの内容を確認し、理解を試みるところからですね。。。
RUN で実行するコマンドに関して何を実行させるのかを理解するのがちょっと時間かかりそうで( ゚Д゚)
明日も10分でもやりたい!
よしなに