こんにちは。たいきゅんです。
転職して最初の案件が新規案件で、当たり前のようにDockerを使うことになりました。
そこで改めてDockerの基礎について学習したのでまとめてみます。
最低限の設定で動くようにしてみています。
内容は初心者レベルですので、ポートフォリオ作成でDockerを使いたいという方は参考にして頂けると幸いです。
設定を細かく書く形ですので、基礎理解を深めたい方向けになっております。
また今回はコンテナの立ち上げまでをまとめております。次回の記事で以後の設定も記載します。
1. 今回作成する環境の要件
今回はLaravel環境を作成してみました。作成するコンテナは以下の3つです。
- Laravelコンテナ(PHP fpm)
- nginxコンテナ(プロキシ)
- PostgreSQLコンテナ
(PHP-fpmについては別途記事を作成してますのでそちらを参考に)
バージョンは基本的に記事作成時(2022年8月時点)の最新版で作成してます。
Nginx 1.23.1
Laravel Framework 9.25.1
PostgreSQL 14.4
2. フォルダ構造と実際に作成したDockerfile・docker-compose.yml
フォルダ構成は今回下記の形を使ってみました。
docker-compose.ymlを修正してお好みの形に編集して頂ければと思います。
.tree
.
├── docker
│ ├── laravel
│ │ ├── Dockerfile
│ │ └── settings
│ ├── nginx
│ ├── Dockerfile
│ └── settings
│ └── default.conf
├── docker-compose.yml
docker/laravel/Dockerfile
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY ./settings/php.ini /usr/local/etc/php/php.ini
RUN apt-get update && apt-get install -y libpq-dev nodejs git zip unzip \
&& docker-php-ext-install pdo_pgsql
WORKDIR /var/www/app
docker/nginx/Dockerfile
FROM nginx:1.23.1-alpine
COPY ./settings/default.conf /etc/nginx/conf.d/default.conf
docker-compose.yml
version: '3.8'
services:
app:
build: ./docker/laravel
volumes:
- ./laravel:/var/www/app
- 9000:9000
nginx:
build: ./docker/nginx
- 80:80
volumes:
- ./laravel:/var/www/app
db:
image: postgres:latest
environment:
TZ: Asia/Tokyo
POSTGRES_DB: test
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
- 5432:5432
volumes:
postgres_data:
driver: local
3. それぞれの設定項目の説明
それぞれのファイルの設定項目をまとめます。
1. docker/laravel/Dockerfile
php-fpmの8.0をイメージに設定しています。
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
composerインストールの部分です。
composerの設定箇所は決まっているので、上記で問題ないはずです。
COPY ./settings/php.ini /usr/local/etc/php/php.ini
php.iniファイルをdocker環境にセットしています。
RUN apt-get update && apt-get install -y libpq-dev nodejs git zip unzip \
&& docker-php-ext-install pdo_pg
必要な機能を諸々apt-get installしています。
今回は、laravelで必要になるnode、postgresqlとの接続に必要なlibpq-dev pdo_pg 、composer実行時に必要なzip,unzip,gitを選択しています。
今回は/var/www/appにlaravelをダウンロードしたいため、WORKDIRを設定しました。
これがあると、laravelコンテナに入った際の最初の作業位置が/var/www/appになります
2. docker/nginx/Dockerfile
作成当時の最新バージョンを設定。
COPY ./settings/default.conf /etc/nginx/conf.d/default.conf
動かすことだけ考えると、default.confの設定のみで十分なので/settings/default.confファイルをCOPYする形にしました。
3. docker-compose.yml
Laravelコンテナ
services:
app:
build: ./docker/laravel
volumes:
- ./laravel:/var/www/app
- 9000:9000
buildセクションで、buildに使用するDockerfileを指定しています。
またvolumeセクションで、laravelフォルダと、コンテナ内の/var/www/appがvolumeするように設定しています。
portsはなくても確か動きますが、明示したかったため設定しました。今回は
php-fpmデフォルトの9000番を設定してます。
nginxコンテナ
nginx:
build: ./docker/nginx
- 80:80
volumes:
- ./laravel:/var/www/app
buildセクションで、buildに使用するDockerfileを指定しています。
プロキシ設定するため、volumeセクションでlaravelコンテナと同様の設定をしています。
portsはなlaravelコンテナ同様、明示したかったためnginxデフォルトの80番を設定してます。
dbコンテナ
db:
image: postgres:latest
environment:
TZ: Asia/Tokyo
POSTGRES_DB: test
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
- 5432:5432
volumes:
postgres_data:
driver: local
TZは時間設定のための設定です。
POSTGRS_DBはデータベース作成時に自動で作成されるdb名を設定しています。今回はtestというデータベースを作成する形にしてみました。
POSTGRS_USERは、データベース作成時に自動で作成されるユーザー名を設定しています。今回はadminユーザーを作成する形にしてみました。
POSTGRS_PASSPORDデータベース作成時に自動で作成されるユーザーのパスワードの設定しています。今回はpasspordというパスワードを設定してみました。
volumesで、データの永続化の設定をしています。
この記述がないと、DBに登録したデータがコンテナを停止させると同時に消えてしまいますので注意してください。
4. nginx.confの設定
今回はnginxをプロキシサーバーとして使用したいため、その設定が必要です。そのためにはnginxコンテナに設定を書かないといけないのですが、それを今回はnginx.confファイルに記載しました。こちらを紹介します
docker/nginx/settings/default.conf
server {
listen 80;
root /var/www/app/public;
location / {
}
}
}
それぞれ説明していきます
listen 80;
root /var/www/app/public;
location / {
}
listen: 80番ポートをlistenさせます。
root: ルートフォルダを設定します。laravelの場合は、publicがルートフォルダになるので、コンテナ内でのパス(/var/www/app/public)を設定しました。
index: 最初に読み込むファイルを設定します。laravelの場合は、public/index.
phpを最初に読み込む必要があるので、そちらを設定します。
location: ファイルの振り分けの設定をしています。urlの設定があれば、そのURLにプロキシし、なければindex.
php?$
query_string....という形でプロキシするという設定にしています。
php-fpmの設定が必要なので、頭文字にfstcgiとついています。
pass:
phpコンテナのパスを設定します。ここは、
コンテナ名:ポート名と設定します。
param: サーバーに渡すパラメーターを設定します。詳細は省略しますが、上記設定でパラメータを渡すことができました。
include: パラメーターをincludeできるように設定しています
参考
PHP FastCGI の例 | NGINX
4. docker-compose コマンドで立ち上げ
設定が完了したら、docker-composeコマンドでコンテナを立ち上げられるはずです。
長くなったのでDB設定や、laravelのダウンロードは次回以降記載します。
今回の記事は以上となります。
LaravelのインストールとDB接続は次の記事に記載しておりますので是非参考にしてください。
最後まで読んで頂きありがとうございました!!